Как я могу направить запрос на конкретный DNS-сервер?


155

Я хотел бы отправить запрос на определенный DNS-сервер, чей IP-адрес мне известен. Неважно, если это на Windows или * nix.

В Windows я могу сделать что-то вроде:

C:\Documents and Settings\Anton Daneyko>nslookup superuser.com
Server:  DNSs2.Uni-Marburg.DE
Address:  137.248.21.22

Non-authoritative answer:
Name:    superuser.com
Address:  64.34.119.12

Но для этого используются настройки DNS локальной машины. Вместо этого я хотел бы запросить определенный DNS-сервер, чтобы проверить, правильно ли он отвечает на мои запросы или отвечает вообще.

Так должно быть что-то вроде:

nslookup --dns-ip=8.8.8.8 superuser.com

Ответы:


201

Для базовых записей A и CNAME вы можете просто

nslookup somewhere.com some.dns.server

Usage: 
   nslookup [-opt ...]             # interactive mode using default server
   nslookup [-opt ...] - server    # interactive mode using 'server'
   nslookup [-opt ...] host        # just look up 'host' using default server
   nslookup [-opt ...] host server # just look up 'host' using 'server'

или если вы просто наберете nslookup без каких-либо параметров, вы можете сделать намного больше опций ...

Commands:   (identifiers are shown in uppercase, [] means optional)
NAME            - print info about the host/domain NAME using default server
NAME1 NAME2     - as above, but use NAME2 as server
help or ?       - print info on common commands
set OPTION      - set an option
    all                 - print options, current server and host
    [no]debug           - print debugging information
    [no]d2              - print exhaustive debugging information
    [no]defname         - append domain name to each query
    [no]recurse         - ask for recursive answer to query
    [no]search          - use domain search list
    [no]vc              - always use a virtual circuit
    domain=NAME         - set default domain name to NAME
    srchlist=N1[/N2/.../N6] - set domain to N1 and search list to N1,N2, etc.
    root=NAME           - set root server to NAME
    retry=X             - set number of retries to X
    timeout=X           - set initial time-out interval to X seconds
    type=X              - set query type (ex. A,AAAA,A+AAAA,ANY,CNAME,MX,NS,PTR,SOA,SRV)
    querytype=X         - same as type
    class=X             - set query class (ex. IN (Internet), ANY)
    [no]msxfr           - use MS fast zone transfer
    ixfrver=X           - current version to use in IXFR transfer request
server NAME     - set default server to NAME, using current default server
lserver NAME    - set default server to NAME, using initial server
root            - set current default server to the root
ls [opt] DOMAIN [> FILE] - list addresses in DOMAIN (optional: output to FILE)
    -a          -  list canonical names and aliases
    -d          -  list all records
    -t TYPE     -  list records of the given RFC record type (ex. A,CNAME,MX,NS,PTR etc.)
view FILE           - sort an 'ls' output file and view it with pg
exit            - exit the program

7
К сожалению, в руководстве используются термины «хост» и «сервер», а не что-то более понятное, например «доменное имя» и «DNS-сервер».
ClearCrescendo

1
Это не совсем неверно. «Доменное имя» является только частью имени хоста. Вы действительно можете выполнять поиск только по части «хост» полного доменного имени, не используя суффикс домена. NSLOOKUPавтоматически попытается использовать любые поисковые суффиксы, настроенные в вашей системе, для получения соответствия.
TheCompWiz

1
Вам не нужно иметь полный доступ, NSLOOKUPчтобы использовать опции - синтаксис немного странный. Пример :nslookup -all -debug -type=ANY -class=ANY servertolookup.com someDNSserver.com
Coruscate5

11

Просто копаясь в опциях nslookup, которые вы можете отобразить, если вы вызываете их, nslookupа затем вводите helpих в интерактивном режиме nslookup, я получил правильный ответ:

C:\Documents and Settings\Anton Daneyko>nslookup help
Server:  DNSs2.Uni-Marburg.DE
Address:  137.248.21.22

*** DNSs2.Uni-Marburg.DE can't find help: Non-existent domain

C:\Documents and Settings\Anton Daneyko>nslookup
Default Server:  DNSs2.Uni-Marburg.DE
Address:  137.248.21.22

> stackoverflow.com 8.8.8.8
Server:  [8.8.8.8]
Address:  8.8.8.8

Non-authoritative answer:
Name:    stackoverflow.com
Address:  64.34.119.12

16
Я улыбнулся, когда увидел, что этот ответ начинается с "Просто копать ...".
Хоссейн

7

Да, C:\Documents and Settings\Anton Daneyko>nslookup superuser.com будет искать ваш собственный DNS-сервер, чтобы узнать IP-адрес superuser.com. Если вы добавите IP-адрес или имя другого DNS-сервера в командную строку, он будет искать на данном DNS-сервере IP-адрес superuser.com. Пример:

C:\Documents and Settings\Anton Daneyko>nslookup superuser.com 8.8.4.4
Server:  google-public-dns-b.google.com
Address:  8.8.4.4

Non-authoritative answer:
Name:    superuser.com
Addresses:  190.93.245.58
      190.93.246.58
      141.101.114.59
      190.93.247.58
      190.93.244.58

Кстати, 8.8.4.4 - это IP-адрес DNS-серверов Google.

Но оба из приведенных выше дают «неавторизованные ответы», так как ни один из них SOA, который является авторитетным для домена superuser.com. Оба имеют кэшированную копию, которая была распространена из SOA. Если вы хотите спросить уполномоченный сервер, сначала выясните имя IP-адреса уполномоченного сервера, используя команду:

C:\Documents and Settings\Anton Daneyko>nslookup -type=ns superuser.com
Server:  DNSs2.Uni-Marburg.DE
Address:  137.248.21.22

Non-authoritative answer:
superuser.com   nameserver = cf-dns02.superuser.com
superuser.com   nameserver = cf-dns01.superuser.com

cf-dns02.superuser.com  internet address = 173.245.59.4
cf-dns02.superuser.com  AAAA IPv6 address = 2400:cb00:2049:1::adf5:3b04
cf-dns01.superuser.com  AAAA IPv6 address = 2400:cb00:2049:1::adf5:3a35
cf-dns01.superuser.com  internet address = 173.245.58.53

Это вернет неавторизованный ответ с вашего локального DNS-сервера из Marburg Uni с указанием всех авторитетных серверов для superuser.com. Затем вы можете использовать команду, которую мы использовали ранее, чтобы задать любой из 4 авторитетных серверов, следующим образом:

C:\Documents and Settings\Anton Daneyko>nslookup superuser.com 173.245.59.4
Server:  cf-173-245-59-4.cloudflare.com
Address:  173.245.59.4

Name:    superuser.com
Addresses:  141.101.114.59
      190.93.246.58
      190.93.245.58
      190.93.247.58
      190.93.244.58

Как вы видите, на этот раз авторитетный SOA-сервер возвратил IP-адреса, следовательно, вы больше не видите комментарий «Неавторизованный ответ». Это особенно полезно, когда вы создали новое доменное имя или сменили хостинг-провайдеров или перенесли его на другой регистратор доменов и не можете получить доступ к своему веб-сайту, поскольку новые IP-адреса не распространяются даже через 24 часа. Затем вы можете начать с SOA и убедиться, что ваш правильный IP-адрес задан DNS-сервером, а затем проследить его дальше по дереву. Полезно проверить, получили ли изменения DNS-серверы Google, и, наконец, может ли ваш локальный DNS-сервер разрешить ваше доменное имя для корректного IP-адреса.


1

