Заметили ли записи в локальных файлах «host» как прямой, так и обратный поиск имен?

16

Если у меня есть следующие записи в файле hosts:

192.168.100.1    bugs
192.168.100.2    daffy.example.com
192.168.100.3    elmer.example.com.

Будут ли попытки ввода IP-> имен разрешением локальными утилитами (я полагаю, используя 'gethostbyaddr' или эквивалент Windows) удовлетворить эти записи? Это поведение настраивается? Как это зависит от операционной системы? Имеет ли значение, что записи файла 'hosts' полностью определены или нет?

РЕДАКТИРОВАТЬ: В ответ Рассел, моя тестовая система Linux работает на RHEL 4. Мой /etc/nsswitch.conf содержит следующую строку 'hosts':

hosts:      files dns nis

Если я пингую любой из моих хостов по имени (например, ошибки, daffy), прямое разрешение работает правильно. Если я отследю любую из них по IP-адресу, обратный поиск будет работать, как и ожидалось. Однако, если я пингую их по IP, ping не разрешает имена хостов. Насколько я понимаю, Linux-пинг всегда будет пытаться преобразовать IP-адреса в имена, если не указано иное. Почему traceroute может обрабатывать обратные запросы в файлах хостов, а ping - нет?

Мурали Суриар
источник

Ответы:

16

Обычно файл hosts будет использоваться как для прямого, так и для обратного поиска. Предпочтение в системе Unix это будет зависеть от порядка записей в вашем файле nsswitch.conf.

например, строка ниже заставит файл hosts переопределять DNS. Сторнирование записей заставит DNS переопределить файл hosts.

хосты: файлы днс

Я не уверен, что вы можете настроить порядок предпочтений в системе Windows.

Я посмотрел на источник для ping в inetutils-20071127 (версия, установленная на моем Ubuntu 9.04), и источник, кажется, включает режим только для чисел, если вы пропингуете IP-адрес, а не имя хоста:

                if (inet_aton (target, & whereto.sin_addr) == 1) {
                        имя хоста = цель;
                        if (argc == 1)
                                параметры | = F_NUMERIC;

Это может объяснить, почему вы не получаете обратный поиск при пинге вашего хоста по IP-адресу.

Рассел Хиллинг
источник
Это была моя мысль, но, похоже, это не так. Смотрите обновленный вопрос для деталей.
Мурали Суриар
У меня еще не было возможности взглянуть на источник; однако быстрый взгляд на вывод ldd показывает, что в моей системе ping напрямую связан с библиотекой DNS-преобразователя libresolv, что может означать, что он пропускает файл nsswitch и выполняет обратный поиск напрямую ...
Рассел Хиллинг,
При использовании hostутилиты ISC может сложиться впечатление, что редактирование / etc / hosts не имеет никакого эффекта. host 10.0.0.1сделает запрос DNS и проигнорирует файл hosts. Это позволяет проверить системный распознаватель:perl -MSocket -le '$a=inet_aton(shift); $_=gethostbyaddr $a, AF_INET; print' 10.0.0.1
mivk
8

Я нашел ссылку на изменение записей реестра для изменения порядка разрешения имен в Windows:

http://forums11.itrc.hp.com/service/forums/questionanswer.do?threadId=963485

Цитирую оттуда:

По умолчанию Windows проверяет поставщиков разрешения имен в следующем порядке:

Local, (локальный кэш имен NetBT), хосты, DNS, NetBT (WINS).

Вы хотите, чтобы заказ был Hosts, DNS, Local, NetBT.

В дальнейшем более низкие числа имеют более высокий приоритет.

Следующие ключи реестра в

HKEY_LOCAL_MACHINE\SYSTEM\CurentControlSet\ServicessTcpip\ServiceProvider

должны быть изменены.

DnsPriority= 0x3e8 (Decimal: 1000)
HostsPriority= 0x1f4 (Decimal: 500)
LocalPriority= 0x5dc (Decimal: 1500)
NetbtPriority= 0x7d1 (Decimal: 2001)
Джеймс Ф
источник
Как они получают такую ​​«внутреннюю информацию»?
Pacerier
1

В /etc/host.confфайле указывается , какой порядок используется для обнаружения IP - адреса. Мой по умолчанию содержит следующее:

#
# /etc/host.conf
#

order hosts,bind
multi on

Это означает, что сначала проверяется файл hosts, а затем DNS (привязка).

Если nisздесь не указано иное, то оно никогда не будет просматриваться /etc/nsswitch.conf.

Ссылка на документацию: http://tldp.org/LDP/nag/node82.html

Sekenre
источник
Метод /etc/host.conf для некоторых систем устарел, используется только nsswitch.conf (например, системы на основе glibc и eglibc). Эти версии glibc будут анализировать файл /etc/host.conf без предупреждения и сбрасывать строку заказа.