Как ходить на сайт через VPN, поднятый на виртуалке

12
Александр Фролов
На сайте с 27.12.2007
Offline
155
#11

Да, с маршрутизацией на клиенте точно проблемы.

Конфиг сервера VPN:


root@fbsd:/usr/local/etc/openvpn # less openvpn-server.conf
port 1194
# proto tcp-server
proto udp
dev tun

user openvpn
group openvpn

# working directory
cd /usr/local/etc/openvpn

# SIGUSR1 restart protected file rereading fix
persist-key
persist-tun

# auth & encryption
tls-server
tls-timeout 120
dh /usr/local/etc/openvpn/dh2048.pem
ca /usr/local/etc/openvpn/CA_cert.pem
cert /usr/local/etc/openvpn/certs/server.pem
key /usr/local/etc/openvpn/keys/server.pem
crl-verify /usr/local/etc/openvpn/crl/crl.pem
tls-auth /usr/local/etc/openvpn/ta.key 0

#client-cert-not-required
#auth MD5
#cipher BF-CBC

# network
server 10.15.0.0 255.255.255.0
client-config-dir /usr/local/etc/openvpn/ccd
client-to-client
topology subnet
max-clients 5
# duplicate-cn

# clients network options
push "dhcp-option DNS 10.15.0.1"
# push "dhcp-option DNS 88.198.33.214"
# route 10.15.0.0 255.255.255.0

# compression
comp-lzo

# network flexibility
keepalive 10 120
#ping-restart

status /var/log/openvpn/openvpn-status.log 1
status-version 3
log-append /var/log/openvpn/openvpn-server.log
verb 6
mute 20

Конфиг клиента:


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

route -print


C:\Users\admin>route print
===========================================================================
Список интерфейсов
23...00 ff bf 65 12 73 ......TAP-Windows Adapter V9
10...40 61 86 64 14 9a ......Realtek PCIe GBE Family Controller
20...00 50 56 c0 00 01 ......VMware Virtual Ethernet Adapter for VMnet1
21...00 50 56 c0 00 08 ......VMware Virtual Ethernet Adapter for VMnet8
1...........................Software Loopback Interface 1
22...00 00 00 00 00 00 00 e0 Адаптер Microsoft ISATAP
11...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface
13...00 00 00 00 00 00 00 e0 Адаптер Microsoft ISATAP #2
15...00 00 00 00 00 00 00 e0 Адаптер Microsoft ISATAP #3
24...00 00 00 00 00 00 00 e0 Адаптер Microsoft ISATAP #4
===========================================================================

IPv4 таблица маршрута
===========================================================================
Активные маршруты:
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.194 20
10.15.0.0 255.255.255.0 On-link 10.15.0.2 286
10.15.0.2 255.255.255.255 On-link 10.15.0.2 286
10.15.0.255 255.255.255.255 On-link 10.15.0.2 286
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
169.254.0.0 255.255.0.0 On-link 169.254.57.212 276
169.254.57.212 255.255.255.255 On-link 169.254.57.212 276
169.254.255.255 255.255.255.255 On-link 169.254.57.212 276
192.168.0.0 255.255.255.0 On-link 192.168.0.194 276
192.168.0.194 255.255.255.255 On-link 192.168.0.194 276
192.168.0.255 255.255.255.255 On-link 192.168.0.194 276
192.168.59.0 255.255.255.0 On-link 192.168.59.1 276
192.168.59.1 255.255.255.255 On-link 192.168.59.1 276
192.168.59.255 255.255.255.255 On-link 192.168.59.1 276
224.0.0.0 240.0.0.0 On-link 127.0.0.1 306
224.0.0.0 240.0.0.0 On-link 192.168.0.194 276
224.0.0.0 240.0.0.0 On-link 10.15.0.2 286
224.0.0.0 240.0.0.0 On-link 169.254.57.212 276
224.0.0.0 240.0.0.0 On-link 192.168.59.1 276
255.255.255.255 255.255.255.255 On-link 127.0.0.1 306
255.255.255.255 255.255.255.255 On-link 192.168.0.194 276
255.255.255.255 255.255.255.255 On-link 10.15.0.2 286
255.255.255.255 255.255.255.255 On-link 169.254.57.212 276
255.255.255.255 255.255.255.255 On-link 192.168.59.1 276
===========================================================================
Постоянные маршруты:
Отсутствует