Чтобы изменить DNS-сервер по умолчанию в nslookup, вы можете просто изменить сервер, введя сервер NAMEorIPofDNS. В этом примере ниже я изменил DNS-сервер по умолчанию (192.168.50.21) на новый (4.2.2.3).

C: \ Windows \ system32> Nslookup

Сервер по умолчанию: неизвестно

Адрес: 192.168.50.21

сервер 4.2.2.3

Сервер по умолчанию: c.resolvers.level3.net

Адрес: 4.2.2.3

>

Теперь я готов делать запросы против 4.2.2.3 против 192.168.50.21


Это дублирует другой ответ и не добавляет новый контент. Пожалуйста, не публикуйте ответ, если у вас нет чего-то нового.
DavidPostill

Возможно, нет нового контента, но ценность. Я предпочитаю этот ответ, чем длинные :)
Pawel Cioch

0

Вы можете настроить основной DNS для использования с вашим соединением.
Перейдите в свойства вашего соединения => Internet Procol (TCP / IP). (место, где вы можете установить статический IP)
Здесь вы можете вручную определить, какой DNS вы хотите использовать для каждого соединения.
После тестирования вы всегда можете изменить его обратно на прежнее значение.


3
Я не думаю, что это «прямой» способ запроса DNS-сервера.
Лепе

0

Получить конкретные типы записей с указанного DNS-сервера с помощью одной команды

Чтобы найти типы записей, отличные от записей A и AAAA (и CNAME) по умолчанию, возвращаемых nslookup, с помощью указанного вами DNS-сервера:

nslookup -q=<record type> <host> <DNS server>

Например, чтобы возвратить записи MX для домена, stackexchange.comиспользующего DNS-сервер, 8.8.4.4команда будет выглядеть так:

nslookup -q=MX stackexchange.com 8.8.4.4

0

Я работаю над Openwrt 18.06.1 ARMv6 Raspberry pi и настраиваю tor dns, а также dnscrypt-proxy, поэтому у меня была очень похожая проблема. Основной причиной является то, что локальный провайдер перехватывает небезопасные ответы от root-servers.net, ответы, в которых говорится, что сайт не был найден, а затем перенаправляет на свой собственный сайт. Хотя это не большой недостаток безопасности, я не нахожу это особенно полезным.

Первый тест, который нужно выполнить при запросе определенного адреса, - это на самом деле попытаться использовать недопустимый адрес, чтобы убедиться, что вы получаете правильный нулевой ответ при использовании параметров сервера, порта и хоста. Существует множество руководств и версий, и их легко понять. Вы делаете тест порта, когда он фактически отвечает из кэшированных результатов или серверов по умолчанию. После получения нулевого ответа, работайте с адресом и портом активного сервера. Активные порты могут быть показаны на openwrt с помощью netstat -plnt, но обратите внимание, что некоторые команды маршрутизатора, возможно, должны быть установлены в первую очередь. Служба tor, которую я установил на порту 9053, здесь не отображается, но все еще работает после добавления DNSPort 127.0.0.1:9053 в файл torrc. Формат nslookup на этой платформе принимает параметры [host] и [server], и я могу протестировать tor с помощью nslookup cnn.com 127.0.0.1 # 9053 Я могу протестировать dnscrypt с помощью команды nslookup cnn. com 127.0.0.1 # 5353 При переходе на неверные номера портов или доменов получен ответ; ; время соединения истекло; серверы недоступны. Dig также работает на openwrt, но должен быть установлен из пакета bind-dig. dig -q 127.0.0.1 -p 9053 www.bbc.com И снова происходит сбой для недопустимых портов. В моем случае проблема была решена, когда я изменил записи в / etc / config / network и установил опцию dns '127.0.0.1' для сетей, где я ранее использовал небезопасные записи dns.


0

Для окон то, что вы можете искать, представлено в следующей статье: https://technet.microsoft.com/en-us/library/ff394369.aspx


1
Добро пожаловать в Супер пользователя! Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.
Бертиб
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.