Назад | Перейти на главную страницу

Клиент OpenVPN на Windows 7, пакеты не маршрутизируются

У меня есть клиент 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.

И тут кажется, что система маршрутизирует пакеты прямо к воротам поскольку он не видел напрямую подключенного сетевого адаптера. Почему это происходит?

Изменить 1 - подробности о моей конфигурации клиента OpenVPN

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

Изменить 2, подробности о конфигурации моего сервера

Вот "резервная копия" моей (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>

Редактировать 3, вывод ipconfig / all

Когда туннель открыт, это результат работы

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 может правильно направлять данные обратно клиенту.

  • Я думаю, вы также можете просто добавить iroutes в конфигурацию основного сервера, но тогда они будут определены, даже если клиент не подключен. Это выглядело бы так:

    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 также.

Лучший,

-Юлианец