IPv6 таблица маршрута
===========================================================================
Активные маршруты:
Метрика Сетевой адрес Шлюз
1 306 ::1/128 On-link
10 276 fe80::/64 On-link
23 286 fe80::/64 On-link
20 276 fe80::/64 On-link
21 276 fe80::/64 On-link
20 276 fe80::5fc:5690:aa19:39d4/128
On-link
10 276 fe80::45f8:27a5:2b1:b157/128
On-link
23 286 fe80::d58f:c43e:648e:3e64/128
On-link
21 276 fe80::d90c:f7c2:50bd:8ff4/128
On-link
1 306 ff00::/8 On-link
10 276 ff00::/8 On-link
23 286 ff00::/8 On-link
20 276 ff00::/8 On-link
21 276 ff00::/8 On-link
===========================================================================
Постоянные маршруты:
Отсутствует

Буду очень благодарен за советы по настройке.

L
На сайте с 29.10.2006
Offline
110
#12

Сначала полностью хотелось бы прояснить все моменты. Т.е. четко очертить исходную задачу, чтобы не получилось, что кто-то говорит про Фому, а кто-то про Ерёму.

Итого:

У Вас есть виртуальная машина с FreeBSD, на которой крутится сайт, к которому нужно дать доступ разработчику.

OpenVPN-сервер расположен на виртуальной машине (у нее есть выделенный IP, к которому идет подключение) или OpenVPN-сервер находится на шлюзе в локальной сети, в которую входит Ваша машина FreeBSD?

Разработчик, насколько понимаю, использует OpenVPN-клиента для подключения.

Вы говорите, что проблема доступа к виртуалке с динамических IP через SSH решена. Напишите, пожалуйста, как Вы подключаетесь через SSH. Насколько понимаю, Вы вбиваете адрес 10.15.0.1 (если это сервер) и подключаетесь по PuTTY или другому SSH клиенту. Если это так, и Вы говорите, что все работает - Вам нужно получить доступ к сайту по http/s . Вы пробовали использовать файл hosts, чтобы сделать так, чтобы по имени URL резолвился адрес, который находится через туннель?

SeBlock (/ru/forum/851994) - программа для ведения проектов по НЧ/СЧ. Буду рад отзывам/комментариям.
Andreyka
На сайте с 19.02.2005
Offline
822
#13

1. Делаем openvpn без дефалтного гейта

2. Добавляем маршрут на сайт вручную через route

3. ???

4. Profit!

Не стоит плодить сущности без необходимости
Александр Фролов
На сайте с 27.12.2007
Offline
155
#14
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 на виртуалке...

L
На сайте с 29.10.2006
Offline
110
#15
Александр Фролов:

Что касается сайта, то он расположен на другом сервере, не на виртуалке, на которой установлен OpenVPN. Я пытался настроить проксирование через nginx

Т.е. web-сервер никак к OpenVPN не относится и не имеет своего клиента?

Проксировать запросы через nginx не слишком правильно по-моему - если дальше нужно будет работать с FTP или другими сервисами (а думаю пригодится), то уже не поможет.

Александр Фролов:
При этом хотелось бы сделать так, чтобы браузер, запущенный на рабочей станции девелопера, ходил на сервисы, закрытые файерволом, не напрямую, а через виртуалку девелопера, у которой фиксированный внешний адрес. В этом случае я бы мог прописать этот адрес виртуалки и разрешить доступ с него на закрытые сервисы.

