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

Трафик OpenVPN неправильно маршрутизируется за пределы туннеля при доступе к IP-адресу сервера

Моя установка состоит из клиента и сервера, где клиент подключен к серверу с помощью OpenVPN. Он настроен для маршрутизации всего трафика через туннель. Это работает хорошо, ip - это ip сервера, а traceroute показывает, что трафик маршрутизируется через сеть серверов.

Однако есть одно исключение: при подключении к домену, указывающему на тот же сервер, трафик маршрутизируется за пределы туннеля VPN, то есть сервер показывает реальный IP-адрес клиентов, а traceroute показывает трафик, маршрутизируемый через Интернет-провайдера клиентов.

Я хочу направить весь трафик через туннель, даже трафик, который попадает на сервер, и необходимо использовать доменное имя вместо локального IP-адреса сервера. Любые идеи?

Сервер работает под управлением Windows 10, и проблема появляется на клиентах при использовании OpenVPN в Windows 10, Linux и OpenVPN Connect в iOS. Проблема в том НЕ присутствует при использовании OpenVPN Connect на Android. Было бы интересно понять, почему он работает и на Android.

Вот конфигурация моего сервера:

port 1194
proto udp4
dev tun

ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\server.crt"
key "C:\\Program Files\\OpenVPN\\config\\server.key"
dh "C:\\Program Files\\OpenVPN\\config\\dh2048.pem"

server 10.8.0.0 255.255.255.0
ifconfig-pool-persist "C:\\Program Files\\OpenVPN\\log\\ipp.txt" 5
client-config-dir "C:\\Program Files\\OpenVPN\\config\\ccd"

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "route 255.255.255.0"

duplicate-cn
keepalive 10 120
cipher AES-256-CBC
persist-key
persist-tun
explicit-exit-notify 1

И конфигурация клиента:

client
dev tun_c_ovpn
proto udp4
remote <address> 1194
resolv-retry infinite
keepalive 5 10
nobind
persist-key
persist-tun
cipher AES-256-CBC

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

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

Я не могу сказать, как именно это делает Android. Метод может быть маршрутизацией на основе политик и может быть реализован с помощью iptables / nftables для маркировки пакетов, специфичных для OpenVPN.

Маршрутизация на основе политик недоступна в ОС Windows (AFAIK)!

Альтернативное решение

Альтернативным решением является размещение вашего собственного DNS-сервера и пересылка запросов на серверы OpenDNS, за исключением некоторых зон, которые вы определяете сами.

Создайте зону на своем DNS-сервере и укажите в своем домене внутренний IP-адрес вашего tun устройство. Из вашей конфигурации кажется, что это 10.8.0.1

Измените параметр DNS push в вашем server.conf к push "dhcp-option DNS 10.8.0.1

Может потребоваться добавить некоторые правила iptable / nftable, чтобы разрешить эти запросы.