Rozpoznawanie nazw DNS nie działa z aktywnym połączeniem VPN w systemie Windows 10

W systemie Windows 10 z aktywnym połączeniem VPN w trybie Wymuszaj tunelowanie (opcja „Użyj domyślnej bramy w sieci zdalnej” jest włączona), serwery DNS i sufiksy skonfigurowane do połączenia VPN są używane do rozpoznawania nazw za pośrednictwem usługi DNS. W związku z tym tracisz możliwość rozpoznawania nazw DNS w sieci lokalnej i korzystania z Internetu za pośrednictwem wewnętrznej sieci LAN.

Jednocześnie w systemie Windows 10 można pingować do zasobów w sieci LAN (ping do bramy, sąsiedniego komputera lub drukarki), ale z nazwy nie są one dostępne, ponieważ System Windows próbuje rozpoznać nazwy w sieci lokalnej za pośrednictwem serwera DNS określonego dla połączenia VPN.

W Google znalazłem zalecenia dotyczące wyłączenia IPv6 na lokalnym połączeniu (LAN) i to działa (jeśli chcesz użyć Force-Tunneling).

Jeśli tryb jest używany do połączenia VPN Podział tunelowania (pole „Użyj domyślnej bramy w sieci zdalnej” nie jest zaznaczone), możesz korzystać z Internetu przez sieć lokalną, ale nie możesz rozpoznać adresów DNS w zdalnej sieci VPN (w takim przypadku wyłączenie IPv6 nie pomaga).

Musisz zrozumieć, że system Windows wysyła zapytanie DNS z interfejsu sieciowego, który ma najwyższy priorytet (niższa wartość pomiaru interfejsu). Załóżmy, że Twoje połączenie VPN działa w trybie tunelowania Split (chcesz korzystać z Internetu przez sieć LAN i zasoby firmowe za pośrednictwem połączenia VPN).

Użyj programu PowerShell, aby sprawdzić metryki dla wszystkich interfejsów sieciowych:

Get-NetIPInterface | Interfejs sortowania obiektów

Powyższy obrazek pokazuje, że lokalne połączenie Ethernet ma niższą metrykę (25) niż interfejs VPN (w tym przykładzie 100). W związku z tym ruch DNS przechodzi przez interfejs o niższej wartości metrycznej. Oznacza to, że zapytania DNS są wysyłane do lokalnego serwera DNS, a nie do połączenia VPN serwera DNS. Tj. w tej konfiguracji nie można rozpoznać adresów w zewnętrznej sieci VPN.

Ponadto należy wspomnieć o nowej funkcji klienta DNS w systemie Windows 8.1 i Windows 10. W tych wersjach systemu operacyjnego dodano funkcję rozpoznawania nazw DNS pod nazwą Inteligentne rozpoznawanie nazw wielu domów (SMHNR). Podczas korzystania z SMHNR system domyślnie wysyła zapytania DNS do wszystkich znanych mu równolegle serwerów DNS i korzysta z szybszej odpowiedzi. To nie jest bezpieczne, ponieważ potencjalnie zewnętrzne serwery DNS (wskazane w połączeniu VPN) mogą zobaczyć twoje zapytania DNS (wyciek twoich zapytań DNS na zewnątrz). Możesz wyłączyć SMHNR w systemie Windows 10 za pomocą zasad grupy:

Konfiguracja komputera -> Szablony administracyjne -> Sieć -> Klient DNS-> Wyłącz inteligentne rozpoznawanie nazw dla wielu baz = Włączone.

Lub za pomocą poleceń (dla Windows 8.1):

Set-ItemProperty -Path "HKLM: \ Software \ Policies \ Microsoft \ Windows NT \ DNSClient" -Name DisableSmartNameResolution -Wartość 1 -typ DWord
Set-ItemProperty -Path "HKLM: \ SYSTEM \ CurrentControlSet \ Services \ Dnscache \ Parameters" -Name DisableParallelAandAAAA -Value 1 -Typ DWord

W Windows 10 Creators Update (1709) i nowszych zapytania DNS są wysyłane do wszystkich znanych serwerów DNS w kolejności, a nie równolegle. Możesz zwiększyć priorytet określonego DNS, jeśli zmniejszysz jego metrykę..

W związku z tym zmiana metryki umożliwi wysyłanie zapytań DNS przez ten interfejs sieciowy (LAN lub VPN), przy czym rozpoznawanie nazw ma dla Ciebie większy priorytet.

Im mniejsza wartość wskaźnika interfejsu, tym wyższy priorytet takiego połączenia. System Windows automatycznie udostępnia metryki IPv4 interfejsom sieciowym, w zależności od ich prędkości i typu. Na przykład w przypadku połączenia LAN o prędkości> 200 Mb / s wartość metryki interfejsu wynosi 10, a w przypadku bezprzewodowego połączenia Wi-FI o prędkości 50-80 Mb / s metryka wynosi 50 (patrz tabela https://support.microsoft.com/en-us/help/ 299540 / an-objaśnienie-automatycznej-metryki-funkcji-dla-ipv4-trasy).

Możesz zmienić metrykę interfejsu za pomocą interfejsu graficznego, programu PowerShell lub polecenia netsh.

Na przykład chcesz, aby zapytania DNS były wysyłane przez połączenie VPN. Musisz zwiększyć wskaźniki lokalnych połączeń LAN, aby stały się ponad 100 (w moim przykładzie).

Otwórz Panel sterowania -> Sieć i Internet -> Połączenia sieciowe, otwórz właściwości połączenia Ethernet, wybierz właściwości protokołu TCP / IPv4, przejdź do „Zaawansowane ustawienia TCP / IP„ Odznacz „Automatyczne przypisanie danych”I zmień parametry interfejsu na 120.

To samo można zrobić z poleceniami zarządzania siecią PowerShell (użyj indeksu interfejsu LAN uzyskanego za pomocą polecenia cmdlet Get-NetIPInterface):

Set-NetIPInterface -InterfaceIndex 11 -InterfaceMetric 120

Lub netsh (musisz podać nazwę swojego połączenia LAN)

netsh int ip set interface interface = metryka „Ethernet 3” = 120

Podobnie możesz zmniejszyć wartość metryki we właściwościach połączenia VPN..

Możesz także zmienić ustawienia połączenia VPN, zmieniając tryb na SplitTunneling i określając sufiks DNS dla łączenia za pomocą PowerShell:

Get-vpnconnection
Set-VpnConnection -Name „VPN” -SplitTunneling $ True
Set-VpnConnection -Name „VPN” -DnsSuffix twojadomena.com