Как насчет подхода: Вы ставите VPN-сервер (станция девелопера). Этот VPN-сервер находится в одной локальной сети с сайтами, к которым нужно давать доступ. На фаерволе разрешаете любой трафик из VPN-сети к адресам Ваших сайтов. При этом через VPN нужно транслировать маршрут клиенту в Вашу локальную сеть с сервисами.

Может возникнуть проблема, если адреса сетей будут одинаковыми у клиента и за сервером OpenVPN. Можно тоже обойти - установить OpenVPN клиенты внутри локальной сети на сайтах, которые бы подключались к Вашему OpenVPN серверу. В конфигурации разрешить клиентам видеть друг друга. Тогда Вы бы просто ходили бы внутри виртуальной сети.

Зачем заниматься проксированием не понимаю.

Александр Фролов
На сайте с 27.12.2007
Offline
155
#16
Luxer:
Т.е. web-сервер никак к OpenVPN не относится и не имеет своего клиента?
Проксировать запросы через nginx не слишком правильно по-моему - если дальше нужно будет работать с FTP или другими сервисами (а думаю пригодится), то уже не поможет.



Как насчет подхода: Вы ставите VPN-сервер (станция девелопера). Этот VPN-сервер находится в одной локальной сети с сайтами, к которым нужно давать доступ. На фаерволе разрешаете любой трафик из VPN-сети к адресам Ваших сайтов. При этом через VPN нужно транслировать маршрут клиенту в Вашу локальную сеть с сервисами.

Может возникнуть проблема, если адреса сетей будут одинаковыми у клиента и за сервером OpenVPN. Можно тоже обойти - установить OpenVPN клиенты внутри локальной сети на сайтах, которые бы подключались к Вашему OpenVPN серверу. В конфигурации разрешить клиентам видеть друг друга. Тогда Вы бы просто ходили бы внутри виртуальной сети.

Зачем заниматься проксированием не понимаю.

Поставить рабочие станции девелоперов, к сожалению, в одну сеть с закрытыми сервисами не получится. Я не рискну что-то менять на серверах сервисов, т.к. там все довольно сложно и критично...

Все, что я могу сделать на серверах сервисов - это разрешить доступ с определенных адресов IP. Поэтому я и думал про проксирование.

L
На сайте с 29.10.2006
Offline
110
#17

На OpenVPN сервере добавьте

push "route 1.1.1.0 255.255.255.0"

где 1.1.1.0 - локальная сеть, в которой находятся и Ваши закрытые сервисы и OpenVPN сервер + правильная маска.

Эта опция будет говорить клиенту, что такая-то удаленная сеть находится за сервером OpenVPN, соответственно трафик в нее будет передаваться по туннелю. Единственное - если не будет конфликта сетей с OpenVPN клиентом.

---------- Добавлено 27.05.2014 в 13:53 ----------

И обязательно проверьте фаервол, чтобы не блокировал трафик из VPN сети.

Также насчет обратной маршрутизации. Прийдя на закрытый web-сервис пакет должен быть возвращен назад через машину девелопера на VPN-клиент. Соответственно, закрытый web-сервер должен знать о существовании такой сети.

Если машина девелопера - это маршрут по умолчанию, то ничего делать не нужно. Если же нет - все же придется прописать маршрут на закрытом web-сервере, который бы говорил, что в сеть 10.15.0.0/24 маршрут лежит через машину девелопера.

Александр Фролов
На сайте с 27.12.2007
Offline
155
#18
Luxer:
На OpenVPN сервере добавьте

push "route 1.1.1.0 255.255.255.0"

где 1.1.1.0 - локальная сеть, в которой находятся и Ваши закрытые сервисы и OpenVPN сервер + правильная маска.

Наши закрытые сервисы и OpenVPN сервер находятся вообще в разных сетях. Причем каждый закрытый сервис находится в своей сети.

Александр Фролов
На сайте с 27.12.2007
Offline
155
#19

Все же решил проблему с помощью nginx. Прописал в hosts адрес виртуалки в сети VPN, поставил на эту виртуалку nginx и настроил редирект на закрытые серверы. Работает)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий