10

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

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

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

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

Спасибо

7 ответов7

18

Я не верю, что есть способ предотвратить это, кроме статического назначения DNS-серверов в VPN-соединении.

Чтобы изменить порядок, в котором запрашиваются DNS-серверы, предполагается, что можно изменить порядок привязки интерфейса согласно https://superuser.com/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.

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 (без включения контроля учетных записей)?

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

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

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

0

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .