Zapobiegaj zmianie DNS przez VPN w podglądzie programisty Windows 7/8


10

Mam klienta, który korzysta z połączenia VPN, jednak automatycznie konfiguruje moje ustawienia DNS na nieistniejącym serwerze DNS, co oznacza, że ​​każde rozwiązanie DNS kończy się, dopóki nie zostanie wypróbowana alternatywa, co naprawdę spowalnia cały ruch internetowy.

Czy istnieje sposób, aby uniemożliwić aplikacji zastąpienie moich ustawień DNS (bez włączania UAC)?

Alternatywnie, czy istnieje sposób na skonfigurowanie jakiegoś lokalnego routingu, który mówi „kiedy przychodzi żądanie DNS dla adresu IP A, faktycznie używa adresu IP B”?

Korzystam z podglądu programisty Windows 8 (ale podejrzewam, że powinien on działać tak samo jak Windows 7).

Dzięki

Odpowiedzi:


18

Nie wierzę, że istnieje sposób, aby temu zapobiec , oprócz statycznego przypisywania serwerów DNS do połączenia VPN.

Aby zmienić kolejność zapytań do serwerów DNS, należy zmienić kolejność wiązania interfejsu zgodnie z https://superuser.com/a/314379/120267 , ale nie ma to wpływu na połączenia VPN w moje osobiste testy w systemie Windows 7; Potwierdziłem, że moje połączenie VPN jest konsekwentnie dodawane na początku HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Linkage\Bindlisty, niezależnie od ustawień kolejności powiązań interfejsu.

Można jednak zresetować zmiany DNS po ustanowieniu połączenia VPN.

Zbieranie informacji

Otwórz wiersz polecenia ( Start-> Run...-> cmd), a następnie uruchom netsh interface ipv4 show dnsservers. Zobaczysz dane wyjściowe podobne do następujących:

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
    ...

Potrzebujesz nazwy interfejsu dla VPN i opcjonalnie pierwszego serwera DNS połączenia innego niż VPN . W tym przykładzie są to odpowiednio My VPN i 192.168.0.1 .


Wszystko gotowe

Opcja 1: Wyłącz VPN DNS

Zakładając, że w ogóle nie potrzebujesz serwerów DNS VPN, możesz po prostu uruchomić następujące polecenie w wierszu polecenia:

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

Jeśli uruchomisz netsh interface ipv4 show dnsserversponownie, zobaczysz, że serwery DNS powiązane z VPN zostały usunięte; serwery DNS innego połączenia niż VPN będą używane do rozpoznawania nazw hostów.


Opcja 2: Uzupełnij VPN DNS

Jeśli potrzebujesz serwerów DNS swojej sieci VPN do rozpoznawania nazw hostów w intranecie, możesz uruchomić następujące polecenie w wierszu polecenia:

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

W takim przypadku netsh interface ipv4 show dnsserverspokaże, że pierwszy serwer DNS połączenia innego niż VPN został dodany na początku listy serwerów DNS twojego VPN. Zostanie on użyty do najpierw rozpoznania nazw hostów, a jeśli się nie powiedzie, wróć do korzystania ze zwykłych serwerów DNS VPN.


Jesteś panem bohaterem, dzięki za obszerną odpowiedź, wydaje się, że działa dobrze! Próbowałem zadzierać z netsh, ale nie udało mi się dotrzeć tak daleko ...
Wiebe Tijsma

1

Miałem podobny problem; połączenie z serwerem VPN zastąpiłoby DNS mojej stacji roboczej (zdalny klient VPN), więc lokalny DNS LAN byłby zasłonięty. Opisałem problem bardziej szczegółowo po stronie Stackoverflow, zanim wskazano mi, że powinienem go tutaj zamieścić.

Po przeczytaniu tego wątku widać, że nie można zapobiec zastąpieniu przy użyciu konfiguracji klienta OpenVPN. Moim rozwiązaniem było dodanie pliku wsadowego do katalogu konfiguracyjnego OpenVPN, który jest wykonywany po utworzeniu połączenia OpenVPN. Jeśli plik OVPN nosi nazwę company.ovpn, plik uruchamiany w programie connect musi mieć nazwę company_up.bat.

Poszerzyłem ten plik od czasu, gdy opublikowałem wcześniej wersję tego pliku w StackOverflow. Teraz wygląda to tak:

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: włamanie, aby poczekać kilka sekund przed kontynuowaniem. Najnowsza wersja (2.3) klienta OpenVPN zignorowałaby DNS i trasowała zmiany, gdyby została wykonana bez opóźnienia.

