Як розпізнавання імен розв'язує імена?


11

Під час написання сценарію я хотів посилатись на машину за назвою комп’ютера, яке я їй дав (наприклад, "selenium-rc"). Я не міг писати його за допомогою "selenium-rc", тому я спробував виконати наступні команди, щоб перевірити, чи було розпізнано ім'я.

> traceroute 192.168.235.41
traceroute to 192.168.235.41 (192.168.235.41), 64 hops max, 52 byte packets
 1  selenium-rc (192.168.235.41)  0.545 ms  0.241 ms  0.124 ms

Гаразд, traceroute "знайшов" ім'я. Як? Далі ...

> traceroute selenium-rc
traceroute: unknown host selenium-rc

Хм ... механізм пошуку тут повинен бути іншим, оскільки хост невідомий. Я припускаю, що для цього використовується процес розв'язання імені системи, тоді як перший приклад використовує процес, специфічний для відстеження. Правильно?

Потім, коли я повернувся трохи пізніше ...

> traceroute 192.168.235.41
traceroute to 192.168.235.41 (192.168.235.41), 64 hops max, 52 byte packets
 1  minint-q4e8i52.mycorp.net (192.168.235.41)  0.509 ms  0.206 ms  0.136 ms

Гаразд, різний результат. Ім'я "selenium-rc" не змінилося на самій машині, але процес вирішення імені traceroute повинен містити певний пріоритет і тепер дає, мабуть, більш авторитетний результат, призначений іншою системою / службою в мережі. (На жаль, я припускаю, що це динамічне ім'я, яке я не контролюю, і тому воно не буде корисним у сценарії.)

Чи може хтось пояснити результати?

Відповіді:


9

Як правило, і в Linux, і в Unix, traceroute і ping використовуватимуть виклик gethostbyname () для пошуку імені системи. gethostbyname (), у свою чергу, використовує файли конфігурації системи для визначення порядку, в якому слід проводити запити баз даних імен, тобто: / etc / hosts та DNS.

У Linux дією за замовчуванням є (або, можливо, раніше) запит спочатку на DNS, а потім / etc / hosts. Це можна змінити або оновити, встановивши потрібний порядок у /etc/host.conf.

Для пошуку / etc / hosts перед DNS, встановіть такий порядок у /etc/host.conf:

order hosts,bind

У Solaris цим самим порядком керується через файл /etc/nsswitch.conf у записі для бази даних хостів.

хости: файли dns

Встановлює порядок пошуку для пошуку в / etc / hosts перед пошуком DNS.

Traceroute та ping використовували б ці методи для пошуку всіх налаштованих баз даних імен. hostі nslookupкоманди як використання тільки DNS, тому вони не обов'язково дублюватимуть , здавалося б , суперечливі результати , які ви бачите.

Solaris має інструмент пошуку getent, за допомогою якого можна ідентифікувати хости або адреси так само, як це роблять traceroute та ping - дотримуючись налаштованого набору іменних баз даних для пошуку.

getent hosts <hostname>

буде шукати будь-які бази даних, перелічені для хостів, у /etc/nsswitch.conf.

Тому. У вашому випадку, щоб досягти послідовних результатів, додайте наступне до / etc / hosts

192.168.235.41 selenium-rc

І переконайтесь, що /etc/host.conf має:

order hosts,bind

Або переконайтесь, що /etc/nsswitch.conf має:

hosts: files dns

Після цього ви повинні побачити більш послідовні результати як з ping, так і traceroute, а також з іншими командами, такими як ssh, telnet, curl, wget тощо.


Коли я запитав DNS-сервер, перелічений у файлі resv.conf, утилітою dig, я знайшов обидві записи. Напевно, traceroute віддав перевагу повністю кваліфікованому.
Кіт Бентруп

2

Схоже, у вас встановлений зворотний пошук правильно, але не вперед.

Ваша система може шукати IP-адресу 192.168.235.41 і визнати, що вона є selenium-rc, але коли вона намагається шукати, selenium-rcвона не вдається.

Я рекомендую вам перевірити /etc/hostsі /etc/resolv.conf; поведінка getaddrinfoсистемного виклику диктується останнім і посилається на перший.


1

Моя здогадка: виклик traceroute 192.168.235.41викликав запит DNS вийти, щоб знайти ім'я, що відповідає IP-адресі 192.168.235.41. traceroute -n 192.168.235.41це спосіб почати traceroute, не роблячи пошук DNS на кожній IP-адресі, яку він знайде. Сервер DNS зайняв більше часу, ніж система DNS хотіла чекати, тому спочатку traceroute не дав ім'я хоста для 192.168.235.41. На той момент, коли traceroute надсилає та отримує пакети з 192.168.235.41, ваш DNS-сервер відповів, тож traceroute може дати ім'я хоста для нього.

Отже, я б сказав "Проблеми з сервером DNS", з дуже зручним терміном, який змусив вас підозріло ставитися до інших речей. Подумайте тут «Закон Мерфі». Коли ви повернулися трохи пізніше, ви отримаєте інше ім’я для тієї ж IP-адреси, що також змушує мене думати, можливо, хтось возився з конфігурацією сервера DNS під час, коли ви робили ваші трассеру.

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