Відображення імені хоста та 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

..другий запис може бути перекриттям першого.


5
/etc/hostsне має ніякого впливу на дозвіл DNS при запиті DNS - серверів безпосередньо, що це те , що hostробить. Тим НЕ менше, багато інструментів і утиліти системи використовують в localhostвизначення, чекаючи , що вона буде петлевий адреса, і дозвіл імен використання системи (яка виглядає на /etc/hostsперш , ніж запит DNS) до імен рішучістю , а не строго буде DNS, який не завжди може бути присутнім.
DopeGhoti

1
Я також можу поділитися досвідом проблем з /etc/hostsфайлом щодо localhost. Раніше ми використовували деяке програмне забезпечення, яке вставило б 127.0.0.2 localhostу файл хостів, і це було останньою localhostзаписом, що призвело до того, що саме воно фактично спричинило всі види програмного забезпечення та проблеми з ліцензією. Тому моя рекомендація - це 127.0.0.1 localhostяк перший запис у вашому /etc/hostsфайлі та переконайтесь, що localhostв цьому файлі немає іншого запису. І я також би перевірив будь-які речі з ipv6.
ron

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>команду.


-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-адресою та іменем хоста був якийсь сторонній недрукувальний символ?
dr_

Остаточно не було символів, що не надруковані. Я перевірив це, перш ніж розміщувати це тут;)
Томас Лаурія

У мене немає символів вкладок, я запускаю SLES 11.x, і після чистої установки з DVD мій / etc / hosts файл 127.0.0.1слідує за 7 пробілами localhost. Тож я б трохи вагався, щоб вирішити проблему конкретно на кількох символах пробілу та зробити висновок про використання символу вкладки як рішення.
ron

забули згадати вкладку проти місця, а також може трапитися в межах конкретної версії або розповсюдження linux, що може бути помилкою? і якби це було так, ви повинні мати можливість робити різні записи ip-адреси / імені хоста або з вкладкою, або з пробілом, а потім зробіть пінг на них, щоб побачити, чи це вирішено ... просто не робіть цього зlocalhost
ron

на жаль, я не пам’ятаю, на якій машині (і тому дистрибутиві) я відчув проблему ... - Я думаю, що це було на Ubuntu 15.05 від virtualboximages.com/…. Я збираюся це оцінити.
Thomas Lauria
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.