Luxer: Т.е. web-сервер никак к OpenVPN не относится и не имеет своего клиента?
Проксировать запросы через nginx не слишком правильно по-моему - если дальше нужно будет работать с FTP или другими сервисами (а думаю пригодится), то уже не поможет.
Как насчет подхода: Вы ставите VPN-сервер (станция девелопера). Этот VPN-сервер находится в одной локальной сети с сайтами, к которым нужно давать доступ. На фаерволе разрешаете любой трафик из VPN-сети к адресам Ваших сайтов. При этом через VPN нужно транслировать маршрут клиенту в Вашу локальную сеть с сервисами.
Может возникнуть проблема, если адреса сетей будут одинаковыми у клиента и за сервером OpenVPN. Можно тоже обойти - установить OpenVPN клиенты внутри локальной сети на сайтах, которые бы подключались к Вашему OpenVPN серверу. В конфигурации разрешить клиентам видеть друг друга. Тогда Вы бы просто ходили бы внутри виртуальной сети.
Зачем заниматься проксированием не понимаю.
Поставить рабочие станции девелоперов, к сожалению, в одну сеть с закрытыми сервисами не получится. Я не рискну что-то менять на серверах сервисов, т.к. там все довольно сложно и критично...
Все, что я могу сделать на серверах сервисов - это разрешить доступ с определенных адресов IP. Поэтому я и думал про проксирование.
Luxer: Сначала полностью хотелось бы прояснить все моменты. Т.е. четко очертить исходную задачу, чтобы не получилось, что кто-то говорит про Фому, а кто-то про Ерёму.
Итого:
У Вас есть виртуальная машина с FreeBSD, на которой крутится сайт, к которому нужно дать доступ разработчику.
Немного не так.
Есть виртуальные машины разработчиков со своими внешними IP, и есть некие сервисы (сайты), которые используются всеми разработчиками (типа CRM и ERP). Эти сервисы работают не на виртуалках разработчиков, а на отдельных физических серверах, со своими IP.
Как виртуалки разработчиков, так и сервисы, защищены файерволом по портам.
Проблема заключается в том, что некоторые рабочие станции девелоперов (Linux и Windows), работают на динамических IP, выделяемых провайдерами. Поэтому сейчас нам приходится вручную прописывать доступ к сервисам, расположенным на выделенных серверах. Раньше мы также вручную прописывали доступ к 22 порту и для виртуалок девелоперов.
Идея была в том, чтобы сделать VPN до виртуалки разработчика. Это дает воpможность подключаться по SSH, указывая PuTTY VPN-адрес виртуалки, такой как 10.15.0.1.
При этом хотелось бы сделать так, чтобы браузер, запущенный на рабочей станции девелопера, ходил на сервисы, закрытые файерволом, не напрямую, а через виртуалку девелопера, у которой фиксированный внешний адрес. В этом случае я бы мог прописать этот адрес виртуалки и разрешить доступ с него на закрытые сервисы.
Luxer:
OpenVPN-сервер расположен на виртуальной машине (у нее есть выделенный IP, к которому идет подключение) или OpenVPN-сервер находится на шлюзе в локальной сети, в которую входит Ваша машина FreeBSD?
Разработчик, насколько понимаю, использует OpenVPN-клиента для подключения.
Первый вариант: OpenVPN-сервер расположен на виртуальной машине девелопера. У этой виртуалки есть внешний IP.
Luxer:
Вы говорите, что проблема доступа к виртуалке с динамических IP через SSH решена. Напишите, пожалуйста, как Вы подключаетесь через SSH. Насколько понимаю, Вы вбиваете адрес 10.15.0.1 (если это сервер) и подключаетесь по PuTTY или другому SSH клиенту. Если это так, и Вы говорите, что все работает - Вам нужно получить доступ к сайту по http/s . Вы пробовали использовать файл hosts, чтобы сделать так, чтобы по имени URL резолвился адрес, который находится через туннель?
Да, запускаем в винде клиента OpenVPN, PuTTY и указываем адрес 10.15.0.1.
Что касается сайта, то он расположен на другом сервере, не на виртуалке, на которой установлен OpenVPN. Я пытался настроить проксирование через nginx, запустив его на виртуалке, и прописав IP 10.15.0.1 в файле hosts. Проксирование как-то не заработало полностью, сайты открывались с ошибкой. Возможно я не умею настраивать nginx, что скорее всего...
Но может эта задача действительно решается как-то проще, например, правильной настройкой маршрутизации или использованием NAT на виртуалке...
client dev tun proto udp remote <IP виртуалки> 1194 tls-client ca "CA_cert.pem" cert "CClient.pem" key "KClient.pem" tls-auth "ta.key" 1 #ns-cert-type server #remote-cert-tls server comp-lzo tun-mtu 1500 mssfix 1450 verb 6
Вообще я просто установил OpenVPN GUI по инструкции, добавил сертификаты. После подключения я могу обращаться к виртуалке через SSH, указывая PuTTY адрес вида 10.12.1.3. Может надо делать что-то специальное, чтобы браузер отправлял запросы через сеть VPN и с адреса VPN, а не через сеть локального провайдера и его IP?
Тут еще такой момент - сервер https_://developer.domain.ru:6678/ не находится в сети VPN и не будет туда добавлен. Тут нужен какой-нибудь прокси, наверное?
Himiko: Так в чём проблема? Если VPN работает с выходом "наружу", то на других серверах разрешите доступ с ip-адреса виртуалки с VPN.
Да, это мы сделали. Проблема вот в чем.
Разработчик обращается к ресурсу по адресу вида: https_://developer.domain.ru:6678/, со своего домашнего компьютера, у которого динамический IP от провайдера и IP от VPN вида 10.12.1.3.
При этом браузер пытается загрузить https_://developer.domain.ru:6678/, отправляя запрос с динамического IP домашнего компьютера. А хочется сделать так, чтобы запрос шел с адреса IP виртуалки, через VPN. Тогда мы действительно можем открыть доступ для внешнего IP виртуалки и все будет хорошо.
Т.е. браузер не ходит на сайт через VPN и виртуалку, а ходит напрямую... В этом трабл.
На OpenVPN сервере добавьте
push "route 1.1.1.0 255.255.255.0"
где 1.1.1.0 - локальная сеть, в которой находятся и Ваши закрытые сервисы и OpenVPN сервер + правильная маска.
Наши закрытые сервисы и OpenVPN сервер находятся вообще в разных сетях. Причем каждый закрытый сервис находится в своей сети.
Т.е. web-сервер никак к OpenVPN не относится и не имеет своего клиента?
Проксировать запросы через nginx не слишком правильно по-моему - если дальше нужно будет работать с FTP или другими сервисами (а думаю пригодится), то уже не поможет.
Как насчет подхода: Вы ставите VPN-сервер (станция девелопера). Этот VPN-сервер находится в одной локальной сети с сайтами, к которым нужно давать доступ. На фаерволе разрешаете любой трафик из VPN-сети к адресам Ваших сайтов. При этом через VPN нужно транслировать маршрут клиенту в Вашу локальную сеть с сервисами.
Может возникнуть проблема, если адреса сетей будут одинаковыми у клиента и за сервером OpenVPN. Можно тоже обойти - установить OpenVPN клиенты внутри локальной сети на сайтах, которые бы подключались к Вашему OpenVPN серверу. В конфигурации разрешить клиентам видеть друг друга. Тогда Вы бы просто ходили бы внутри виртуальной сети.
Зачем заниматься проксированием не понимаю.
Поставить рабочие станции девелоперов, к сожалению, в одну сеть с закрытыми сервисами не получится. Я не рискну что-то менять на серверах сервисов, т.к. там все довольно сложно и критично...
Все, что я могу сделать на серверах сервисов - это разрешить доступ с определенных адресов IP. Поэтому я и думал про проксирование.
Сначала полностью хотелось бы прояснить все моменты. Т.е. четко очертить исходную задачу, чтобы не получилось, что кто-то говорит про Фому, а кто-то про Ерёму.
Итого:
У Вас есть виртуальная машина с FreeBSD, на которой крутится сайт, к которому нужно дать доступ разработчику.
Немного не так.
Есть виртуальные машины разработчиков со своими внешними IP, и есть некие сервисы (сайты), которые используются всеми разработчиками (типа CRM и ERP). Эти сервисы работают не на виртуалках разработчиков, а на отдельных физических серверах, со своими IP.
Как виртуалки разработчиков, так и сервисы, защищены файерволом по портам.
Проблема заключается в том, что некоторые рабочие станции девелоперов (Linux и Windows), работают на динамических IP, выделяемых провайдерами. Поэтому сейчас нам приходится вручную прописывать доступ к сервисам, расположенным на выделенных серверах. Раньше мы также вручную прописывали доступ к 22 порту и для виртуалок девелоперов.
Идея была в том, чтобы сделать VPN до виртуалки разработчика. Это дает воpможность подключаться по SSH, указывая PuTTY VPN-адрес виртуалки, такой как 10.15.0.1.
При этом хотелось бы сделать так, чтобы браузер, запущенный на рабочей станции девелопера, ходил на сервисы, закрытые файерволом, не напрямую, а через виртуалку девелопера, у которой фиксированный внешний адрес. В этом случае я бы мог прописать этот адрес виртуалки и разрешить доступ с него на закрытые сервисы.
OpenVPN-сервер расположен на виртуальной машине (у нее есть выделенный IP, к которому идет подключение) или OpenVPN-сервер находится на шлюзе в локальной сети, в которую входит Ваша машина FreeBSD?
Разработчик, насколько понимаю, использует OpenVPN-клиента для подключения.
Первый вариант: OpenVPN-сервер расположен на виртуальной машине девелопера. У этой виртуалки есть внешний IP.
Вы говорите, что проблема доступа к виртуалке с динамических IP через SSH решена. Напишите, пожалуйста, как Вы подключаетесь через SSH. Насколько понимаю, Вы вбиваете адрес 10.15.0.1 (если это сервер) и подключаетесь по PuTTY или другому SSH клиенту. Если это так, и Вы говорите, что все работает - Вам нужно получить доступ к сайту по http/s . Вы пробовали использовать файл hosts, чтобы сделать так, чтобы по имени URL резолвился адрес, который находится через туннель?
Да, запускаем в винде клиента OpenVPN, PuTTY и указываем адрес 10.15.0.1.
Что касается сайта, то он расположен на другом сервере, не на виртуалке, на которой установлен OpenVPN. Я пытался настроить проксирование через nginx, запустив его на виртуалке, и прописав IP 10.15.0.1 в файле hosts. Проксирование как-то не заработало полностью, сайты открывались с ошибкой. Возможно я не умею настраивать nginx, что скорее всего...
Но может эта задача действительно решается как-то проще, например, правильной настройкой маршрутизации или использованием NAT на виртуалке...
Да, с маршрутизацией на клиенте точно проблемы.
Конфиг сервера VPN:
Конфиг клиента:
route -print
Буду очень благодарен за советы по настройке.
Вообще я просто установил OpenVPN GUI по инструкции, добавил сертификаты. После подключения я могу обращаться к виртуалке через SSH, указывая PuTTY адрес вида 10.12.1.3. Может надо делать что-то специальное, чтобы браузер отправлял запросы через сеть VPN и с адреса VPN, а не через сеть локального провайдера и его IP?
Тут еще такой момент - сервер https_://developer.domain.ru:6678/ не находится в сети VPN и не будет туда добавлен. Тут нужен какой-нибудь прокси, наверное?
Так в чём проблема?
Если VPN работает с выходом "наружу", то на других серверах разрешите доступ с ip-адреса виртуалки с VPN.
Да, это мы сделали. Проблема вот в чем.
Разработчик обращается к ресурсу по адресу вида: https_://developer.domain.ru:6678/, со своего домашнего компьютера, у которого динамический IP от провайдера и IP от VPN вида 10.12.1.3.
При этом браузер пытается загрузить https_://developer.domain.ru:6678/, отправляя запрос с динамического IP домашнего компьютера. А хочется сделать так, чтобы запрос шел с адреса IP виртуалки, через VPN. Тогда мы действительно можем открыть доступ для внешнего IP виртуалки и все будет хорошо.
Т.е. браузер не ходит на сайт через VPN и виртуалку, а ходит напрямую... В этом трабл.
Понятно, всем спасибо за ответы! Видимо, надо подумать, как уменьшить количество файлов в этой папке до разумного.
Александр Фролов, однако, лог общения, который вы привели, в активном режиме. Видимо, не стоит.
Да, после поста этого лога я пробовал и пассивный режим, но сам по себе пассивный режим не помог. Клиент добавил очень много файлов в папку.
Увеличил таймаут в FileZilla до 60 сек. и заработало!
Увы, пассивный и стоит (