Я хочу обойти openvpn для определенного домена. Я пытался:
allow-pull-fqdn
route specificdomain.com 255.255.255.255 net_gateway
Но это просто выполняет DNS-поиск домена и добавляет любой IP-адрес в таблицу маршрутизации, чтобы использовать маршрут по умолчанию.
Проблема в том, что конкретный домен имеет несколько IP-адресов, и они, похоже, не находятся в простой сети, для которой я мог бы просто использовать сетевую маску.
Я также пытался:
push "route specificdomain.com 255.255.255.255 net_gateway"
Хотя я признаюсь, читая документы, я до сих пор не понял, в чем разница - хотя здесь она не отображается в моей таблице маршрутизации и не работает (даже если я использую домен с одним IP-адресом)
Есть ли способ заставить openvpn не маршрутизировать домены с несколькими IP-адресами, подобными этому, или уже слишком поздно в маршрутизации для openvpn узнать, какой домен мы изначально запрашивали, и я лучше всего попытаться придумать набор IP-адресов, которые в настоящее время соответствуют домену?
К сожалению, то, чего вы хотите, невозможно. Маршрутизация работает на основе IP-адресов, а доменное имя просто отсутствует в IP-пакетах, поэтому его нельзя использовать для принятия решений о маршрутизации.
При добавлении маршрутов вы можете добавить маршрут к определенному доменному имени, но это имя преобразуется DNS в IP-адрес перед добавлением в таблицу маршрутизации. Также обратите внимание, что ваша таблица маршрутизации не будет обновляться, если IP-адрес в записи DNS изменится.
В основном ваши варианты:
1: при запуске VPN добавьте маршрут ко всем конкретным именам хостов, к которым вы собираетесь получить доступ без VPN. Имена будут немедленно разрешены, но это может не иметь значения, если только IP-адреса не изменятся очень быстро.
2: выяснить все сетевые блоки, которые использует целевой домен, и настроить для них маршрутизацию без VPN. Однако в некоторых случаях невозможно определить сетевые блоки.
3: измените логику маршрутизации: отбросьте правило «маршрутизировать все через vpn», маршрутизируйте только определенные сетевые блоки через vpn (вы, скорее всего, знаете их, чем сетевые блоки определенного домена, который вы не контролируете), и пусть маршрут по умолчанию возьмите весь трафик, не связанный с vpn, в Интернет без vpn.
Как объясняли другие, теоретически это невозможно, потому что маршрутизация не знает DNS-имя назначения, которое использовалось для получения IP-адреса назначения. Однако вы можете делать то, что @Bass описал как «рубленый» DNS. Во-первых, настройте свой собственный DNS (я использую Raspberry Pi в качестве VPN-маршрутизатора, поэтому у меня есть все преимущества Linux, советую вам не делать этого на своей рабочей станции с Windows :). Используйте dnsmasq с отключенным DHCP и сначала настройте его как DNS-сервер с чистым кешированием, используя dnsmasq.conf следующим образом:
log-queries # Logging
log-async # Async logging
domain-needed # Don't forward short names
bogus-priv # Never forward addresses in the non-routed address spaces.
server=8.8.8.8 # Use Google DNS 1 upstream
server=8.8.4.4 # Use Google DNS 2 upstream
После того, как вам удастся принудительно настроить собственный DNS на машины (настольные компьютеры и другие вещи, например chromecast, tv и т. Д.) И убедиться, что он работает, вы можете начать взламывать. Запустите программу / приложение или зайдите на сайт, который вы хотите перенаправить, а затем на машине маршрутизации, которую вы делаете:
sudo killall -SIGUSR1 dnsmasq
tail /var/log/syslog
Теперь у вас есть хороший дамп недавно использованных IP-адресов вместе с их именами (любое достойное приложение будет пытаться получить доступ к DNS, я считаю, что никто больше не будет жестко кодировать IP-адреса).
Теперь вы перезапускаете dnsmasq или машину маршрутизации (чтобы убедиться, что очистили кеш) и принудительно получаете доступ к DNS Google, который обходит OpenVPN, например сделав что-то вроде этого:
sudo route add -net 8.8.8.8 netmask 255.255.255.255 gw 192.168.1.1 dev eth0
sudo route add -net 8.8.4.4 netmask 255.255.255.255 gw 192.168.1.1 dev eth0
Для ясности: eth0 - это сетевой интерфейс, который идет к моему интернет-провайдеру, а 192.168.1.1 - это адрес шлюза, который обходит VPN. Теперь вы повторяете упражнение с запуском приложения / веб-сайта / устройства и сброса имен и IP-адресов. Теперь они должны быть другими.
Снова перезапустите маршрутизатор (чтобы избавиться от указанных выше временных маршрутов) и выполните следующие две вещи для каждого IP-адреса:
Добавьте адресную строку в dnsmasq.conf для каждого адреса, чтобы принудительно разрешить IP-адрес вне vpn-адреса, полученный на втором этапе, как показано ниже:
адрес = / www.avoidvpn.com / off.vpn.ip.oblished
Добавьте маршрут для конкретного адреса в конфигурацию маршрутизации (необходимо выполнять после каждой перезагрузки или сохранять как постоянный маршрут)
sudo route add -net off.vpn.ip. получена сетевая маска 255.255.255.255 gw 192.168.1.1 dev eth0
Опять же, предполагая, что 192.168.1.1 - это шлюз без vpn.
Предостережения
Надеюсь, это поможет, но да, это ужасное решение. Удачи и удачи!
allow-pull-fqdn
push "dhcp-option DNS 10.0.0.1"
route thehost.com 255.255.255.255 vpn_gateway