2: Ustaw DNS połączenia VPN tak, aby wskazywał na localhost. Mam resolver (używam SimpleDNS Plus ) działający na localhost, który przekazuje zapytania do domeny firmowej do firmowego serwera DNS przez VPN i wszystko inne do lokalnego serwera DNS LAN. Zauważ, że nie mogłem użyć lokalnego resolvera LAN do przesyłania zapytań dotyczących domeny firmowej do firmowego DNS przez VPN, ponieważ punkt końcowy VPN znajduje się na lokalnym hoście. Nazwa połączenia („Połączenie lokalne 4”) została określona w wierszu polecenia za pomocą polecenia „ipconfig / all”.

3: Firmowy serwer VPN jest skonfigurowany do kierowania całego ruchu wychodzącego przez VPN, jednocześnie ograniczając wychodzące (do Internetu) połączenia SSH. Spowodowało to konflikt z moim przepływem pracy i najpierw usuwam trasę „Maska sieci 0.0.0.0 0.0.0.0” ...

4: .. a następnie ponownie dodam trasę 0.0.0.0/0, aby wskazywała na lokalną bramę LAN, i ustawiłem jej metrykę (wagę) na 1000 jako catch-all dla całego ruchu, który nie byłby kierowany inaczej.

5: Bez „exit 0” OpenVPN wyrzuca ostrzeżenie o błędzie, że skrypt nie powiódł się (ze statusem wyjścia 1).

Mam nadzieję, że jest to przydatne dla kogoś ... działa dla mnie dość dobrze (nie trzeba ręcznie dostosowywać trasy ani DNS za każdym razem, gdy otwieram połączenie).


0

Czy istnieje sposób, aby uniemożliwić aplikacji zastąpienie moich ustawień DNS (bez włączania UAC)?

Przynajmniej nie ma łatwego sposobu na zrobienie tego.

Alternatywnie, czy istnieje sposób na skonfigurowanie jakiegoś lokalnego routingu, który mówi „kiedy przychodzi żądanie DNS dla adresu IP A, faktycznie używa adresu IP B”?

Możesz dodać wpisy do pliku hosts ( C:\Windows\System32\drivers\etc\hosts). Ten plik zawiera odwzorowania nazw hostów na adresy IP i jest preferowany nad żądaniami DNS.


Cóż, wiem o pliku hosts, ale to wszystko jest oparte na adresie IP, więc niestety nie działa ...
Wiebe Tijsma 21.02. O

Och, ok, teraz dostaję twoje pytanie. I nie, nie możesz przekierowywać żądań z jednego adresu IP na inny.
Michael

0

Czy możesz sprawdzić status pola wyboru „Użyj domyślnej bramy w sieci zdalnej”. Można to znaleźć, otwierając właściwości połączenia VPN i przejdź do karty Sieć i wybierz TCP / IP v4 lub TCP / IP V6, a następnie wybierz właściwości, a następnie zaawansowane. Może to być włączone, co może oznaczać, że cały ruch internetowy jest kierowany przez połączenie VPN. Nie zawsze można to wyłączyć i nadal robić to, co chcesz z VPN, ale można to wyłączyć, może to przyspieszyć dostęp do Internetu.

Jeśli to nie pomoże, jest tam karta DNS i możesz spróbować dodać tam swoje serwery DNS. Próbowałem tego, ale oczekiwałbym, że te ustawienia zastąpią ustawienia automatyczne.


Nie jest zaznaczone, więc nie przekierowuje całego ruchu internetowego przez VPN (kiedy nazwa zostanie ostatecznie rozwiązana, połączenie jest wystarczająco szybkie). Próbowałem zmienić tam ustawienia DNS, ale niestety wszystko to automatycznie wraca do nieprawidłowych ustawień DNS po ponownym uruchomieniu połączenia :(
Wiebe Tijsma

Jeśli nie możesz powstrzymać zmiany DNS-u, czy można go przyspieszyć, używając zapory ogniowej do blokowania żądań DNS na ten adres?
sgmoore

0

Niestety netsh nie może usunąć serwerów DNS przypisanych przez dhcp. Można to jednak zrobić, usuwając parametr DhcpNameServer w

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

klucz rejestru.


0

Od 2017 roku jest to teraz możliwe, jeśli jest oparte na OpenVPN

Dodaj wiersz do pliku konfiguracyjnego klienta

pull-filter ignoruje „DNS dhcp-option”

i zignoruje wszystkie wypchnięte wiersze konfiguracji, które zaczynają się od cytowanego tekstu.

Trzy słowa kluczowe działania to accept ignore reject. Nie znalazłem przypadku użycia do odrzucenia.


0

Po prostu usuwam tę opcję z konfiguracji VPN klienta

setenv opt block-outside-dns

To rozwiązało problem

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.