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