У меня есть следующий /etc/hosts
файл на машине с Ubuntu 12.04
127.0.0.1 localhost
10.248.27.66 ec2-50-112-220-110.us-west-2.compute.amazonaws.com puppetmaster
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
Однако команда host не разрешает имя puppetmaster
правильно, в то время как команда telnet делает
root@ip-10-248-34-162:/home/ubuntu# host puppetmaster
Host puppetmaster not found: 3(NXDOMAIN)
root@ip-10-248-34-162:/home/ubuntu# telnet puppetmaster 8140
Trying 10.248.27.66...
Connected to ec2-50-112-220-110.us-west-2.compute.amazonaws.com.
Escape character is '^]'.
Почему команда host не разрешает записи в / etc / hosts?
источник
/etc/nsswitch.conf
была похожа на эту,hosts: files dns
и я изменил ее,hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
однако в обоих случаях/etc/hosts
не запрашивается, вместо этого кажется, что прямые DNS-запросы сделаны. Как я могу убедиться, что/etc/hosts
сначала будет запрашиваться при использовании команды, какdig
илиhost
?getent hosts
или что-то еще, что используетgethostbyname()
getent ahosts
а неgetent hosts
потому, чтоgetent hosts
используетgethostbyaddr()
илиgethostbyname*()
которые устарели. Если я правильно понял,getent hosts
эмулирует, как старые UNIX C-программы раньше работали, иgetent ahosts
эмулирует, как должны работать программы Moderm.Поскольку
host
утилита является исключительно утилитой поиска DNS.Большинство приложений используют библиотечные вызовы
getaddrinfo
илиgethostbyname
. Эти библиотеки запрашивают файл, вызываемый/etc/nsswitch.conf
для определения приоритета поиска и политики выполнения различных поисков.Обычно
/etc/nsswitch.conf
содержит строкуЧто говорит программе сначала запрашивать,
/etc/hosts
а затем запрашивать DNS в случае неудачи.Так как хосты выполняют исключительно поиск в DNS, он не заглядывает в
/etc/hosts
него.источник
Вы найдете это
dig
и будетеnslookup
вести себя так же, какhost
.Причина этого заключается в том, что целью всех этих команд является поиск DNS, а не поиск файлов.
Большинство других программ используют средство разрешения имен операционной системы, которое консультируется,
/etc/nsswitch.conf
а затем (если требуется)/etc/resolv.conf
решает, как разрешить запрашиваемое имя хоста. (Это упрощение, есть и другие варианты.)nsswitch.conf
Файл обычно отдает приоритет локальным файлам, а не DNS.источник
проверить файл /etc/nsswitch.conf и найти строку, начинающуюся со слова "hosts"? Вы видите слово «файлы» в этой строке? Если да, то до или после слова «днс»?
В обычной системе эта строка должна быть
если у вас нет или в другом порядке, это может быть вашей проблемой.
источник
hosts: files dns