Я не верю, что есть способ предотвратить это, кроме статического назначения DNS-серверов в VPN-соединении.
Чтобы изменить порядок, в котором запрашиваются DNS-серверы, предполагается, что можно изменить порядок привязки интерфейса согласно /superuser//a/314379/120267 , но, похоже, это не влияет на VPN-соединения в мое личное тестирование на Windows 7; Я подтвердил, что мое VPN-соединение последовательно добавляется в начало HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Linkage\Bind
списка, независимо от настроек порядка привязки интерфейса.
Однако вы можете сбросить изменения DNS после установки VPN-соединения.
Сбор информации
Откройте командную строку ( Start
-> Run...
-> cmd
) и запустите netsh interface ipv4 show dnsservers
. Вы увидите вывод, похожий на следующий:
Configuration for interface "My VPN"
Statically Configured DNS Servers: 11.22.33.44
55.66.77.88
...
Configuration for interface "Local Network Connection"
DNS servers configured through DHCP: 192.168.0.1
192.168.0.2
...
Вам нужно имя интерфейса для VPN и, возможно, первый DNS-сервер вашего не-VPN-соединения . В этом примере это My VPN и 192.168.0.1 соответственно.
Настройка всего этого
Вариант 1: отключить VPN DNS
Предполагая, что вам вообще не нужны DNS-серверы вашего VPN, вы можете просто запустить следующее в командной строке:
netsh interface ipv4 delete dnsservers name="<Interface Name>" address=all validate=no
Eg: netsh interface ipv4 delete dnsservers name="My VPN" address=all validate=no
Если вы запустите netsh interface ipv4 show dnsservers
снова, вы увидите, что DNS-серверы, связанные с VPN, были удалены; DNS-серверы вашего не-VPN-соединения будут использоваться для разрешения имен хостов.
Вариант 2: Дополнение VPN DNS
Если вам нужны DNS-серверы вашего VPN для разрешения имен хостов в интрасети, вы можете запустить в командной строке следующее:
netsh interface ipv4 add dnsservers name="<Interface Name>" address=<Non-VPN DNS server> index=1 validate=no
Eg: netsh interface ipv4 add dnsservers name="My VPN" address=192.168.0.1 index=1 validate=no
В этом случае netsh interface ipv4 show dnsservers
будет показано, что первый DNS-сервер вашего не-VPN-подключения был добавлен в верхнюю часть списка DNS-серверов вашего VPN. Сначала он будет использоваться для разрешения имен хостов, а в случае неудачи вернется к использованию обычных DNS-серверов вашей VPN.
У меня была аналогичная проблема; подключение к VPN-серверу переопределит DNS моей рабочей станции (удаленного VPN-клиента), так что DNS локальной сети будет скрыт. Я описал проблему более подробно на стороне Stackoverflow, прежде чем мне сказали , что я должен был разместить ее здесь.
Прочитав эту ветку, очевидно, что переопределение невозможно предотвратить с помощью конфигурации клиента OpenVPN. Мое решение состояло в том, чтобы добавить командный файл в каталог конфигурации OpenVPN, который выполняется, когда соединение OpenVPN сформировано. Если файл OVPN называется company.ovpn, файл, который запускается при подключении, должен называться company_up.bat.
Я дополнил этот файл с версии, которую я разместил на свой вопрос в StackOverflow ранее сегодня вечером. Теперь это выглядит так:
1: взломать, чтобы подождать пару секунд, прежде чем продолжить. Последняя версия (2.3) клиента OpenVPN будет игнорировать DNS и изменения маршрута, если выполняется без задержки.
2. Установите DNS VPN-подключения, чтобы он указывал на локальный хост. У меня на локальном хосте работает распознаватель (я использую SimpleDNS Plus ), который перенаправляет запросы в домен компании на DNS-сервер компании через VPN, а все остальное - на DNS-сервер локальной сети. Обратите внимание, что я не мог использовать распознаватель локальной сети для пересылки запросов для домена компании на DNS компании через VPN, поскольку конечная точка VPN находится на локальном хосте. Имя соединения («Подключение по локальной сети 4») было определено в командной строке через «ipconfig / all».
3: VPN-сервер компании настроен на маршрутизацию всего исходящего трафика через VPN, одновременно ограничивая исходящие (к Интернету) SSH-соединения. Это противоречило моему рабочему процессу, и я сначала удаляю маршрут «0.0.0.0 netmask 0.0.0.0» ...
4: .. а затем я повторно добавляю маршрут 0.0.0.0/0, чтобы указать на локальный шлюз локальной сети, и устанавливаю его метрику (вес) равной 1000 в качестве универсального для всего трафика, который не маршрутизируется иначе.
5: Без «выхода 0» OpenVPN выдает предупреждение об ошибке сценария не удалось (со статусом выхода 1).
Надеюсь, это будет полезно для кого-то ... это работает достаточно хорошо для меня (нет необходимости вручную настраивать маршрут или DNS каждый раз, когда я открываю соединение).
источник
По крайней мере, нет простого способа сделать это.
Вы можете добавить записи в файл hosts (
C:\Windows\System32\drivers\etc\hosts
). Этот файл содержит сопоставления имен хостов с IP-адресами и является более предпочтительным, чем запросы DNS.источник
Можете ли вы проверить состояние флажка «Использовать шлюз по умолчанию в удаленной сети». Это можно найти, открыв свойства вашего VPN-подключения и перейдя на вкладку «Сеть» и выберите «TCP / IP v4» или «TCP / IP V6», затем выберите «Свойства», а затем «Дополнительно». Это может быть включено, что может означать, что весь интернет-трафик направляется через VPN-соединение. Это не всегда возможно отключить, и все равно делать то, что вы хотите с VPN, но это может быть отключено, это может ускорить доступ в Интернет.
Если это не поможет, там есть вкладка DNS, и вы можете попробовать добавить туда свои DNS-серверы. Я пробовал это, но я ожидаю, что эти настройки переопределят автоматические настройки.
источник
К сожалению, netsh не может удалить DNS-серверы, назначенные dhcp. Но это можно сделать, очистив параметр DhcpNameServer в
ключ реестра.
источник
Начиная с 2017 года это возможно, если оно основано на OpenVPN
Добавьте строку в файл конфигурации вашего клиента
и он будет игнорировать все заданные строки конфигурации, которые начинаются с цитируемого текста.
Три ключевые слова действия являются
accept
ignore
reject
. Я не обнаружил вариант использования для отказа.источник
Я просто удаляю эту опцию из конфигурации клиента VPN
setenv opt block-outside-dns
Это решило проблему
источник