Задать вопрос
@ADFERO
Инженер видеонаблюдения

Сервер-клиент openvpn win не видят за собой локальную сеть. как исправить?

Приветствую .

win server 2019
Сервер конф

port 1194
# TCP or UDP server?
;proto tcp
proto udp
;dev tap
dev tun
;dev-node MyTap
ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\server.crt"
key "C:\\Program Files\\OpenVPN\\config\\server.key" # This file should be kept secret
dh "C:\\Program Files\\OpenVPN\\config\\dh.pem"
;topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
;server-bridge
push "route 192.168.1.0 255.255.255.0"
push "route 172.22.24.2 255.255.248.0"
client-config-dir "C:\\Program Files\\OpenVPN\\config\\ccd"
;route 192.168.40.128 255.255.255.248
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
;learn-address ./script
;push "redirect-gateway def1 bypass-dhcp"
;push "dhcp-option DNS 8.8.8.8"
;push "dhcp-option DNS 8.8.4.4"
client-to-client
;duplicate-cn
keepalive 10 120
tls-auth "C:\\Program Files\\OpenVPN\\config\\tls-auth.key" 0 # This file is secret
cipher AES-256-CBC
;compress lz4-v2
;push "compress lz4-v2"
#comp-lzo
;max-clients 100
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
;log openvpn.log
;log-append openvpn.log
verb 3
;mute 20
explicit-exit-notify 1


win 10
Клиент конф

client
;dev tap
dev tun
;dev-node MyTap
;proto tcp
proto udp
remote х.х.х.х 1194
;remote my-server-2 1194
;remote-random
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]
;mute-replay-warnings
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-GCM
#comp-lzo
verb 3
;mute 20
push "route 192.168.1.0 255.255.255.0"
push "route 172.22.24.0 255.255.248.0"


C:\Program Files\OpenVPN\config\ccd\client
iroute 192.168.1.1 255.255.255.0

ifconfig-push 10.8.0.8 10.8.0.1 255.255.255.252
  • Вопрос задан
  • 3236 просмотров
Подписаться 1 Средний 10 комментариев
Решения вопроса 1
@res2001
Developer, ex-admin
Подключение ВПН на клиенте и сервере создает дополнительный виртуальный сетевой адаптер со своим IP адресом. Программное обеспечение ВПН отвечает только за трафик, который попадает внутрь ВПН. Все остальное конфигурируется стандартными средствами: таблицы маршрутизации, фаерволы, NAT. В openvpn некоторые настройки таблиц маршрутизации можно (нужно) указывать в конфиге ВПН, а не напрямую править таблицы в ОС. Все это относится к любой ОС - принципы работы openvpn одинаковы в линукс и винде.

Обычно конфиг клиента делают максимально "легким". Там указывают только необходимые опции для подключения к серверу (протокол, адрес и порт сервера, параметры шифрования и логирования). Все что касается маршрутизации между сетями (route, push route) убирается в конфиг сервера.
Опция push "route ..." - добавляет маршрут на удаленной стороне. Т.е. если опция указана в конфиге сервера, то маршрут добавляется на стороне клиента.
Для добавления маршрута на стороне сервера в конфиге сервера используется опция: route

CCD файлы:
У вас не правильный синтаксис для опции ifconfig-push.
Правильный такой: ifconfig-push client_ip mask
Т.е. IP сервера не требуется указывать.
В опции iroute указываем сети за этим конкретным клиентом. Эти маршруты добавятся в таблицу маршрутизации сервера при подключении клиента. Не нужно дублировать эти маршруты опциями route в основном конфиге сервера.
Так же можно в CCD файле указать опцию push route для добавления маршрута клиенту для сети за сервером. Обычно push route указывают в основном конфиге сервера и она работает для всех клиентов.

Но! Что бы сети за клиентом и сервером могли друг друга видеть они должны знать по каким маршрутам передавать трафик друг для друга. Если ВПН сервер и ВПН клиент являются для своих сетей шлюзами по умолчанию - то проблемы нет, компы внутри сетей и так будут слать весь трафик через них. Но если ВПН сервер и/или ВПН клиент не являются шлюзами по умолчанию для своих сетей, то требуется добавить дополнительные маршурты для соседних сетей через ВПН сервер/клиент. Централизованно маршруты можно добавить через опции DHCP, возможно политиками AD.

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

После того как вы добились соединения ВПН клиента с сервером все остальное - это правильная настройка маршрутизации и фаерволов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@mureevms
По мотивам комментов решил описать как должно работать в теории. Специально обернул таким тегом, чтобы не париться с html списком, это боль, когда уже православный markdown сделают.
1. При поднятом туннеле между клиентом и сервером есть коннект по дефолту, ничего дополнительно делать не требуется.

Клиент > сервер
2. Чтобы дать клиенту доступ в сеть за сервером, надо (сделать все пункты):
	2.1. На сервере в конфиге OVPN сервера сделать пуш нужной подсети
	2.2. На сервере разрешить форвардинг между OVPN подсетью и локальной (которая за сервером)
2.x. Если за сервером несколько подсетей, повторить для каждой
3. Чтобы сети за клиентом дать доступ к сети за сервером надо сделать п.2 и далее два варианта (или/или):
	3.1. Если клиент является шлюзом для своей локальной сети
		3.1.1. На клиенте разрешить форвардинг между OVPN подсетью и локальной (которая за клиентом)
	3.2. Если клиент НЕ является шлюзом для локальной сети, надо выполнить п. 3.1.1 и
		3.2.1. На каждой машине в локальной сети (которая за клиентом) прописать роут до ВПН подсети через хост на котором установлен клиент
3.x. Если за клиентом несколько подсетей, повторить для каждой

Сервер > клиент
4. Чтобы дать серверу доступ в сеть за клиентом надо выполнить п.2 и
	4.1. На клиенте разрешить форвардинг между OVPN подсетью и локальной (которая за клиентом)
4.x. Если за клиентом несколько подсетей, повторить для каждой
5. Чтобы сети за сервером дать доступ к сети за клиентом надо сделать п.2, п.3 и (или/или):
	5.1. Если сервер является шлюзом для своей локальной сети
		5.1.1. На сервере разрешить форвардинг между OVPN подсетью и локальной (которая за сервером)
	5.2. Если сервер НЕ является шлюзом для локальной сети, надо выполнить п. 5.1.1 и
		5.2.1. На каждой машине в локальной сети (которая за сервером) прописать роут до ВПН подсети через хост на котором установлен сервер
5.x. Если за клиентом несколько подсетей, повторить для каждой

Клиент <> сервер
6. Чтобы сети и за клиентом и за сервером видели друг друга, надо сделать все пункты.

Еще важный и не всегда очевидный момент, подсети всех объединяемых локальных сетей не должны пересекаться, т.е. не должны быть одинаковыми или не входить одна в другую.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы