OpenVPN на Windows – отсутствие доступа к Интернету после подключения

Вопрос или проблема

Я сталкиваюсь с проблемой с OpenVPN на Windows. У меня установлен OpenVPN на сервере Hetzner и он сконфигурирован так, что только трафик к моим серверам проходит через VPN, в то время как весь другой сетевой трафик должен идти через локальный IP адрес.

Эта настройка отлично работает на macOS. Однако, на Windows, несмотря на успешное подключение к OpenVPN, я не могу зайти на google.com или любые другие домены. Даже домены, связанные с разрешёнными IP, не работают.

У вас есть идеи, что может вызывать эту проблему?

server.conf

port 1194
proto udp
dev tun
sndbuf 0
rcvbuf 0

ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem
auth SHA512
tls-auth /etc/openvpn/ta.key 0

topology subnet

server 10.8.0.0 255.255.255.0
local 195.201.24.164  # IPv4 адрес сервера
ifconfig-pool-persist /etc/openvpn/ipp.txt
# push "redirect-gateway def1 bypass-dhcp" # Это откроет VPN для всех IP адресов - Не включайте это без разрешения Ивана
# push "redirect-gateway autolocal def1"

#server-ipv6 2a01:4f8:1c1e:a93d::/112  # IPv6 подсеть сервера
#tun-ipv6
#push tun-ipv6
#ifconfig-ipv6 2a01:4f8:1c1e:a93d::1 2a01:4f8:1c1e:a93d::2  # IPv6 адрес сервера
#push "route-ipv6 2a01:4f8:1c1e:a93d::/64"  # IPv6 маршрутизация
#push "route-ipv6 2000::/3"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

keepalive 10 120
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
client-to-client
status /etc/openvpn/openvpn-status.log
verb 3
crl-verify /etc/openvpn/crl.pem
plugin /usr/lib/x86_64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so login

verify-client-cert optional

username-as-common-name
# push "redirect-gateway ipv6"

push "route 195.201.24.164 255.255.255.255 net_gateway"
push "route 104.19.222.79 255.255.255.255"
push "route 162.55.27.27 255.255.255.255"
push "route 195.201.204.155 255.255.255.255"
push "route 167.235.96.42 255.255.255.255"

client.ovpn

client
dev tun
proto udp
sndbuf 0
rcvbuf 0
remote 195.201.24.164 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA512
auth-nocache
cipher AES-256-CBC
# setenv opt block-outside-dns
key-direction 1
verb 3
auth-user-pass

Логи Windows:


⏎[Mar 12, 2025, 12:45:22] ПРОТОКОЛЬНЫЕ ПАРАМЕТРЫ:
  cipher: AES-256-GCM
  digest: none
  key-derivation: OpenVPN PRF
  compress: NONE
  peer ID: 1
  control channel: tls-auth включено

⏎[Mar 12, 2025, 12:45:22] СОБЫТИЕ: ASSIGN_IP ⏎[Mar 12, 2025, 12:45:22] ЗАПИСАННЫЕ ПАРАМЕТРЫ:
Имя сессии: 195.201.24.164
Уровень: OSI_LAYER_3
Удалённый адрес: 195.201.24.164
Адреса туннеля:
  10.8.0.5/24 -> 10.8.0.1
Переназначение шлюза: IPv4=0 IPv6=0 флаги=[ IPv4 ]
Блокировать IPv4: нет
Блокировать IPv6: нет
Блокировать локальный DNS: нет
Добавить маршруты:
  104.19.222.79/32
  162.55.27.27/32
  195.201.204.155/32
  167.235.96.42/32
Исключить маршруты:
DNS Серверы:
  8.8.8.8
  8.8.4.4

⏎[Mar 12, 2025, 12:45:23] SetupClient: передача списка настройки туннеля в \\.\pipe\agent_ovpnconnect
{
    "allow_local_dns_resolvers" : false,
    "confirm_event" : "340e000000000000",
    "destroy_event" : "300e000000000000",
    "tun" : 
    {
        "adapter_domain_suffix" : "",
        "add_routes" : 
        [
            {
                "address" : "104.19.222.79",
                "gateway" : "",
                "ipv6" : false,
                "metric" : -1,
                "net30" : false,
                "prefix_length" : 32
            },
            {
                "address" : "162.55.27.27",
                "gateway" : "",
                "ipv6" : false,
                "metric" : -1,
                "net30" : false,
                "prefix_length" : 32
            },
            {
                "address" : "195.201.204.155",
                "gateway" : "",
                "ipv6" : false,
                "metric" : -1,
                "net30" : false,
                "prefix_length" : 32
            },
            {
                "address" : "167.235.96.42",
                "gateway" : "",
                "ipv6" : false,
                "metric" : -1,
                "net30" : false,
                "prefix_length" : 32
            }
        ],
        "block_ipv6" : false,
        "block_outside_dns" : false,
        "dns_options" : 
        {
            "servers" : {}
        },
        "dns_servers" : 
        [
            {
                "address" : "8.8.8.8",
                "ipv6" : false
            },
            {
                "address" : "8.8.4.4",
                "ipv6" : false
            }
        ],
        "layer" : 3,
        "mtu" : 0,
        "remote_address" : 
        {
            "address" : "195.201.24.164",
            "ipv6" : false
        },
        "reroute_gw" : 
        {
            "flags" : 256,
            "ipv4" : false,
            "ipv6" : false
        },
        "route_metric_default" : -1,
        "session_name" : "195.201.24.164",
        "tunnel_address_index_ipv4" : 0,
        "tunnel_address_index_ipv6" : -1,
        "tunnel_addresses" : 
        [
            {
                "address" : "10.8.0.5",
                "gateway" : "10.8.0.1",
                "ipv6" : false,
                "metric" : -1,
                "net30" : false,
                "prefix_length" : 24
            }
        ]
    },
    "tun_type" : 0
}
POST np://[\\.\pipe\agent_ovpnconnect]/tun-setup : 200 OK
TAP АДАПТЕРЫ:
guid='{005DA4B1-B0F6-4AF4-86B5-8E9BEE7A2AE0}' index=2 name="Povezava z lokalnim omrežjem"
Open TAP device "Povezava z lokalnim omrežjem" PATH="\\.\Global\{005DA4B1-B0F6-4AF4-86B5-8E9BEE7A2AE0}.tap" УСПЕШНО
TAP-Windows Driver Version 9.27
ActionDeleteAllRoutesOnInterface iface_index=2
netsh interface ip set interface 2 metric=9000
Ок.
netsh interface ip set address 2 static 10.8.0.5 255.255.255.0 gateway=10.8.0.1 store=active
IPHelper: добавление маршрута 104.19.222.79/32 2 10.8.0.1 metric=-1
IPHelper: добавление маршрута 162.55.27.27/32 2 10.8.0.1 metric=-1
IPHelper: добавление маршрута 195.201.204.155/32 2 10.8.0.1 metric=-1
IPHelper: добавление маршрута 167.235.96.42/32 2 10.8.0.1 metric=-1
netsh interface ip set dnsservers 2 static 8.8.8.8 register=primary validate=no
netsh interface ip add dnsservers 2 8.8.4.4 2 validate=no
NRPT::ActionCreate pid=[10052] domains=[] dns_servers=[8.8.8.8,8.8.4.4] dnssec=[0] id=[OpenVPNDNSRouting-10052]
DNS::ActionApply: успешно
ActionBase openvpn_app_path=C:\Program Files\OpenVPN Connect\OpenVPNConnect.exe tap_index=2 enable=1
разрешить IPv4 запросы от приложения OpenVPN
разрешить IPv6 запросы от приложения OpenVPN
блокировать IPv4 запросы от других приложений
блокировать IPv6 запросы от других приложений
разрешить IPv4 трафик от TAP
разрешить IPv6 трафик от TAP
блокировать IPv4 DNS запросы к обратной связи от других приложений
блокировать IPv6 DNS запросы к обратной связи от других приложений
ipconfig /flushdns
Конфигурация IP Windows
DNS кэш успешно очищен.
TAP: Очистка ARP успешно завершена
TAP handle: 080e000000000000

⏎[Mar 12, 2025, 12:45:23] Подключено через TUN_WIN

⏎[Mar 12, 2025, 12:45:23] СОБЫТИЕ: ПОДКЛЮЧЕНО [email protected]:1194 (195.201.24.164) через /UDP на TUN_WIN/10.8.0.5/ gw=[10.8.0.1/] mtu=(по умолчанию)

Заранее спасибо!

Ответ или решение

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

Теория

Когда OpenVPN настроен на подключение туннеля, нам важно, чтобы маршрутизация и резолвинг DNS работали корректно. Основной задачей в вашем случае является настройка OpenVPN таким образом, чтобы весь трафик к вашим серверам шёл через VPN, а весь остальной сетевой трафик — через локальный IP-адрес. Это достигается за счет установки правильных маршрутов и правил для DNS. Однако проблема, с которой вы сталкиваетесь, состоит в том, что на Windows после успешного подключения к OpenVPN у вас не работают ни резолвинг доменов, ни доступ к разрешённым IP-адресам.

Пример

В конфигурации сервера OpenVPN, представленным вами, обратите внимание на:

  1. Выборочные маршруты: Ваша конфигурация явно задаёт маршруты для трафика только к определённым IP-адресам через VPN.

    push "route 195.201.24.164 255.255.255.255 net_gateway"
    push "route 104.19.222.79 255.255.255.255"
    push "route 162.55.27.27 255.255.255.255"
    push "route 195.201.204.155 255.255.255.255"
    push "route 167.235.96.42 255.255.255.255"
  2. DNS-настройки: DNS-запросы должны направляться на 8.8.8.8 и 8.8.4.4 как указано в настройках:

    push "dhcp-option DNS 8.8.8.8"
    push "dhcp-option DNS 8.8.4.4"
  3. Отсутствие перенаправления шлюза по умолчанию: Вы избегаете использования push "redirect-gateway def1 bypass-dhcp", что правильно для вашей задачи по сохранению локального ухода трафика.

Недавний логи показывают, что маршруты действительно добавляются, но почему-то не работают должным образом в Windows.

Применение

1. Проверка и исправление DNS

Убедитесь, что DNS на системе Windows настроены корректно:

  • Проверьте, действительно ли DNS-настройки для интерфейса OpenVPN настроены на 8.8.8.8 и 8.8.4.4. Это можно сделать командой ipconfig /all и найти соответствующий адаптер TAP-Windows.

  • Попробуйте временно включить block-outside-dns. Для этого в client.ovpn раскомментируйте строку # setenv opt block-outside-dns. Эта опция предотвращает утечку DNS вне туннеля и приводит к тому, что все DNS-запросы будут проходить через указанные в конфигурации сервера.

2. Маршрутизация

Убедитесь, что метрики и приоритеты маршрутов настроены так, чтобы обеспечивать правильное распределение трафика:

  • В логах видно, что сетевые команды, такие как netsh, правильно добавляют маршруты и задают метрики, но их приоритет может быть несовместим с существующими маршрутами Windows. Проверьте и настройте приоритет маршрутов так, чтобы трафик к определённым IP действительно шел через VPN.

  • Убедитесь, что добавленные маршруты действительно соответствуют вашим ожиданиям: выполните команду route print и проверьте, как маршруты упорядочены. Возможно, потребуется задать другие метрики или перестроить предпочтения маршрутов.

3. Разрешение дополнительных проблем ОС Windows

  • Убедитесь, что ваше антивирусное программное обеспечение или брандмауэр (например, встроенный Windows Defender или другие программы) не блокирует подключения OpenVPN.
  • Убедитесь, что адаптер TAP-Windows корректно работает без ошибок (проверьте наличие предупреждений или ошибок в диспетчере устройств).

Заключение

Проблема с доступом в интернет через OpenVPN на Windows, в отличие от macOS, часто вызывается особенностями работы сетевых стеков и маршрутизации. Используйте описанные шаги для диагностики и устранения проблемы. Если данные советы не позволят разрешить проблему, потребуется дальнейший анализ логов с более детальными маршрутами и соединениями. Модернизация драйверов и программы OpenVPN также может решить проблему, если она связана с возможными ошибками старой версии ПО.

Оцените материал
Добавить комментарий

Капча загружается...