W jaki sposób system Windows decyduje, którego serwera DNS użyć przy rozwiązywaniu nazw?

41

Jakiego algorytmu używa system Windows, aby zdecydować, który serwer DNS zapyta w celu rozpoznania nazw?

Powiedzmy, że mam kilka interfejsów, wszystkie aktywne, niektóre bez określonego serwera DNS, niektórzy mówili, aby określić to automatycznie, a niektórzy z ręcznie określonym (w interfejsie ipv4 ORAZ interfejs ipv6).

Proszę o odpowiedź na to ogólne pytanie, mając nadzieję, że wiem, jak rozwiązać bardziej szczegółowy problem w systemie Windows Vista - mam dwa interfejsy, jeden o niższej wartości i serwer DNS określone ręcznie. nslookup używa TEGO serwera DNS i poprawnie rozwiązuje nazwy. Jednak wszystkie inne aplikacje nie potrafią rozpoznać nazwy, chyba że ręcznie określę serwer DNS dla innego interfejsu, z którego następnie będą korzystać aplikacje. nslookup korzysta również z serwera DNS określonego dla tego innego interfejsu po jego określeniu.

Dzięki

Artefakt
źródło

Odpowiedzi:

27

Jeśli się nie mylę, zależy to od kolejności wiązania karty sieciowej w Ustawieniach zaawansowanych w folderze połączeń sieciowych. Możesz to sprawdzić, zmieniając kolejność wiązania różnych kart sieciowych i uruchamiając nslookup jako test.

Aby rozwinąć moją odpowiedź, powołując się na artykuł, który łączy Evan , oto fragment tego artykułu:

Usługa klienta DNS wysyła zapytania do serwerów DNS w następującej kolejności:

  1. Usługa klienta DNS wysyła zapytanie o nazwę do pierwszego serwera DNS na liście serwerów DNS preferowanego adaptera i czeka jedną sekundę na odpowiedź.

  2. Jeśli usługa klienta DNS nie otrzyma odpowiedzi z pierwszego serwera DNS w ciągu jednej sekundy, wysyła zapytanie o nazwę do pierwszych serwerów DNS na wszystkich rozważanych kartach i czeka dwie sekundy na odpowiedź.

  3. Jeśli usługa klienta DNS nie otrzyma odpowiedzi z żadnego serwera DNS w ciągu dwóch sekund, usługa klienta DNS wysyła zapytanie do wszystkich serwerów DNS na wszystkich wciąż rozważanych kartach i czeka kolejne dwie sekundy na odpowiedź.

  4. Jeśli usługa klienta DNS nadal nie odbiera odpowiedzi z żadnego serwera DNS, wysyła zapytanie o nazwę do wszystkich serwerów DNS na wszystkich rozważanych kartach i czeka cztery sekundy na odpowiedź.

  5. Jeśli usługa klienta DNS nie otrzyma odpowiedzi z żadnego serwera DNS, klient DNS wysyła zapytanie do wszystkich serwerów DNS na wszystkich wciąż rozważanych kartach i czeka na odpowiedź przez osiem sekund.

Preferowanym adapterem w kroku 1 jest adapter wymieniony jako pierwszy w kolejności wiązania.

joeqwerty
źródło
4
Ten proces zmienił się w systemie Windows 10, chociaż nie znam nowego procesu, wiem, że powyższe nie dotyczy systemu Windows 10, zobacz ten blog - blogs.technet.microsoft.com/networking/2015/08/14/...
Robert
14

W systemie Windows 10 (i Windows Server 2016) należy zaktualizować metrykę każdego interfejsu w żądanej kolejności.

  1. Idź do Panelu sterowania> Sieć i Internet> Połączenia sieciowe
  2. Kliknij prawym przyciskiem myszy żądane połączenie (połączenie o wyższym priorytecie)
  3. Kliknij Właściwości> Protokół internetowy w wersji 4
  4. Kliknij Właściwości> Zaawansowane
  5. Odznacz „Automatic Metric”
  6. Wpisz 10 w „Metryka interfejsu”
  7. Kliknij OK

Bibliografia:

Użyłem 10 dla mojej sieci LAN, 20 dla sieci WLAN i 100 dla interfejsów VPN (wolę lokalny DNS w pracy, dla innych może być odwrotnie). Pamiętaj niższy wskaźnik = wyższy priorytet .

Zobacz ten artykuł w pomocy technicznej Microsoft, aby uzyskać wyjaśnienie funkcji automatycznych pomiarów dla tras IPv4 .

Jacob Evans
źródło
+1 Dla mnie w systemie Windows 10 było to jedyne rozwiązanie, dziękuję.
GµårÐïåñ
Modyfikacja metryczna wpływa tylko na wybór trasy. Nie wpływa na to, który serwer DNS będzie używany.
Jruv
14 głosów i osobiste doświadczenia nie zgadzają się, zgadzam się, że nie powinno, ale wydawało się, że deweloperzy z Microsoftu tak go zakodowali.
Jacob Evans
8

Ta strona opisuje algorytm używany przez system Windows do wykonywania zapytań DNS. Nie jest wystarczająco głęboka, aby dać ci wszystkie odpowiedzi, których szukasz, ale jakiś czas z snifferem i ten artykuł powinien być wszystkim, czego potrzebujesz, aby określić, co dzieje się w twojej konkretnej sytuacji.

Evan Anderson
źródło
3

Miałem dokładnie ten sam problem. Spędziłem dzień, próbując to rozgryźć. Teraz wiem i działa jak urok.

Jeśli masz kilka kart sieciowych i jeśli podasz serwer DNS w każdej z nich. Czy wiesz, jaki serwer DNS będzie w końcu używany?

Możesz to sprawdzić poprzez praktykę.

nslookup 192.168.3.6

Widzisz serwer, którego faktycznie używa Twój komputer

Pytanie brzmi - od tego, co zależy od tego, które okna serwera DNS wybiorą i jak możemy to zmienić.

Potrzebujemy go szczególnie, gdy korzystamy z klientów VPN.

Odpowiedź od qwerty2010 jest słuszne i prawidłowe. Ale możesz go używać WYŁĄCZNIE, gdy masz kartę sieciową w panelu sterowania - centrum sieci i udostępniania - zmień ustawienia karty - lista kart sieciowych

Tylko jeśli widzisz nic, które jest odpowiedzialne za klienta VPN, możesz użyć graficznego sposobu wskazania Windowsowi, jakiego serwera DNS (który jest określony w konkretnej nici), którego chcesz użyć.

Więc idź Centrum sieci i udostępniania -> Zmień ustawienia karty -> Zaawansowane -> Ustawienia zaawansowane -> i przenieś się w górę dzięki DNS, którego chcesz użyć. (W GÓRĘ musisz go podnieść).

Jeśli jednak na przykład użyjesz klienta VPN Shrew - nie będziesz mieć żadnych kart sieciowych.

Co robisz.

Otwórz rejestr.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}

I patrzysz na podfoldery 0000, 0001 itd. Folder z

DriverDesc = Shrew Soft Virtual Adapter

w porządku. Następnie skopiuj do schowka

NetCfgInstanceId = {B498E7DE-7257-48F6-AD32-60E470030F05}

Teraz idziesz

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Linkage]

i ty się otwierasz key = Bind. Zobaczysz taką listę

\Device\{1DF89CE3-CAAD-4EB7-A53F-AD16BC1D5EFD}
\Device\{70126DBE-B44D-4392-9417-0CABD6E384B1}
\Device\{D5127F8E-E7BB-4661-AE5A-A922614173D0}
\Device\{C44039AB-6801-4A9B-A736-3B12782FF411}
\Device\{85231D0F-CD05-4774-A983-632C5D83AC62}
\Device\{7E87BC81-8C58-4E05-9FA0-7897A6AA5CCE}
\Device\{3A1A3EFC-A9DE-4BCA-BAF6-81C7074487E0}
\Device\{8D41EDFC-04AC-4537-B5D5-0D54EB51A023}

Wszystko, co musisz zrobić, to umieścić się na szczycie

