Почему мое имя хоста отображается с адресом 127.0.1.1, а не 127.0.0.1 в / etc / hosts?

205

Это может быть немного нудистским вопросом, но я посмотрел на / etc / hosts на моей новой установке Xubuntu и увидел это:

127.0.0.1 localhost
127.0.1.1 myhostname

В большинстве 'nixes, которые я использовал, вторая строка опущена, и если я хочу добавить свое имя хоста в файл hosts, я просто сделаю это:

127.0.0.1 localhost myhostname

Есть ли разница между этими двумя файлами в каком-либо практическом смысле?

Том
источник
Интересно, я могу просто удалить вторую строку или какой-нибудь процесс в Debian / Ubuntu сгенерирует строку и добавит ее обратно?
simgineer

Ответы:

159

Между этими двумя нет большой разницы; 127/8(например: 127.0.0.0=> 127.255.255.255) все связаны с интерфейсом обратной связи.

Причина этого описана в руководстве по Debian в гл. 5 Настройка сети - 5.1.1. Разрешение имени хоста .

В конечном счете, это обходной путь ошибки; Оригинальный отчет 316099 .

Даниэль Питтман
источник
5
Фактическая причина: «Связывание имени хоста системы с последним привело к нежелательному эффекту превращения localhost.localdomain в каноническое имя хоста, связанное с именем хоста системы. То есть hostname --fqdn вернул localhost.localdomain».
cmroanirgo
Я на самом деле проследил это к этому документу lists.debian.org/debian-boot/2005/06/msg00938.html, и кажется, что это потому, что Томас чувствовал необходимость использовать 1.1 вместо 0.1, что они эквивалентны, поправьте меня если я ошибаюсь, но это значит, что этот ответ на самом деле только крошка?
Брайан Томас
@BrianThomas это сообщение предполагает, почему они не эквивалентны. Они хотели localhostи myhostnameбыли отличны - иначе один был бы псевдонимом другого. Обратите внимание, что это не работает в IPv6, где есть только один адрес обратной связи. Этого можно избежать, используя модуль NSS, упомянутый в потоке, поскольку он может быть более гибким, чем / etc / hosts, и возвращать разные канонические имена, несмотря на то, что они имеют одинаковый IP-адрес. Я знаю это, потому что моя система настроена с использованием такого модуля NSS .
sourcejedi
46

Подводя итог информации, связанной с:

  • Это (спорным) полезно иметь запись в вашем /etc/hostsпереводе полное доменное имя машины в ее постоянный IP - адрес.
  • debian-installerи, в частности, его netcfgкомпонент, в настоящее время (по крайней мере, до марта 2013 года) создает эту запись.
  • Если неизвестно, что у машины есть постоянный IP-адрес, установщик Debian все еще хочет, чтобы у него была такая запись.
  • Адрес 127.0.1.1использует интерфейс обратной связи , на который отвечает ваш собственный компьютер, точно так же, как 127.0.0.1это отдельная запись, /etc/hostsкоторую можно рассматривать отдельно от 127.0.0.1необходимости и в случае необходимости.

Томас Худ объясняет добавление этой записи следующим образом:

[Это] будет гарантировать , что если имя хост UNIX будет решено , то он всегда будет свое каноническим именем хост

но:

В долгосрочной перспективе имя хоста UNIX вообще не следует помещать в / etc / hosts.

einpoklum
источник
.. и так... ? я должен использовать 127.0.0.1 для моего fdqn? или 127.0.1.1? или статический лан ip?
Realtebo
1
@realtebo: 1. Это полезно, и поэтому оно добавлено установщиком. 2. Здесь нет необходимости; и это актуально только тогда, когда ваше полное доменное имя не имеет постоянного адреса.
einpoklum
9

Мне самому было любопытно, и мне не понравился любой другой ответ, потому что они, казалось, не отвечали тому, что я искал по крайней мере.

Ответ: Оглядываясь назад на этот документ, кажется, что Томас заявляет, что дает ему еще один выделенный ip для обратной петли, что делает его каноническим.

Оба указывают на вашу петлю. Использование следующего 127.0.1.1 - это фактический IP-адрес в обратной петле, тогда как 127.0.0.1 - это либо само устройство, либо другой ip в обратной петле. Оба попадают в одну подсеть, представляющую петлю, но разделяются ip. Они эквивалентны днс, но разделены из-за выделенного ip.

Дело в том, что вы можете разместить все свои записи в одной строке, как эта

127.0.0.1 localhost localhost.domain www.myfakednsname.com myakednsname.com 

Если ваше имя хоста является локальным, то есть глобальная DNS-запись в Интернете не сопоставлена ​​с реальным IP-адресом в Интернете, тогда в этом случае Томас говорил, что вам НЕОБХОДИМО иметь вторую строку ввода, как это, чтобы посвятить ее (канонической).

127.0.0.1 localhost localhost.localdomain
127.0.1.1 myfakednsname
Брайан Томас
источник
Справедливости ради, после того, как я наконец скомпоновал это так, чтобы это имело смысл для меня, я вижу, что именно это einpoklum и пытался объяснить, как это выглядит задним числом.
Брайан Томас
Хорошо, отрицательный голос, не знаю почему. Я все еще верю, что это ЛУЧШИЙ ответ, или я бы не сказал, после приземления здесь. оригинальный ответ помог, но не охватил все детали. Я бы пошел с этим.
Брайан Томас