Отображение имени хоста и IP-адреса в / etc / hosts

14

На моем Linux-компьютере, когда я бегу hostname, он показывает mongodb, но когда я бегу host mongodb, он показывает:

mongodb@mongodb:/var/hadoop/hadoop-1.2.1/bin$ host mongodb
Host mongodb not found: 2(SERVFAIL)

Мой /etc/hostsфайл:

192.168.10.10   mongodb
192.168.10.10   localhost
127.0.0.1       localhost
#127.0.0.1 localhost
# 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
  • Мой первый вопрос: поскольку /etc/hostsсопоставление с IP на имя хоста, почему этот компьютер не может преобразовать имя хоста mongodbв IP 192.168.10.10? Вместо этого, когда я бегу host localhost, это может быть решено и показывает:

    localhost has address 127.0.0.1
    
  • Мой другой вопрос: Согласно /etc/hostsфайлу, имя хоста localhostдолжно было быть разрешено до 192.168.10.10 вместо IP-адреса обратной связи 127.0.0.1. Кто-нибудь может объяснить это мне?

Учан
источник

Ответы:

30

В hostnslookup) утилите явно запросы DNS - сервера, и не советуются с /etc/hostsфайлом в конфигурации системы по умолчанию. Если бы вы были по тому tracerouteили pingиному адресу, вы бы увидели, что он правильно разрешен.

Вы не хотите переходить localhostна что-либо, кроме 127.0.0.1, это может иметь странные и тонкие эффекты на многие вещи. Я думаю, что /etc/hostsразбирается в том порядке, в котором оно написано, и так как у вас есть:

192.168.10.10   localhost
127.0.0.1       localhost

... вторая запись может иметь приоритет над первой.

DopeGhoti
источник
5
/etc/hostsне имеет никакого влияния на разрешение DNS при запросе DNS - серверов напрямую, что это то , что hostделает. Однако многие системные инструменты и утилиты используют это localhostопределение, ожидая, что это будет адрес обратной связи, и используют разрешение имен системы (которое проверяет /etc/hostsперед запросом DNS), чтобы разрешать имена, а не строго обращаться к DNS, которое может не всегда присутствовать.
DopeGhoti
1
Я также могу поделиться опытом с проблемами в /etc/hostsфайле относительно localhost. В прошлом мы использовали какое-то программное обеспечение, которое вставляло бы 127.0.0.2 localhostв файл hosts, и это была последняя localhostзапись, из-за которой она фактически стала причиной всех видов проблем с программным обеспечением и лицензиями. Поэтому я рекомендую иметь 127.0.0.1 localhostв качестве первой записи в вашем /etc/hostsфайле и убедиться, что localhostв этом файле нет других записей. И я также проверил бы любой материал ipv6.
Рон
5
Чтобы быть немного педантичным, оба выполните поиск ns, который может быть просмотром dns, если вы настроили поиск хоста в nsswitch.conf.
Symcbean
1
@symcbean - то, что вы говорите, правильно. Я бы не назвал это педантичным.
DarkHeart
2
Заметное неочевидное исключение из этого - если вы /etc/resolv.confуказываете на DNS-сервер, работающий непосредственно на вашем устройстве (например, на кеширование dnsmasq), и указанный сервер консультируется с вашим локальным сервером, /etc/hostsпрежде чем запрашивать внешние серверы. Тогда, косвенно, такие команды hostбудут выполняться вашей командой /etc/hosts- это необычная установка, но я видел устройства, которые поставляются вместе, и опыт использования такой системы может показаться конфликтующим с этим ответом, если кто-то не знает об этой специфической настройке. ,
mtraceur
9

В дополнение к ответу DopeGhoti, для проверки вашего разрешения, включая /etc/hostsприоритет, вы можете использовать getent hosts <some_hostname>команду.

HBruijn
источник
-3

У меня возникли похожие проблемы с / etc / hosts, содержащим несколько пробелов между IP и именем хоста, вместо этого я использовал TAB. После изменения на TAB имя хоста может быть разрешено с помощью ping.

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.

см. также на /superuser//a/938366/467479

Томас Лаурия
источник
5
Это удивляет меня. Справочная страница для hostsговорит: Fields of the entry are separated by any number of blanks and/or tab characters. Возможно, в вашем случае был какой-то посторонний непечатный символ между IP и именем хоста?
dr01
Не было определенно никаких непечатных символов. Я проверил это прежде, чем я отправил это здесь;)
Томас Лаурия
У меня нет символов табуляции, я запускаю SLES 11.x, и после чистой установки с DVD мой файл / etc / hosts 127.0.0.1сопровождается 7 пробелами, за которыми следует localhost. Поэтому я бы не решился связать проблему конкретно с несколькими пробелами и завершить использование символа табуляции в качестве решения.
Рон
забыл упомянуть, что вкладка и пробел могут также встречаться в конкретной версии или дистрибутиве Linux, что может быть ошибкой? и если бы это было так, вы должны быть в состоянии сделать различные записи IP-адреса / имени хоста с помощью табуляции или пробела, затем сделайте пинг на них, чтобы увидеть, если это будет решено ... просто не делайте этого сlocalhost
ron
к сожалению, я не помню, на какой машине (и, следовательно, в дистрибутиве) у меня возникла проблема ... - Я думаю, что это было на Ubuntu 15.05 с virtualboximages.com/… Я собираюсь оценить это.
Томас Лаурия