Как правильно протестировать локальный DNS-сервер локально?

Контекст

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

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

Попытки

Локальный DNS-сервер работает на локальном IP-адресе. 127.0.0.1 в порту 5379 поэтому я попробовал следующие команды, за которыми следовали их соответствующие выходы:

nslookup 127.0.0.1 somedomain.com
;; connection timed out; no servers could be reached

nslookup 127.0.0.1:5379 somedomain.com
nslookup: couldn't get address for 'somedomain.com': failure

nslookup http://127.0.0.1:5379 somedomain.com
;; connection timed out; no servers could be reached

nslookup https://127.0.0.1:5379 somedomain.com
;; connection timed out; no servers could be reached

Так что либо команда тестирования nslookup 127.0.0.1:5379 somedomain.com Это возможный способ проверить, возвращает ли локальный DNS-сервер правильный IP-адрес, когда он запрашивает какой-либо домен, и я неправильно настроил локальный DNS-сервер, или я использую неправильную команду тестирования.

Вопрос

Как можно проверить, возвращает ли ответ локального DNS-сервера правильный IP-адрес, когда он запрашивается для домена (с устройства, на котором размещен DNS-сервер)?


4 ответа
3

Вы можете просто использовать для этого команду ping.

Полное раскрытие информации: если вам нужно знать, отвечает ли ваш частный сервер с помощью этого метода, вам нужно иметь только 127.0.0.1 в качестве первого и единственного DNS-сервера в конфигурации сетевых адаптеров на компьютере, на котором запущено серверное приложение.

Пинговать mydomain.com и проверьте, отображает ли он правильный номер IP.

Конечно, вы можете использовать nslookup как гравитацию, упомянутую в его ответе, это дает вам лучшую детализацию, но также имеет свои недостатки. (Это в значительной степени устарело в пользу более новых утилит)

127.0.0.1 — это адрес обратной связи компьютера, только ваша локальная ОС может связываться с этим IP-номером.

Убедитесь, что служба подключена к локальному IP-адресу, если вы хотите, чтобы другие компьютеры в локальной сети могли использовать локальную службу DNS.

Не забудьте добавить локальный IP-адрес службы DNS в настройки адаптера других компьютеров в локальной сети.

  • Правильно ли я понимаю, что ваш ответ подразумевает, что ping mydomain.com всегда будет проверять локальные IP-адреса, доступные для DNS-сервера, который имеет запись IP-адреса для mydomain.com прежде чем они выйдут в Интернет, чтобы посмотреть на какой-нибудь DNS-сервер по умолчанию?

    — в
    12 часов назад

  • Если у вас в адаптерах сначала установлен локальный IP-адрес DNS, да. Если это компьютер, на котором запущена служба, вы должны указать 127.0.0.1 в качестве первого DNS-сервера, а затем глобального DNS.

    — Тим Стюарт
    12 часов назад

  • Я в замешательстве. Как бы вы использовали ping проверить, работает ли DNS-сервер? Особенно DNS-сервер, который, насколько я понимаю, не настроен в resolv.conf.

    — Даниэль Б.
    8 часов назад

  • @Daniel B, если вы пропингируете имя хоста, он вернет номер IP в своем выводе. (Если адаптер сначала настроен на локальный адрес DNS, а на сервере настроена запись.) Вы также можете сделать это в обратном порядке с помощью / а в (окнах). Думаю, я интерпретировал вопрос как противоположный, что он правильно настроил конфигурацию, но не настроил ее привязку интерфейса правильно.

    — Тим Стюарт
    7 часов назад

  • Это проверит, что а сервер способен разрешить адрес, но не то, что конкретный сервер решает это.

    — Отметка
    2 часа назад

Ваш синтаксис nslookup обратный: сервер идет после доменное имя.

nslookup example.com 127.0.0.1

Вы не можете указать собственный порт с помощью Windows nslookup. (Хотя в нем есть скрытый -port= вариант, но, к сожалению, он игнорируется.)

