Зачем мне нужно менять порядок хостов в nsswitch.conf?

Зачем мне нужно менять порядок хостов в nsswitch.conf?

В моей компании при установке Ubuntu я не могу пропинговать ни одну локальную машину:

$ ping foobar.mycompany.local
ping foobar.mycompany.local: Name or service not known

Но если я вставлю dnsв /etc/nsswitch.confначало списка, то это сработает:

# hosts:          files mdns4_minimal [NOTFOUND=return] dns
hosts:          dns files mdns4_minimal [NOTFOUND=return]

Я хотел бы понять, почему.

решение1

Ваша компания использует домен DNS, заканчивающийся на .local, который на самом деле является специальным суффиксом и зарезервирован IETF дляМногоадресная DNS-рассылка. Так как у вас установлен клиент mDNS (mdns4_minimal), он настраивается на приоритетную обработку всех *.localимен.

(К сожалению, в корпоративных интрасетях все еще распространена практика создания несуществующего доменного имени илиайпи адресдиапазон и надеюсь, что он останется несуществующим навсегда...)


Просмотрите настроенные модули один за другим:

hosts: files mdns4_minimal [NOTFOUND=return] dns
  1. Модуль «files» ищет /etc/hosts, а затем возвращает «не найдено».
  2. Обработка продолжается до следующего модуля.
  3. Модуль «mdns4_minimal» выполняет поиск в локальной подсети LAN с помощью Multicast DNS (mDNS), а затем возвращает «не найдено».
  4. [NOTFOUND=return]указывает на то, что обработка не должна продолжаться после этой ошибки; т.е. «не найдено» должно быть немедленно возвращено программе.
  5. Модуль «dns» никогда не достигается.

Зачем лишний "[NOTFOUND=return]"? По разным данным, он нужен для ускорения безуспешных запросов и предотвращения утечки информации, а также для снижения нагрузки на публичные DNS-серверы.

Допустим, чья-то сетьфактически использованоmDNS (что распространено в Linux/macOS). Если пользователь пытался разрешить «MyLittleLaptop.local» и он не был найден, система продолжала пробовать следующий модуль («dns»), и запрос отправлялся на публичный DNS (например, на DNS-серверы школы или на маршрутизатор кофейни).

Но – согласно оговорке IETF – *.localимена не могут существовать в публичном DNS, поэтому такой запрос был бы бесполезен, все, что он делает, это раскрывает вашу личную информацию администратору сети. Поэтому добавляется тег [NOTFOUND=return], чтобы полностью не допустить его попадания в DNS.


Если ваша корпоративная сеть использует .localвнутренний DNS и выдовольно уверенон никогда не будет использовать mDNS, вы можете удалить весь модуль – в результате получится:

hosts: files dns

Если вы хотите отдать приоритет DNS, но оставить возможность использования mDNS, то переместите его в конец:

hosts: files dns mdns_minimal

Связанный контент