В Windows 10 при активном VPN подключении в режиме Force Tunneling (включена опция “Use default gateway on remote network”/ “Использовать основной шлюз в удаленной сети”) для разрешения имен через службу DNS используются DNS сервера и суффиксы, настроенные для VPN подключения. Соответственно, вы теряете возможность резолвить DNS имена в своей локальной сети и пользоваться Интернетом через внутреннюю LAN.
При этом с Windows 10 можно выполнить ping до ресурсов в вашей LAN сети (пропингуйте ваш шлюз, соседний компьютер или принтер), но по имени они не доступны, т.к. Windows пытается разрешить имена в локальной сети через DNS сервера, указанные для VPN соединения.
В Google я нашел рекомендации по отключению IPv6 на локальном (LAN) подключении и это работает (если вы хотите использовать Force-Tunneling).
Если для VPN подключения используется режим Split Tunneling (снята галка “Use default gateway on remote network”), вы можете пользоваться интернетом через свою локальную сеть, но не можете резолвить DNS адреса в удаленной VPN сети (в этом случае не помогает отключение IPv6).
Нужно понимать, что Windows отправляет DNS запрос с сетевого интерфейса, у которого высший приоритет (меньшее значение метрики интерфейса). Допустим, ваше VPN подключение работает в режиме Split Tunneling (вы хотите пользоваться интернетом через свою LAN и корпоративными ресурсами через VPN подключение).
С помощью PowerShell проверьте значение метрик всех сетевых интерфейсов:
Get-NetIPInterface | Sort-Object Interfacemetric
На картинке выше видно, что у локального Ethernet подключения указана более низкая метрика (25), чем у VPN интерфейса (в этом примере 100). Соответственно, DNS трафик идет через интерфейс с более низким значением метрики. Это значит, что ваши DNS запросы отправляются на ваши локальные DNS сервера, а не на DNS сервера VPN подключения. Т.е. в такой конфигурации вы не можете резолвить адреса во внешней VPN сети.
Кроме того, нужно обязательно упомянуть новую фичу DNS клиента в Windows 8.1 и Windows 10. В этих версиях ОС для максимально быстрого получения ответов на DNS запросы был добавлен функционал DNS релолвера под названием Smart Multi-Homed Name Resolution (SMHNR). При использовании SMHNR система по умолчанию отправляет DNS запросы на все известные системе DNS сервера параллельно и использует тот ответ, который пришел быстрее. Это не безопасно, т.к. потенциально внешние DNS сервера (которые указаны в вашем VPN подключении) могут видеть ваши DNS запросы (утечка ваших DNS запросов вовне). Вы можете отключить SMHNR в Windows 10 с помощью групповой политики:
Computer Configuration -> Administrative Templates -> Network -> DNS Client-> Turn off smart multi-homed name resolution = Enabled.
Или командами (для Windows 8.1):
Set-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\Windows NT\DNSClient" -Name DisableSmartNameResolution -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters" -Name DisableParallelAandAAAA -Value 1 -Type DWord
В Windows 10 Creators Update (1709) и выше DNS запросы отправляются на все известные DNS сервера по порядку, а не параллельно. Вы можете увеличить приоритет конкретного DNS, если уменьшите его метрику.
Соответственно, изменение метрики позволит вам отправлять DNS запросы через тот сетевой интерфейс (LAN или VPN), разрешение имен через который для вас более приоритетно.
Итак, чем меньше значение метрики интерфейса, тем больше приоритет такого подключения. Windows выставляет метрику IPv4 сетевым интерфейсам автоматически в зависимости от их скорости и типа. Например, для LAN подключения с скоростью >200 Мбит значение метрики интерфейса 10, а для беспроводного Wi-FI подключения со скоростью 50-80 Мбит метрика 50 (см. таблицу https://support.microsoft.com/en-us/help/299540/an-explanation-of-the-automatic-metric-feature-for-ipv4-routes).
Вы можете изменить метрику интерфейса через графический интерфейс, PowerShell или команду netsh.
Например, вы хотите, чтобы DNS запросы отправлялись через VPN подключение. Вам нужно увеличить метрики ваших локальных LAN подключений, чтобы они стали больше 100 (в моем примере).
Откройте Панель управления -> Сеть и Интернет -> Сетевые подключения, откройте свойства вашего Ethernet подключения, выберите свойства протокола TCP/IPv4, перейдите на вкладку “Дополнительные параметры TCP/IP”. Снимите галку “Автоматическое назначение метрики” и измените метрику интерфейса на 120.
Тоже самое можно сделать командами PowerShell управления сетью (используйте индекс вашего LAN интерфейса, полученный с помощью командлета
Get-NetIPInterface
):
Set-NetIPInterface -InterfaceIndex 11 -InterfaceMetric 120
Или netsh (нужно указать имя вашего LAN подключения)
netsh int ip set interface interface="Ethernet 3" metric=120
Аналогично вы можете уменьшить значение метрики в свойствах VPN подключения.
Также вы можете изменить настройки вашего VPN подключения, изменив режим на SplitTunneling и указать DNS суффикс для подключения c помощью PowerShell:
Get-VpnConnection
Set-VpnConnection -Name "VPN" -SplitTunneling $True
Set-VpnConnection -Name "VPN" -DnsSuffix yourdomain.com
DNS-серверы и суффиксы, настроенные для VPN-подключений, используются в Windows для разрешения имён с помощью DNS в режиме Force Tunneling (принудительного туннелирования) (включён параметр Use default gateway on remote network («Использовать шлюз по умолчанию в удаленной сети»)), если ваше VPN-подключение активно. В этом случае вы не можете преобразовать DNS-имена в своей локальной сети или получить доступ в Интернет через внутреннюю локальную сеть. Что делать, если при активном VPN не работает DNS?
Что такое DDNS?
Динамический IP-адрес время от времени меняется. По этой причине с динамическими IP-адресами сложно пользоваться службой MediaStreamer для доступа к онлайн-сервисам. DDNS помогает решить эту проблему.
DDNS (Динамическая система имен доменов) предоставляет фиксированную точку ссылки, которая называется «статическое имя хоста». Эта точка позволяет ExpressVPN предоставить вашему устройству доступ к MediaStreamer, даже если ваш IP-адрес постоянно меняется вашим интернет-провайдером.
В чем проблема с этой ошибкой при попытке установить VPN-соединение в Windows? Это появляется, когда есть проблемы с DNS . Например, мы неправильно настроили общедоступные DNS-серверы или те, которые мы используем, по какой-то причине работают некорректно.
Что за VPN делает это для шифрования интернет-соединения и позволяет нам анонимно просматривать сеть, но для этого необходимо, чтобы оно правильно подключалось к DNS. Проблема обычно присутствует в последнем, на DNS-серверах, которые мы используем, поскольку VPN может быть правильно установлен, но выдает этот код ошибки.
Однако может случиться так, что используемый нами VPN не соответствует требованиям требования публичного DNS мы используем на компьютере. Это также вызовет ошибку разрешения доменного имени.
Какой бы ни была причина, мы можем легко исправить это, изменив DNS-серверы. Обычно это уже сработает, если мы не вернемся к использованию других, которые не работают для этой VPN или также генерируют ошибки.
Шаги по исправлению этой ошибки
После объяснения основных причин появления ошибки разрешения доменного имени при использовании VPN, мы собираемся упомянуть, что мы можем сделать, чтобы решить эту проблему и заставить ее работать нормально. Главное будет изменить DNS-серверы, которые мы используем, но мы также увидим, что это может быть ошибка в установленной нами VPN.
Изменить DNS-серверы
Первое, что мы сделаем, это изменить DNS-серверы что мы используем в Windows. Они служат переводчиками, поскольку отвечают за получение доменного имени, которое мы помещаем, например, в этой статье, на соответствующий IP-адрес. Это избавляет нас от необходимости запоминать бессмысленные числа и просто знать их имена.
Чтобы изменить DNS-серверы в Windows, мы должны перейти в Пуск, мы заходим в Настройки, мы идем в Cеть и Интернет и там, чтобы изменить параметры адаптера. Теперь откроется новое окно, в котором появятся все сетевые карты, которые мы настроили. Например, может появиться карта Wi-Fi и карта Ethernet. Мы должны выбрать тот, который нас интересует, который мы будем использовать для навигации.
Вы должны щелкнуть второй кнопкой мыши, а затем щелкнуть «Свойства». Как только это будет сделано, откроется новое окно, и мы должны найти Интернет-протокол версии 4 (TCP / IPv4) и снова щелкнуть «Свойства».
Появится новое окно, как мы видим на изображении выше. Если мы вручную настроили и IP-адрес, и DNS-серверы, они появятся там. Если это происходит автоматически, он просто будет казаться пустым. Нас интересует изменение DNS-серверов, которые указаны ниже.
Мы должны дать Использовать следующие адреса DNS-серверов и заполните его. Возможно, мы удалили их у оператора, и при использовании других проблема разрешения доменного имени возникает при использовании VPN. Но может даже случиться так, что проблемы вызывают именно операторы.
Какие DNS-серверы мы можем использовать? Их много, и некоторые из самых популярных и наиболее эффективных — это продукты от Google и Cloudflare. Нам нужно было бы поставить следующее:
- Google DNS : 8.8.8.8 и 8.8.4.4
- Cloudflare DNS : 1.1.1.1 и 1.0.0.1
С этого момента наше оборудование будет подключаться к Интернету через DNS-серверы, которые мы изменили. Это то, что мы можем изменить в любое время, и это может даже помочь улучшить как скорость, так и безопасность.
Убедитесь, что VPN установлен правильно
Правильно ли мы установили VPN? Нам удалось кое-что изменить конфигурация и вот почему возникает эта проблема? Мы должны это проверить. VPN — это приложение, которое необходимо правильно установить и, конечно же, чтобы конфигурация была правильной и не было проблем.
Если мы установили программу недавно или обновили ее, нам, возможно, придется изменить какой-либо параметр конфигурации, чтобы она была включена правильно. Придется просмотреть его и посмотреть, не что-то не так, поэтому оно не работает должным образом.
Настройка разрешения имен DNS
При подключении удаленных VPN-клиентов они используют те же DNS-серверы, что используются внутренними клиентами, что позволяет им разрешать имена так же, как и остальные внутренние рабочие станции.
Поэтому необходимо убедиться, что имя компьютера, используемое внешними клиентами для подключения к VPN-серверу, совпадает с альтернативным именем субъекта, определенным в сертификатах, выданных VPN-серверу.
Чтобы удаленные клиенты могли подключаться к VPN-серверу, можно создать запись DNS A (узел) в внешней зоне DNS. Запись A должна использовать альтернативное имя субъекта сертификата для VPN-сервера.
Добавление записи ресурса узла (A или AAAA) в зону
- На DNS-сервере в диспетчер сервера выберите средства, а затем — DNS. Откроется диспетчер DNS.
- В дереве консоли диспетчера DNS выберите сервер, которым требуется управлять.
- В области сведений в поле имядважды щелкните зоны прямого просмотра , чтобы развернуть представление.
- В области сведения о зонах прямого просмотра щелкните правой кнопкой мыши зону прямого просмотра, к которой нужно добавить запись, а затем выберите новый узел (a или AAAA). Откроется диалоговое окно новый узел .
- В поле имянового узлавведите альтернативное имя субъекта сертификата для VPN-сервера.
- В поле IP-адрес введите IP-адрес VPN-сервера. Вы можете ввести адрес в формате IP версии 4 (IPv4), чтобы добавить запись ресурса узла (A) или формат IP версии 6 (IPv6) для добавления записи ресурса узла (AAAA).
- Если вы создали зону обратного просмотра для диапазона IP-адресов, включая введенный IP-адрес, установите флажок создать связанную запись указателя (PTR) . При выборе этого параметра создается дополнительная запись ресурса указателя (PTR) в зоне обратных передач для этого узла на основе информации, введенной в поле имя и IP-адрес.
- Выберите Добавить узел.
Получение имени хоста DDNS
Примечание. Услуг, которые предоставляются сервисом Dynu бесплатно, достаточно для большинства пользователей.
Перейдите на сайт https://www.dynu.com и нажмите Create Account (Создать учетную запись).
Заполните форму и нажмите Submit (Отправить). Вы получите письмо с подтверждением учетной записи от Dynu. Если письма нет в папке «Входящие», проверьте папку «Спам».
Перейдите по ссылке в письме подтверждения и войдите в свою учетную запись.
Затем выберите DDNS Services (Сервис DDNS).
Нажмите на + Add (Добавить), чтобы добавить сервис DDNS.
Если у вас нет имени хоста, придумайте его и введите в поле Option 1 (Вариант 1), затем нажмите + Add (Добавить). Воспользуйтесь этим вариантом, если вы впервые работаете с именами доменов.
Если у вас уже есть свое имя домена, введите его в поле Option 2 (Вариант 2), затем нажмите на + Add (Добавить).
Теперь вы увидите свое имя хоста сверху актуального публичного IP в пункте IPv4 Address (Адрес IPv4). Переведите ползунок в середине окна в положение OFF (ВЫКЛ), затем нажмите Save (Сохранить).
Ваше имя хоста DDNS настроено и готово к использованию.
Почему после подключения по VPN проблема с DNS?
Если до подключения интернет работает а после — нет, значит вы в конфигурации VPN при подключении отдаете неверные DNS сервера с VPN сервера на ваш клиент. Это первый вариант, который можно проверить.
Путь решения:
- Вписать гарантированно работающие DNS серверы в ваш resolv.conf
- использовать dnsmasq и резолвить DNSы только через него, игнорируя приходящие настройки (это, по сути, еще одна программная прослойка которую нужно корректно настроить, поэтому этот путь спорный)
Я бы добавил еще путь «проверить настройки на VPN сервере : что отдается клиенту при подключении в качестве настроек сети(dns серверы)
Второй вариант проблемы — используемые вами до подключения DNS серверы пытаются ходить в интернет через VPN, а VPN им не разрешает по какой-то причине. Здесь только проверка (tracepath до прописанного в конфиге DNS сервера) и после получения результата — корректная настройка того узла где трейс теряется. Или же добавление маршрутов к DNS серверам через ваше интернет подключение, чтобы не ходили DNSы через VPN.
Источники
- https://www.expressvpn.com/ru/support/vpn-setup/ddns-setup/
- https://itigic.com/ru/domain-name-resolution-error-on-the-vpn-how-to-fix-it/
- https://learn.microsoft.com/ru-ru/windows-server/remote/remote-access/vpn/always-on-vpn/deploy/vpn-deploy-dns-firewall
- https://qna.habr.com/q/429211
I spun up a fresh install of Windows 10 in a VM to test on after seeing this issue on every physical Win10 machine I have. I tested all of the answers in this thread and none of them worked. I discovered that the solution is to combine the answers posted here by «Keenans» and «ECC-Dan»:
http://answers.microsoft.com/en-us/windows/forum/windows_10-networking/win-10-dns-resolution-of-remote-network-via-vpn/513bdeea-0d18-462e-9ec3-a41129eec736?page=1
Control Panel > Network and Sharing Center > Change adapter settings > Right click your Ethernet or Wifi adapter > Properties > double click IPv4 > Advanced > Uncheck Automatic Metric > Enter 15 for interface metric > OK > OK.
On that same Properties page, double click IPv6 > Advanced > Uncheck Automatic Metric > Enter 15 for interface metric > OK > OK.
Only after changing both of those settings is the issue resolved. I tested changing either one back and it breaks again. After changing both I ran nslookup from command line and it returned the DNS server on the remote network where the VPN is connected to, where as otherwise it would return the local DNS server. I then used Wireshark capturing on the Ethernet interface, did some pings to random websites, and verified that there were no DNS packets captured. This proves that after making the changes, DNS queries are being sent ONLY over the VPN connection, and not simultaneously over all connections (which is known as the Win10 DNS leak). So this is also part of the solution for the Win10 DNS leak:
https://medium.com/@ValdikSS/beware-of-windows-10-dns-resolver-and-dns-leaks-5bc5bfb4e3f1#.7ppsn1nda
Note that fix the DNS leak, you first need to do the steps above. Then you need to set two registry values. The linked articles only list one, which by itself, does not fix the issue in newer builds of Win10. Set these registry values:
Key: HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\DNSClient
Value: DisableSmartNameResolution
Data: 1
Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
Value: DisableParallelAandAAAA
Data: 1
Only after doing all of that, will your DNS client behavior be back to the way it was in Win7. You have to wonder how this got through QA at Microsoft.
- Remove From My Forums
-
Вопрос
-
Проблема следущая: Есть RRAS сервер (W2k3), на котором стоит VPN, все это находится в локальной сети. В сети 1 DNS и 1 DHCP сервер. В RRAS раздача адресов идет с DHCP сервера. Удаленный клиент хочет подсоединиться посредством VPN к этой локальной сети. При помощи провайдера у которого есть DNS, свой. Либо из домовой сети, где тоже есть DNS. При установлении соединении по VPN, сервер нашей локальной сети выдает клиенту, DNS своей локальной сети. И как разрешить имена всех DNS?
Иными словами, IP адрес внутренней сетки пингуется, а по имени не идет.
Ответы
-
Все верно, подключение будет, и будет работать…но как быть с именами?
Видимо, это стоит оставить до лучших времен, когда Microsoft , что нибудь придумает…
Поскольку красивых решений никто не смог предложить, кроме как ручками передвигать адреса DNS серверов, или прописывать в файле hosts, локальные привязки имен к адресам….
Всем спасибо!
-
Помечено в качестве ответа
7 мая 2009 г. 9:48
-
Помечено в качестве ответа
Скорее всего имена ресолвятся через вашего провайдера.
Вам правильно подсказали загдянуть в /etc/resolv.conf
Можно ещё посмотреть, что вернёт в качестве сервераnslookup google.com
Чтобы проверить отвечают ли ваши сервера (мало ли у вас настроен dnsmasq куда-то наружу) попробуйте nslookup somehost.company.local x.x.x.x
где x.x.x.x адрес вашего фирменного dns
Команда должна вернуть правильный адрес.
Как вариант можно не push-ить адреса dns серверов через vpn, а поднять локально dnsmasq и настроить его чтобы он вашу зону company.local ресолвил с указанного вашего фирменного dns.
cat /etc/dnsmasq.d/intranet.company.local.conf
server=/company.local/x.x.x.x
cat /etc/dnsmasq.conf
interface=lo
no-dhcp-interface=*
bind-interfaces
clear-on-reload
local-ttl=3600
neg-ttl=3600
max-ttl=7200
conf-dir=/etc/dnsmasq.d
И в iptables можно перехватить все запросы на внешний tcp/udp 53 и завернуть их в локальный dnsmasq. Только на всякий случай оставить выход наружу только для nobody
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# dns requests from nobody are transparent
-A OUTPUT -p tcp -m tcp --dport 53 -m owner --uid-owner nobody -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -m owner --uid-owner nobody -j ACCEPT
# all other dns requests are routed to local resolver (dnsmasq)
-A OUTPUT -p tcp -m tcp --dport 53 -j DNAT --to-destination 127.0.0.1
-A OUTPUT -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.1
Третий способ — прописать необходимые адреса в /etc/hosts