Nslookup, dig и ping возвращают разные значения для меня. Я хочу, чтобы foo.bar.name всегда статически разрешал localhost на моей машине.
Я использовал команду
host foo.bar.name
и отредактировал / etc / hosts, чтобы включить строку
1.1.1.1 foo.bar.name foo
(где 1.1.1.1 IP-адрес моего хост-компьютера)
Когда я запускаю ping или curl, он ведет себя так, как я хочу.
Но когда я запускаю dig или nslookup, адрес foo.bar.name разрешается совершенно иначе.
Я что-то пропустил?
Какие конфигурации мне нужно изменить, чтобы убедиться, что на этом конкретном хосте разрешение DNS происходит так, как я сказал.
/etc/hosts
по умолчанию (если дистрибутив не отключил ее).ping
,curl
И все другие приложения на самом деле не использовать DNS непосредственно - они используют функцию ОС , предоставляемые «gethostbyname», который затем вызывает несколько провайдеров. Один из них - «днс» (который говорит с DNS-серверами), другой - «файлы» (то есть/etc/hosts
); могут быть дополнительные провайдеры, которые говорят по другим протоколам. Они все настроены через/etc/nsswitch.conf
.Между тем
dig
,host
иnslookup
, по сути, являются клиентами DNS - они обходят функции «gethostbyname» ОС и вместо этого напрямую обрабатывают и отправляют пакеты DNS. (Они были специально написаны таким образом.) В результате они также пропускают/etc/hosts
и любые другие механизмы разрешения имен, и вы ничего не можете настроить, чтобы «исправить» это.(Сама ОС не собирается проверять каждый пакет UDP, чтобы проверить, является ли он DNS, и также не собирается вставлять поддельный ответ DNS из / etc / hosts только потому, что.)
Единственный способ сделать
dig
& c. Честь / etc / hosts состоит в том, чтобы установить фактический DNS-сервер для приложения, с которым можно разговаривать, что обеспечит требуемые статические ответы. Например, dnsmasq будет действовать как кэш / прокси DNS и по умолчанию загружает статические данные из / etc / hosts. В качестве альтернативы, Unbound имеет расширенную конфигурацию «локальных данных», хотя он не может напрямую читать / etc / hosts.После настройки dnsmasq или Unbound укажите
/etc/resolv.conf
127.0.0.1 (или любой другой хост, на котором работает dnsmasq).источник
Система проверяет по умолчанию в / etc / hosts и затем использует сервер имен. и то, что ты сделал, прекрасно. это просто , что некоторые программы предназначены , чтобы поговорить с серверами имен напрямую, то есть
host
,nslookup
иdig
. Вот почему у вас разные результаты.источник