\Device\{B498E7DE-7257-48F6-AD32-60E470030F05}
\Device\{1DF89CE3-CAAD-4EB7-A53F-AD16BC1D5EFD}
\Device\{70126DBE-B44D-4392-9417-0CABD6E384B1}
\Device\{D5127F8E-E7BB-4661-AE5A-A922614173D0}
\Device\{C44039AB-6801-4A9B-A736-3B12782FF411}
\Device\{85231D0F-CD05-4774-A983-632C5D83AC62}
\Device\{7E87BC81-8C58-4E05-9FA0-7897A6AA5CCE}
\Device\{3A1A3EFC-A9DE-4BCA-BAF6-81C7074487E0}
\Device\{8D41EDFC-04AC-4537-B5D5-0D54EB51A023}

To wszystko. Nie ma potrzeby ponownego uruchamiania.

Teraz twoje okna będą korzystać z DNS określonego w złośliwym VPN nic, gdy używasz połączenia VPN.

Alex
źródło
0

Ponieważ może to pomóc Tobie lub innym osobom, możesz wyłączyć użycie okrężnego okienka dla wymienionych DNS, aby uczynić korzystanie z DNS bardziej przewidywalnym. Spróbuj ustawić RoundRobin=0w HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\DNS\Parameters( odwołanie ), aby wyłączyć krągłość dns.

Istnieje również „limit czasu” na obracanie serwerów, możesz także spróbować ustawić go na zero :

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
 ServerPriorityTimeLimit=0
higuita
źródło
Zgodnie ze wspomnianym „odniesieniem” (link) dotyczy to konfiguracji serwera DNS w celu zapewnienia wielu adresów IP dla niektórych zapytań FQDN w kolejności sortowania obróconej z zapytania do zapytania. Nie ma to nic wspólnego z pytaniem, w jaki sposób serwer DNS (klient) wybiera serwer DNS, na który ma być wysyłane zapytanie.
Thomas Urban,
-13

Nie decyduje losowo. Masz połączenie z routerem, który otrzymuje adres IP od firmy posiadającej serwery DNS. Otrzymają żądanie, chyba że ręcznie zmienisz adres IP na inny DNS, na przykład: OpenDns . A może decydujesz się na posiadanie własnych serwerów DNS. To też działa. Wystarczy wpisać adresy IP w centrum sieci i wszystko powinno być w porządku. I tak, musisz ustawić je ręcznie.

Możesz także dostosować plik w C:\Windows\System32nazwie „hosty” bez rozszerzenia. Umożliwia przekierowanie żądań URL zamiast wysyłania ich do standardowego DNS. Do lokalnego serwera (który musi być uruchomiony i nasłuchuje na porcie 80)

KdgDev
źródło
18
Zasadniczo wszystko, co tu powiedziałeś, jest złe
MDMarra,
3
I dodatkowe -1 za nawet wzmiankę o ropiejącej obrzydliwości, jaką jest plik hosts.
Maximus Minimus,
Sposób na uzyskanie informacji
MarkM
4
@WebDevHobo - W komentarzu jest zbyt wiele do poprawienia, ale omówię najważniejsze kwestie. 1) OP ma komputer z wieloma interfejsami (najprawdopodobniej osobnymi kartami sieciowymi), a każdy ma zdefiniowany inny DNS. W kontekście pytania najwyraźniej obsługuje kilka wewnętrznych serwerów DNS lub ma kilka preferowanych zewnętrznych serwerów DNS - to pole prawdopodobnie ma wiele baz. 2) Nie musisz ręcznie ustawiać adresu wewnętrznego serwera DNS, jeśli używasz DHCP w konfiguracji serwera DHCP dla tej puli adresów. 3) Ścieżka do pliku hosts to c: \ windows \ system32 \ drivers \ etc
MDMarra
3
Plik HOSTS nie powinien być używany w tej sytuacji ani praktycznie nigdy, chyba że wykonujesz programowanie lokalne i używasz nagłówków HOST lub czegoś podobnego i potrzebujesz nazwy FQDN do rozwiązania lokalnego. A serwer nie musi mieć uruchomionego portu 80, niezależnie od tego, czy używasz pliku HOSTS do rozpoznawania nazw, czy serwera DNS. Wystarczy dołączyć: numer_portu na końcu adresu URL. HOSTY nie dbają o port, podobnie jak DNS - to sposób na przetłumaczenie nazwy hosta na adres IP i nic więcej.
MDMarra,