Трафик 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
0
задан 19 September 2019 в 15:44
1 ответ

Причина, по которой подключение к вашему Интернету сервер (который размещен на том же компьютере, что и ваш сервер 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 для разрешения этих запросов.

2
ответ дан 4 December 2019 в 13:18

Теги

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