Я установил свой собственный DNS-сервер (Bind9) на Pine64 под управлением Ubuntu. На моем компьютере с Windows 10 я добавил IP-адрес своего DNS в верхнюю часть DNS server addresses
в Advanced TCP/IP Settings
. «Настоящие» DNS-серверы, предоставленные моим интернет-провайдером, также были добавлены с более низким приоритетом, как резервные (см. Снимок экрана).
Пока отвечает мой собственный DNS, с этой конфигурацией все работает отлично.
Однако, если я отключу свой собственный DNS-сервер, Windows не сможет разрешить имена. Делая nslookup
приводит к истечению времени ожидания запроса DNS.
В соответствии с Документация Microsoft, если первый DNS не работает, следует попробовать следующий из списка:
В большинстве случаев клиентский компьютер связывается и использует свой предпочтительный DNS-сервер, который является первым DNS-сервером в его локально настроенном списке. С указанными альтернативными DNS-серверами связываются и используются, когда предпочтительный сервер недоступен.
У меня вопрос почему Windows не использует второй DNS при выходе из строя первого?
В этом случае я ожидал, что второй DNS (83.255.229.23) успешно ответит, но он даже не отправил запрос.
Благодаря ответу Zoredache я понял, что мой список DNS (в Windows) неверен. DNS-серверы на скриншотах названы «ns1.comhem.se» и принадлежат моему интернет-провайдеру. Однако, очевидно, их нельзя использовать напрямую:
Resolve-DnsName -DnsOnly -Name ubuntu.com -Server 83.255.229.23
Resolve-DnsName : ubuntu.com : DNS operation refused
At line:1 char:1
+ Resolve-DnsName -DnsOnly -Name ubuntu.com -Server 83.255.229.23
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ResourceUnavailable: (ubuntu.com:String) [Resolve-DnsName], Win32Exception
+ FullyQualifiedErrorId : RCODE_REFUSED,Microsoft.DnsClient.Commands.ResolveDnsName
Я посмотрел, какие DNS-адреса получил мой маршрутизатор от моего интернет-провайдера, и оказалось, что они называются «anyresolver1.comhem.se» (IP 83.255.255.1). Когда я поместил их в список, все заработало точно так, как ожидалось!
Ну почти все. Как отмечено в комментариях ниже, nslookup
все еще не работает:
nslookup
DNS request timed out.
timeout was 2 seconds.
Default Server: UnKnown
Address: 192.168.0.18
> set d2
> ubuntu.com
Server: UnKnown
Address: 192.168.0.18
------------
SendRequest(), len 33
HEADER:
opcode = QUERY, id = 2, rcode = NOERROR
header flags: query, want recursion
questions = 1, answers = 0, authority records = 0, additional = 0
QUESTIONS:
ubuntu.com.home, type = A, class = IN
------------
DNS request timed out.
timeout was 2 seconds.
timeout (2 secs)
SendRequest failed
------------
SendRequest(), len 33
HEADER:
opcode = QUERY, id = 3, rcode = NOERROR
header flags: query, want recursion
questions = 1, answers = 0, authority records = 0, additional = 0
QUESTIONS:
ubuntu.com.home, type = AAAA, class = IN
------------
DNS request timed out.
timeout was 2 seconds.
timeout (2 secs)
SendRequest failed
------------
SendRequest(), len 28
HEADER:
opcode = QUERY, id = 4, rcode = NOERROR
header flags: query, want recursion
questions = 1, answers = 0, authority records = 0, additional = 0
QUESTIONS:
ubuntu.com, type = A, class = IN
------------
DNS request timed out.
timeout was 2 seconds.
timeout (2 secs)
SendRequest failed
------------
SendRequest(), len 28
HEADER:
opcode = QUERY, id = 5, rcode = NOERROR
header flags: query, want recursion
questions = 1, answers = 0, authority records = 0, additional = 0
QUESTIONS:
ubuntu.com, type = AAAA, class = IN
------------
DNS request timed out.
timeout was 2 seconds.
timeout (2 secs)
SendRequest failed
*** Request to UnKnown timed-out
>
Но просмотр Интернета и разрешение имен действительно работают:
Resolve-DnsName -DnsOnly -Name ubuntu.com
Name Type TTL Section IPAddress
---- ---- --- ------- ---------
ubuntu.com A 600 Answer 91.189.94.40
Подвести итог: Используйте правильные настройки DNS! (:
Команда nslookup не всегда является самым полезным инструментом для проверки того, как клиент решает проблемы. Хотя команда nslookup будет подключаться к одному из DNS-серверов, настроенных для этого клиента, она не переключится автоматически. В отличие от встроенного преобразователя Windows.
Если вы используете последнюю версию Windows, вам следует открыть powershell и использовать командлет Resolve-DnsName
вместо этого для разрешения имен с помощью стандартных API Windows.