URL-адреса здесь не будут работать: DNS не основан на HTTP. (Существует спецификация для передачи сообщений DNS внутри HTTP, но для этого требуются специальные клиенты и серверы.)

Если у вас есть Linux или какой-либо BSD (подсистема Windows для Linux тоже будет работать), существует более широкий набор инструментов, таких как dig, drill, или же delv. Например:

host -p 5379 example.com 127.0.0.1

dig @127.0.0.1 -p 5379 example.com

— юзер1686


Как отметили несколько человек, слабость этого ответа заключается в том, что разрешение ping не доказывает, что ваш DNS-сервер ответил. Это просто доказывает, что какой-то DNS-сервер это сделал. Предполагая, что вы не можете переключиться с nslookup на другую команду, которая поддерживает указание порта (как предлагается в этом ответе), я вижу два варианта, которые могут вам помочь:

  1. Выключите свой DNS-сервер, чтобы он определенно не отвечал. Попробуйте выполнить ping, если он ничего не возвращает, но дает результаты при включении сервера, значит, он работает. Слабость: это не сработает, если Интернет сможет разрешить адрес.
  2. Отключите сетевой кабель. Убедитесь, что вы ничего не можете достичь (чтобы вы знали, что у вас нет подключения к Wi-Fi или чего-либо в этом роде). Попытайтесь выполнить эхо-запрос при выключенном сервере (чтобы убедиться, что он не кэширован). Затем включите DNS-сервер и повторите попытку проверки связи.

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

Другой вариант — переадресация портов. Команда nslookup будет использовать порт 53. Если вы сконфигурируете все так, чтобы запросы на 53 перенаправлялись на правильный порт, это также позволит прохождению запроса. Опять же, он добавляет дополнительные вещи, которые могут не работать. DNS-сервер сломан? Или переадресация портов настроена неправильно? Любой из них может дать тот же результат.

— mdfst13


Я постараюсь привести здесь полный пример, включая выставление зоны с локального dns-сервера.

Мы будем использовать bind9 в качестве сервера имен на машине с Ubuntu 21.

Прежде всего определите свои зоны в файле, я использовал etc/bind/example.com.zone, изменив этот пример
Документы: https://bind9.readthedocs.io/en/latest/reference.html#zone-file

$ORIGIN example.com.
$TTL 30
@       SOA     localhost. admin.example.com.   (
                2001062501 ; serial
                21600      ; refresh after 6 hours
                3600       ; retry after 1 hour
                604800     ; expire after 1 week
                86400 )    ; minimum TTL of 1 day
;
;
        NS      localhost. ;
        NS      dns1.example.com.
        NS      dns2.example.com.
dns1    A       10.0.1.1
        AAAA    aaaa:bbbb::1
dns2    A       10.0.1.2
        AAAA    aaaa:bbbb::2
bar     CNAME   www.example.com

Теперь вы должны загрузить эту зону из файла конфигурации привязки /etc/bind/named.conf, вот так

zone "example.com." IN {
  type master;
  file "/etc/bind/example.com.zone";
  allow-update {none; };
};

Я также добавил дополнительную опцию в названную службу /etc/bind/named.conf.options.

options {
  ;---OTHER STUFF
  listen-on port 53 { any; };
  allow-query       { any; };
  recursion       yes;
};

Затем вы можете перезапустить службы sudo systemctl restart named bind9

Наконец, проверьте свои зоны, вы можете использовать то, что предпочитаете: dig, host, resolvectl или nslookup.

$ host -t A dns1.example.com localhost

Using domain server:
Name: localhost
Address: 127.0.0.1#53
Aliases: 

dns1.example.com has address 10.0.1.1

$ host -t AAAA dns1.example.com localhost

Using domain server:
Name: localhost
Address: 127.0.0.1#53
Aliases: 

dns1.example.com has IPv6 address aaaa:bbbb::1

$ host -t CNAME bar.example.com localhost

Using domain server:
Name: localhost
Address: 127.0.0.1#53
Aliases: 

bar.example.com is an alias for www.example.com.example.com.
Как правильно протестировать локальный DNS-сервер локально?

— tuxErrante

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *