Почему мое разрешение имен попадает в DNS даже при записи файла hosts?

15

Я использую Ubuntu 10.04.2 LTS Desktop. Будучи веб-разработчиком, естественно, я создал «me.com» в своем/etc/hosts файле. К сожалению, мое разрешение имен передается в DNS перед первой проверкой записи локальных хостов, и я не могу понять, почему.

Конечным результатом является то, что если мой /etc/resolv.conf nameserver 127.0.0.1сначала там содержится , то я получаю ответ обратно в свой веб-браузер от me.com (локальный) менее чем за секунду. Но если у меня нет этой записи, то мой ответ иногда занимает до 5 секунд, если мой провайдер немного медленный.

Проблема была настолько хлопотной, что мне пришлось подать здесь вопрос (и кто-то решил ее) о том, как автоматически вставить эту запись /etc/resolv.conf. Но один из пользователей (@shellholic) здесь настоятельно рекомендовал (и комментировал со мной обо всем этом), что я должен подать этот вопрос.

Знаете ли вы, почему разрешение имен моей рабочей станции должно сначала попасть на DNS-сервер, прежде чем попасть в мой /etc/hostsфайл? Сейчас я использую трюк resolv.conf .

Volomike
источник
1
Вы можете попробовать поискать /etc/nsswitch.conf. Записи в моей системе немного неочевидны, но вы можете проверить поиск только filesв качестве опции и посмотреть, будет ли это иметь значение.
Белаква
Да, не могли бы вы дать нам вывод cat /etc/nsswitch.confи cat /etc/host.conf? Кроме того: как вы тестируете это (через пинг, браузер, перехват пакетов и т. Д.)?
организовать
Чтобы завершить версию @arrange, не могли бы вы приложить результат time getent hosts me.com; hostname --fqdn; grep 'me.com' /etc/hosts; grep hosts /etc/nsswitch.conf; netstat -uln | grep ':53'; cat /etc/host.conf; wc -l /etc/hosts. Не стесняйтесь запутывать рациональность.
Shellholic
@shellholic ^ рациональность ^ рационально? хе.
Белаква
@jgbelacqua: действительно
Shellholic

Ответы:

15

Файл /etc/nsswitch.conf позволит вам изменить порядок разрешения имен. По умолчанию сначала размещается файл хоста, затем настраивается DNS. Там может быть больше вариантов.

Файл /etc/hostsсодержит только IP-адреса и имена хостов (несколько имен для одного IP, если хотите)

В этом файле /etc/resolv.confбудут перечислены поисковые домены по умолчанию, а также будет последовательно указан список серверов имен, которые будут использоваться.

jfmessier
источник
4
Также имейте в виду, что после того, как имя разрешено приложением или службой на вашем Linux-компьютере, оно останется в кеше на время, известное как TTL (время жизни). Поэтому, если вы переключите последовательность разрешения, вам лучше перезапустить систему или очистить кеш.
jfmessier
как вы очищаете «кеш»?
Эрик Джонсон
Я не уверен, но перезапуск сетевого соединения с помощью команд ifup и ifdown может это сделать. Конечно, перезагрузка должна очистить кеш, но мы используем Linux, верно?
jfmessier
nscdможет кэшировать запросы разрешения имен, но не учитывает ttl (и поэтому кэширование хостов по умолчанию отключено). systemd-resolvedтакже будет кешировать записи. Если ни один из них не настроен, узлы Linux не кэшируют ответы DNS . (Браузеры, вероятно, делают на уровне приложений)
Герт ван ден Берг