Яка різниця між `dig` та` host` при запиті на певний сервер імен?


11

Я використовував цю команду, щоб перевірити, чи правильно я налаштував речі у постачальника послуг DNS:

host hostname.example.com ns1.example-nameserver.com

Наскільки я можу сказати, це просить ns1.example-nameserver.comподивитися hostname.example.comі повідомити відповідь. Я отримував відповідь не знайденого господаря, тому я вважав, що зробив це неправильно. Однак, без вказівки їх ім'я-сервера (що дозволяє ім'я-сервера мого провайдера , щоб подивитися його) , я отримав правильну відповідь ( hostnameє CNAMEчи це має значення). Я не міг цього зрозуміти, тому я обдивився і знайшов digкоманду:

dig @ns1.example-nameserver.com hostname.example.com

Наскільки я можу сказати, це робить те саме, що і hostкоманда - запитує конкретний сервер імен шукати хоста. Тому я роблю висновок, що вони повинні робити це по-різному, і кешування серверів імен повинно використовувати той самий метод, що і dig.

Мій висновок є правильним чи неправильним, якщо він правильний:

Яка різниця між цими двома методами пошуку?

Якщо це неправильно:

Які мої непорозуміння щодо DNS та команд hostта digкоманд привели мене до цього висновку?

Приклад виводу:

$ host cardiff.tzmchapters.org ns1.livedns.co.uk
Using domain server:
Name: ns1.livedns.co.uk
Address: 213.171.192.250#53
Aliases: 

Host cardiff.tzmchapters.org not found: 3(NXDOMAIN)

$ dig @ns1.livedns.co.uk cardiff.tzmchapters.org

; <<>> DiG 9.8.3-P1 <<>> @ns1.livedns.co.uk cardiff.tzmchapters.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 23620
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;cardiff.tzmchapters.org.   IN  A

;; ANSWER SECTION:
cardiff.tzmchapters.org. 3600   IN  CNAME   ghs.google.com.

;; AUTHORITY SECTION:
google.com.     3600    IN  SOA ns1.livedns.co.uk. admin.google.com. 1354213742 10800 3600 604800 3600

;; Query time: 27 msec
;; SERVER: 213.171.192.250#53(213.171.192.250)
;; WHEN: Mon Apr 22 23:47:05 2013
;; MSG SIZE  rcvd: 128

обидві команди повинні працювати в цьому випадку однаково. Чи можете ви показати повний вихід кожної команди?
Ренан

Зауважте, як обидва, digта hostзвітуйте NXDOMAIN. З ним digви можете бачити його в заголовку (5-й непорожній рядок виводу) і з hostцим більш очевидним. NXDOMAINозначає, що домен не існує. Тим не менш, а CNAMEповертається у розділі відповідей! Я вірю, що це помилка на сервері DNS!
Селада

Тож у такому випадку, чи digі те, і hostінше надсилає той самий пакет запитів, отримує такий самий пакет відповідей (окрім будь-яких часових позначок), але інтерпретує його по-різному? Є чи hostпід заставу, як тільки він бачить NXDOMAIN?
jhabbott

FWIW У мене є точно протилежна проблема конкретного субдомену. Використання хоста на цьому конкретному субдомені забезпечує очікуваний запис, який показує, що цей конкретний субдомен підходить до очікуваного канонічного імені хоста. Однак, використовуючи dig в цьому конкретному субдомені - я отримую відповідь, що запис не існує. Додатково переходити до цього піддомену за допомогою браузера не працює. Я кілька разів намагався перевіряти орфографічні помилки тощо. Команди явно НЕ працюють так само.
користувач12345

Відповіді:


13

host, digі nslookupвсі вони мають більшість однакових функцій. У випадку, коли ви ставите запитання (задаєте певне запитання DNS певному серверу імен), digі host(і справді nslookup) поводитесь точно так само.

Для усунення несправностей у DNS він digвважається кращим, оскільки його вихідний формат є більш "сировинним": у його висновку він безпосередньо показує вміст усіх 4 полів у відповіді DNS: питання, відповідь, повноваження та додаткові розділи (плюс прапорці у заголовку) , а також має більше варіантів. hostз іншого боку, має більш зручний для користувача формат виводу.

Якщо вам не потрібен варіант, який має одна з команд, а інші - або частину інформації, яку одна з них виводить, а інші - ні, це зводиться до питання переваги.


2
Якщо вони роблять те ж саме в мережі (власне запит), як я можу отримати хост, який не знайдено при використанні, hostале правильну відповідь при використанні dig? Навіть якщо сервер налаштований за допомогою певних параметрів (за вибором чи випадково) для цього, він повинен мати можливість диференціювати запити.
jhabbott

Ні! Дві команди, які ви даєте у своєму запитанні, рівноцінні, і вони повинні давати однакову відповідь! Ви впевнені, що digдали точну відповідь, а не запис у додатковому розділі чи повноваженнях? Як пропонує Ренан , це може допомогти показати результат.
Селада

Гаразд, я додав кілька прикладних результатів. Я отримую однаковий результат і вдома, і на роботі. Коли я не вказую сервер імен, який потрібно використовувати, і мій провайдер обробляє запит, hostпрацює чудово. Спробуйте самі, і дайте мені знати результати.
jhabbott

Щойно переглядаючи це - ISP, врешті-решт, сказав мені, що їх сервер був налаштований не відповідати на прямі запити клієнтів, лише для інших серверів імен, які просять передачу інформації - чи digзапит по-іншому, як і сервер імен?
jhabbott

1
dig може робити як звичайні запитання (усі типи, крім AXFR), так і зони передачі (тип AXFR), але оператори DNS зазвичай обмежують передачу зон на авторизовані раби, тому ви, ймовірно, хочете використовувати регулярні запитання
Celada

0

Якщо ви використовуєте ім'я хоста, яке не FQDN, результати можуть бути різними, оскільки hostбудуть використовуватися пошукові домени в resolv.conf, тоді як digза замовчуванням не використовується.

Ви повинні використовувати +searchопцію, якщо хочете digвикористовувати resolv.conf(або додати її до ~/.digrc).

Наприклад:

$ host foo
foo.myfqdn.com has address 10.1.2.3

$ dig +short foo
# (no result)

$ dig +short +search foo
10.1.2.3
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.