Запретить VPN изменение DNS в Windows 7/8 Preview для разработчиков


10

У меня есть клиент, который использует VPN-соединение, однако он автоматически настраивает мои настройки DNS на несуществующий DNS-сервер, то есть время каждого разрешения DNS истекает до тех пор, пока не будет опробована альтернатива, что действительно замедляет весь интернет-трафик.

Есть ли способ предотвратить переопределение приложением моих настроек DNS (без включения UAC)?

В качестве альтернативы, есть ли способ, которым я могу настроить какую-то локальную маршрутизацию, которая говорит: «Когда приходит DNS-запрос на IP-адрес A, фактически использовать IP-адрес B»?

Я использую предварительный просмотр Windows 8 Developer (но я подозреваю, что он должен работать так же, как Windows 7).

благодаря

Ответы:


18

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


Вы герой, сэр, спасибо за исчерпывающий ответ, похоже, работает отлично! Я пытался возиться с netsh, но не смог зайти так далеко ...
Wiebe Tijsma

1

У меня была аналогичная проблема; подключение к VPN-серверу переопределит DNS моей рабочей станции (удаленного VPN-клиента), так что DNS локальной сети будет скрыт. Я описал проблему более подробно на стороне Stackoverflow, прежде чем мне сказали , что я должен был разместить ее здесь.

Прочитав эту ветку, очевидно, что переопределение невозможно предотвратить с помощью конфигурации клиента OpenVPN. Мое решение состояло в том, чтобы добавить командный файл в каталог конфигурации OpenVPN, который выполняется, когда соединение OpenVPN сформировано. Если файл OVPN называется company.ovpn, файл, который запускается при подключении, должен называться company_up.bat.

Я дополнил этот файл с версии, которую я разместил на свой вопрос в StackOverflow ранее сегодня вечером. Теперь это выглядит так:

1: ping 127.0.0.1 -n 2 > nul
2: netsh interface ip set dns "Local Area Connection 4" static 127.0.0.1
3: route delete 0.0.0.0
4: route add -p 0.0.0.0/0 172.20.20.1 metric 1000
5: exit 0

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 каждый раз, когда я открываю соединение).


0

Есть ли способ предотвратить переопределение приложением моих настроек DNS (без включения UAC)?

По крайней мере, нет простого способа сделать это.

В качестве альтернативы, есть ли способ, которым я могу настроить какую-то локальную маршрутизацию, которая говорит: «Когда приходит DNS-запрос на IP-адрес A, фактически использовать IP-адрес B»?

Вы можете добавить записи в файл hosts ( C:\Windows\System32\drivers\etc\hosts). Этот файл содержит сопоставления имен хостов с IP-адресами и является более предпочтительным, чем запросы DNS.


Ну, я знаю о файле hosts, но все это основано на IP-адресе, так что, к сожалению, это не работает ...
Wiebe Tijsma

О, хорошо, теперь я понимаю ваш вопрос. И нет, вы не можете перенаправить запросы с одного IP на другой.
Майкл

0

Можете ли вы проверить состояние флажка «Использовать шлюз по умолчанию в удаленной сети». Это можно найти, открыв свойства вашего VPN-подключения и перейдя на вкладку «Сеть» и выберите «TCP / IP v4» или «TCP / IP V6», затем выберите «Свойства», а затем «Дополнительно». Это может быть включено, что может означать, что весь интернет-трафик направляется через VPN-соединение. Это не всегда возможно отключить, и все равно делать то, что вы хотите с VPN, но это может быть отключено, это может ускорить доступ в Интернет.

Если это не поможет, там есть вкладка DNS, и вы можете попробовать добавить туда свои DNS-серверы. Я пробовал это, но я ожидаю, что эти настройки переопределят автоматические настройки.


Он не проверен, поэтому он не маршрутизирует весь интернет-трафик через VPN (когда имя окончательно определено, соединение достаточно быстрое). Я попытался изменить настройки DNS там, но, к сожалению, все автоматически вернулось к недопустимым настройкам DNS при перезапуске соединения :(
Wiebe Tijsma

Если вы не можете остановить изменение DNS, возможно ли заставить его работать быстрее, если использовать брандмауэр для блокировки запросов DNS на этот адрес?
sgmoore

0

К сожалению, netsh не может удалить DNS-серверы, назначенные dhcp. Но это можно сделать, очистив параметр DhcpNameServer в

HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces\{id}

ключ реестра.


0

Начиная с 2017 года это возможно, если оно основано на OpenVPN

Добавьте строку в файл конфигурации вашего клиента

pull-фильтр игнорирует "dhcp-option DNS"

и он будет игнорировать все заданные строки конфигурации, которые начинаются с цитируемого текста.

Три ключевые слова действия являются accept ignore reject. Я не обнаружил вариант использования для отказа.


0

Я просто удаляю эту опцию из конфигурации клиента VPN

setenv opt block-outside-dns

Это решило проблему

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.