У меня есть клиент OpenVPN на Windows 7, который подключается к серверу OpenVPN одним касанием.
Туннель устанавливается правильно.
AFAIK, нажатие означает, что мой виртуальный адаптер `` виртуально '' подключен к удаленной локальной сети, получает IP-адрес удаленной локальной сети и участвует в широковещательной передаче локальной сети и так далее.
Когда туннель установлен, мой виртуальный адаптер получает правильный IP.
Но я не могу пинговать другие хосты в удаленной сети.
Это может быть проблема на стороне сервера, но, прежде чем проверить это, я заметил что-то странное на стороне клиента в том, как Windows обрабатывает виртуальный интерфейс.
Давай начнем.
Когда туннель открыт, виртуальный интерфейс тоже работает. В моей таблице маршрутизации я вижу свою физическую сеть 192.168.2.0, на самом деле мой локальный IP-адрес 192.168.2.134.
Затем я вижу удаленную сеть 172.16.1.0, напрямую подключенную к моему интерфейсу 172.16.1.40. Все идет нормально. (я удалил петлевые записи)
0.0.0.0 0.0.0.0 192.168.2.1 192.168.2.134 25 172.16.1.0 255.255.255.0 On-link 172.16.1.40 276 172.16.1.40 255.255.255.255 On-link 172.16.1.40 276 172.16.1.255 255.255.255.255 On-link 172.16.1.40 276 192.168.2.0 255.255.255.0 On-link 192.168.2.134 281 192.168.2.134 255.255.255.255 On-link 192.168.2.134 281 192.168.2.255 255.255.255.255 On-link 192.168.2.134 281 224.0.0.0 240.0.0.0 On-link 172.16.1.40 276 224.0.0.0 240.0.0.0 On-link 192.168.2.134 281 255.255.255.255 255.255.255.255 On-link 172.16.1.40 276 255.255.255.255 255.255.255.255 On-link 192.168.2.134 281
Таким образом, клиенты в удаленной сети должны быть доступны не через шлюз, а через прямую маршрутизацию через виртуальный интерфейс, предоставляемый openvpn.
Но когда я отслеживаю маршрут к узлу в удаленной сети (который мой компьютер должен видеть как локальный), мой клиент направляет его на шлюз и, очевидно, теряется.
C:\Users\agostinox>tracert 172.16.1.17 1 1 ms 1 ms 1 ms 192.168.2.1 2 14 ms 96 ms 101 ms 192.168.1.1 3 * * * Richiesta scaduta. 4 24 ms 12 ms 12 ms 172.17.129.137 5 * * * Richiesta scaduta.
И тут кажется, что система маршрутизирует пакеты прямо к воротам поскольку он не видел напрямую подключенного сетевого адаптера. Почему это происходит?
C:\Users\agostinox>openvpn --version OpenVPN 2.3.6 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [PKCS11] [IPv6] built on Mar 19 2015 library versions: OpenSSL 1.0.1m 19 Mar 2015, LZO 2.08
И моя клиентская конфигурация:
remote xxx.xxx.xxx.xxx cipher AES-128-CBC port 1194 proto tcp-client dev tap ifconfig 172.16.1.40 255.255.255.0 dev-node "Connessione alla rete locale (LAN) 3" secret a_file_containing_my_preshared_key.key ping 10 comp-lzo verb 4 mute 10
Вот "резервная копия" моей (pfsense) конфигурации сервера.
Как видите, конфигурация минимально возможная.
<openvpn> <openvpn-server> <vpnid>2</vpnid> <mode>p2p_shared_key</mode> <protocol>TCP</protocol> <dev_mode>tap</dev_mode> <ipaddr /> <interface>wan</interface> <local_port>1194</local_port> <description><![CDATA[ test tap OpenVPN server]]> </description> <custom_options /> <shared_key>... my shared key, omitted ...</shared_key> <crypto>AES-128-CBC</crypto> <engine>none</engine> <tunnel_network /> <tunnel_networkv6 /> <remote_network /> <remote_networkv6 /> <gwredir /> <local_network /> <local_networkv6 /> <maxclients /> <compression>yes</compression> <passtos /> <client2client /> <dynamic_ip /> <pool_enable>yes</pool_enable> <topology_subnet /> <serverbridge_dhcp /> <serverbridge_interface /> <serverbridge_dhcp_start /> <serverbridge_dhcp_end /> <netbios_enable /> <netbios_ntype>0</netbios_ntype> <netbios_scope /> </openvpn-server> </openvpn>
Когда туннель открыт, это результат работы
ipconfig /all
Scheda Ethernet TAP-Interface: Suffisso DNS specifico per connessione: Descrizione . . . . . . . . . . . . . : TAP-Windows Adapter V9 Indirizzo fisico. . . . . . . . . . . : 00-FF-7B-FB-32-C0 DHCP abilitato. . . . . . . . . . . . : Sì Configurazione automatica abilitata : Sì Indirizzo IPv6 locale rispetto al collegamento . : fe80::3838:3c0c:c3c6:fcca%35(Preferenziale) Indirizzo IPv4. . . . . . . . . . . . : 172.16.1.40(Preferenziale) Subnet mask . . . . . . . . . . . . . : 255.255.255.0 Lease ottenuto. . . . . . . . . . . . : giovedì 16 aprile 2015 09:57:32 Scadenza lease . . . . . . . . . . . : venerdì 15 aprile 2016 09:57:32 Gateway predefinito . . . . . . . . . : fe80::20c:29ff:fe92:2272%35 Server DHCP . . . . . . . . . . . . . : 172.16.1.0 IAID DHCPv6 . . . . . . . . . . . : 1107361659 DUID Client DHCPv6. . . . . . . . : 00-01-00-01-14-AE-89-EA-F0-4D-A2-63-11-97 Server DNS . . . . . . . . . . . . . : fec0:0:0:ffff::1%1 fec0:0:0:ffff::2%1 fec0:0:0:ffff::3%1 NetBIOS su TCP/IP . . . . . . . . . . : Attivato
Не слишком разбираться в Windows. OpenVPN, FWIW, вот моя ставка на то, что может быть здесь виноват:
Глядя на выходные данные вашей команды маршрута Windows, кажется, что вам не хватает записи шлюза для сети OpenVPN. Верно, у вас есть адрес в сети VPN (адрес 172.16.1.40), но для этой сети не определен gw. На моем ящике у меня есть доступ к нескольким сетям, каждая со своим GW, вот так:
0.0.0.0 0.0.0.0 172.20.68.2 172.20.69.3 20
10.0.3.0 255.255.255.0 172.20.68.5 172.20.69.3 21
Чтобы исправить это, откройте конфигурацию сервера openvpn и добавьте такую строку:
push "route 172.16.1.0 255.255.255.0"
к нему. Это гарантирует, что правильный маршрут будет передан клиенту всякий раз, когда соединение с сервером установлено.
Вы также можете пропустить обратный маршрут - иногда (не всегда по причинам, которые я не совсем понимаю) вам нужно добавить iroute
в запись конфигурации, которая у вас есть для данного клиента на сервере ccd
каталог (/etc/openvpn/ccd/<vpn>/<client-id>
). Это вызывает обратный маршрут, когда клиент подключается к серверу. содержимое одного из моих ccd
файлы выглядят так:
iroute 192.168.87.0 255.255.255.0
Это гарантирует, что сервер OpenVPN может правильно направлять данные обратно клиенту.
Я думаю, вы также можете просто добавить iroute
s в конфигурацию основного сервера, но тогда они будут определены, даже если клиент не подключен. Это выглядело бы так:
route 192.168.87.0 255.255.255.0 192.168.11.1
РЕДАКТИРОВАТЬ: Также обратите внимание, что для запуска клиентов OpenVPN в Windows требуются права администратора. В противном случае OpenVPN не сможет добавлять маршруты и тому подобное (как указано в комментариях к вашему вопросу). Лучше всего запустить его как службу, чтобы соединения устанавливались автоматически при загрузке. По крайней мере, это хорошо работает в моих сценариях.
Я думаю, это может заставить вас снова начать. OpenVPN действительно хорош, и я уже некоторое время успешно использую его как для бизнеса, так и для игр :-)
Найдите файлы OpenVPNgui.exe, openvpn.exe и openvpnserver.exe в папке bin вашей открытой установки vpn. Щелкните исполняемые файлы правой кнопкой мыши, выберите свойства, а затем вкладку совместимости. Установите флажок «Запустить эту программу от имени администратора» и закройте панель свойств. Полностью закройте OpenVPN (с помощью диспетчера задач убедитесь, что ни один из исполняемых файлов еще не запущен). Снова запустите OpenVPN и попробуйте еще раз.
У меня такое чувство, что вы неправильно отправляете маршруты с сервера. Я заметил, что ваш шлюз для VPN - это IPv6-адрес.
Попробуйте использовать push
параметр в server.conf для продвижения ваших маршрутов. Вы также можете добавить server
директиву, чтобы вы могли зарезервировать клиентскую подсеть.
Если вы используете Linux, вам понадобится net.ipv4.ip_forward = 1
на VPN-сервере, настроенном с помощью sysctl
также.
Лучший,
-Юлианец