Вопрос или проблема
Это может быть немного дилетантским вопросом, но я посмотрел на /etc/hosts в моей новой установке Xubuntu и увидел это:
127.0.0.1 localhost
127.0.1.1 myhostname
На большинстве ‘никсов, которые я использовал, вторая строка опускается, и если я хочу добавить свое имя хоста в файл hosts, я просто сделаю так:
127.0.0.1 localhost myhostname
Есть ли какая-то практическая разница между этими двумя файлами?
Существенной разницы между ними нет; 127/8
(например, 127.0.0.0
=> 127.255.255.255
) все связаны с интерфейсом обратной связи.
Причина документирована в руководстве Debian в Ch. 5 Network Setup – 5.1.1. Разрешение имен хостов.
В конечном счете, это обходной путь ошибки; оригинальный отчет 316099.
Подведем итоги информации из ссылки:
- Это (спорно) полезно иметь в вашем
/etc/hosts
запись, переводящую полное доменное имя машины в ее постоянный IP-адрес. debian-installer
, и конкретнее, его компонентnetcfg
, на данный момент (по крайней мере, до марта 2013) создает эту запись.- Если машина, как известно, не имеет постоянного IP-адреса, debian-installer все равно хочет, чтобы у нее была такая запись.
- Адрес
127.0.1.1
использует интерфейс обратной связи, отвечаемый вашей собственной машиной, подобно127.0.0.1
, но является отдельной записью в/etc/hosts
, которую можно рассматривать отдельно от127.0.0.1
, если/когда это необходимо.
Томас Худ объясняет добавление этой записи следующим образом:
[Это] гарантирует, что если UNIX имя хоста разрешено, то оно всегда будет своим собственным каноническим именем хоста.
но:
В долгосрочной перспективе UNIX имя хоста не должно быть помещено в /etc/hosts вообще.
Я сам был любопытен и мне не понравился ни один из других ответов, так как они, казалось, не отвечали на то, что я искал, по крайней мере.
Ответ: Посмотрев обратно на этот документ, почти кажется, что Томас утверждал, что “предоставление ему другого выделенного IP на интерфейсе обратной связи позволяет ему быть каноническим”.
Оба указывают на ваш интерфейс обратной связи. Использование следующего
127.0.1.1
является фактическим IP на интерфейсе обратной связи, тогда как
127.0.0.1
это либо само устройство, либо другой IP на интерфейсе обратной связи. Оба оказываются в одной подсети, представляя интерфейс обратной связи, но разделены по IP.
Они равнозначны с точки зрения DNS, но разделены из-за наличия выделенного 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
Я прочитал несколько ответов и, честно говоря, немного запутался.
Сначала я пытался понять, что такое каноническое имя хоста здесь.
Что я могу сказать, так это то, что @cmroanirgo прав, говоря, что на моем ноутбуке с Ubuntu при вызове
hostname --fqdn
с /etc/hosts
, настроенным, как это,
127.0.0.1 localhost
127.0.1.1 laptop
возвращает laptop
, тогда как изменение файла, как следует,
127.0.0.1 localhost laptop
возвращает localhost
.
Какое влияние это может иметь, я не имею понятия, кроме того факта, что если у вас есть программное обеспечение, которое связывается с именем хоста, и вам нужно общаться с ним внутри вашей машины, не ожидайте, что сможете использовать имя хоста “localhost” для выполнения работы, в этой настройке, так как они в конечном итоге разрешают два отдельных различных адреса.
Античный вопрос, но добавлю другой ответ. Если вы используете строку:
127.0.1.1 my_fqdn my_short_name
например
127.0.1.1 server.domain.com server
(по крайней мере, на Ubuntu) Apache будет автоматически использовать ваше правильное имя хоста без необходимости вводить его явно в конфигурации Apache. Это, вероятно, похоже на комментарий в ответе выше.
Команды hostname --fqdn
и dnsdomainname
из GNU inetutils вычисляют полное доменное имя (FQDN) системы, преобразуя системное имя хоста в каноническое имя.
Один из способов заставить это работать так, как задумано, — запись в /etc/hosts
, например
127.0.1.1 ursula.example.com ursula
Вышеуказанная запись делает ursula
псевдонимом ursula.example.com
. Если ваше имя хоста (обычно настроенное в /etc/hostname
) — ursula
, тогда ваше FQDN будет вычисляться как ursula.example.com
, а ваше доменное имя DNS как example.com
.
Вторая цель этой записи очевидно заключается в том, чтобы как имя хоста, так и FQDN разрешались в интернет-адрес, связанный с интерфейсом обратной связи.
Обратите внимание, что вы не можете иметь два канонических имени для одного адреса, и 127.0.0.1
уже занят для localhost
; поэтому некоторые системные конфигурации выбирают 127.0.1.1
для систем без статического интернет-адреса.
Строка из вашего примера предоставляет только каноническое имя, без какого-либо псевдонима. В таком случае ваше FQDN это само имя хоста. Вы не должны использовать
127.0.0.1 localhost myhostname
потому что это укажет GNU inetutils, что ваше FQDN — localhost
.
.
Ответ или решение
Ваш вопрос о том, почему в файле /etc/hosts вашего нового Xubuntu установка имя узла связано с адресом 127.0.1.1, а не с 127.0.0.1, на первый взгляд может показаться незначительным. Однако, чтобы понять различия, необходимо детально рассмотреть механизмы работы и настройки хостов в UNIX-системах.
Теория
Во-первых, важно осознать, что адресное пространство 127/8, которое охватывает диапазон от 127.0.0.0 до 127.255.255.255, зарезервировано для интерфейса обратной петли (loopback) и не должно покидать локальный узел. Наиболее часто используемый адрес из этого диапазона — 127.0.0.1, который традиционно связывается с локальным хостом и используется для тестирования и задач внутренней сети.
Разница в использовании 127.0.1.1 вместо 127.0.0.1 в вашем примере связана с конфигурацией, принятой в таких дистрибутивах как Debian и его производные (например, Ubuntu), где такая запись служит как временное решение различных проблем с разрешением имен хостов.
Пример
Когда машина запускается, она должна правильно разрешать своё собственное имя хоста для обеспечения корректной работы сетевых сервисов и приложений. В случае, если у машины нет постоянного внешнего IP-адреса, как это может быть на локальном рабочем столе или в тестовом окружении, делает смысл сопоставить внутреннее имя хоста с адресом в области loopback.
Типичная строка в /etc/hosts выглядит так:
127.0.0.1 localhost
127.0.1.1 myhostname
Здесь важно понимать, что обе записи относятся к интерфейсу loopback, что позволяет системе всегда иметь возможность разрешать своё имя хоста на внутренний адрес, не затрагивая при этом стандартную запись для localhost.
Применение
Такое разнесение может избежать системных конфликтов в программах, которые полагаются на разрешение полного именования (FQDN) системы. Например, команда hostname --fqdn
возвращает имя системы, которое ссылается на внутренний IP адрес, в данном случае 127.0.1.1, если запись указана именно так. Это может оказать существенное влияние на работу программных пакетов, которые зависят от разрешения сетевых имен, таких как веб-сервер Apache.
Использование разных адресов для localhost
и имени хоста в /etc/hosts дает возможность более точно управлять локальными сетевыми настройками, а также позволяет сетевым сервисам понимать, когда они обращаются к себе, а когда к соседним сервисам, запущенным на том же устройстве.
В долгосрочной перспективе рекомендуется избавиться от ручной записи имени хоста в /etc/hosts, если возможно, и использовать более адекватные механизмы разрешения имен через DNS-сервисы или внутренние DNS-записи для крупных сетевых инфраструктур, особенно если требуется более сложная маршрутизация и управление сетевым окружением.
Эта часть конфигурации, хотя и может показаться тривиальной, играет ключевую роль в управлении рабочими нагрузками и обеспечении правильного взаимодействия сетевых компонентов в контексте, где требуются надежность и предсказуемое поведение систем.