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