Что определяет имя хоста Linux?

Что определяет имя хоста Linux?

За несколько лет использования Linux в качестве основной системы, в частности Fedora, я всегда видел, что мое имя хоста было установлено просто как "localhost", за исключением случаев, когда я подключаюсь к некоторым сетям, и оно становится моим IP. Сегодня я столкнулся со следующим поведением, которое мне трудно понять.

Я установил Ubuntu на другом разделе моего ноутбука, задав имя компьютера / имя хоста во время установки Ubuntu. Однако, когда я перезагрузился обратно в Fedora, Fedora обновила мое имя хоста на имя, которое я задал при установке Ubuntu.

Я всегда думал, что имя хоста настроено и хранится в разделе установки дистрибутива, и действительно, содержимое /etc/hostname в Fedora по-прежнему читается как "localhost.localdomain", но запуск команды hostnameпоказывает новое имя хоста. Обе установки совместно используют загрузочный раздел efi, но в остальном являются дискретными. Мне интересно, откуда и почему установка Fedora считывает новое имя хоста?

решение1

Программа hostnameвыполняет системный вызов uname, как можно увидеть из запуска:

strace hostname
...

e="Linux", nodename="my.hostname.com", ...}) = 0 ... На странице руководства uname syscall говорится, что syscall извлекает из ядра следующую структуру:

  struct utsname {
               char sysname[];    /* Operating system name (e. */
               char nodename[];   /* Name within "some implementation-defined
                                     network" */
               char release[ystem release (e.g., "2.6.28") */
               char version[];    /* Operating system version */
               char machine[];    /* Hardware identifier */
           #ifdef _GNU_SOURCE
               char domainname[]; /* NIS or YP domain name */
           #endif
           };

Итак, доменное имя происходит от NISystem, если верить комментарию. Так что более чем вероятно, что служба may/YP на вашем nhat возвращает вам имя, установленное ОС Ubuntu.

решение2

В системе Linux существуют две независимые(!) концепции имени хоста.

Существует то, что ядро ​​считает локальным именем хоста (что обрабатывается системными вызовами gethostname/uname и sethostname), независимо от какого-либо сетевого подключения — эти механизмы все равно будут существовать, если вы создадите ядро ​​без поддержки сетей TCP/IP.

Существует одно или несколько имен хостов, которые фактически подключены к адресам TCP/IP (или другому сетевому стеку — не все сети в мире используют IP!), которые есть у хоста, и они обрабатываются в пользовательском пространстве функциями библиотеки разрешения имен (часть libc), которые определяют такое имя, интерпретируя источники (локальный файл /etc/hosts, DNS, NIS...) в соответствии с правилами, которые вы им задаете в соответствующих файлах конфигурации (/etc/nsswitch.conf, /etc/host.conf и т. д.).

решение3

Вероятно, Ubuntu подключился к интернету через ваш домашний маршрутизатор во время установки. Для этого он сообщил маршрутизатору свое имя хоста и получил временный локальный IP.

Когда вы теперь перезагрузитесь в Fedora, она подключится к тому же маршрутизатору, чтобы получить свой IP-адрес, но старая аренда, созданная для Ubuntu, все еще действительна. Поскольку это та же машина с той же сетевой картой и тем же аппаратным MAC-адресом, она будет повторно использовать ту же аренду.

Я предполагаю, что маршрутизатор отправляет имя хоста, на котором была зарегистрирована аренда IP-адреса, а Fedora его подхватывает.

К сожалению, у меня нет доказательств или ссылок, подтверждающих мой ответ, я могу говорить только о личном опыте установки Ubuntu в режиме двойной загрузки с Windows. Тогда Ubuntu отказывалась устанавливать то же имя хоста во время установки, что и то, которое я использовал в Windows, потому что утверждала, что это имя уже присутствует в сети. Вероятно, у нас здесь происходит что-то похожее.

Чтобы проверить, применимо ли то, что я предполагаю, к вашей ситуации, попробуйте отменить аренду IP в интерфейсе конфигурации маршрутизатора, а затем перезагрузить Fedora. Если он больше не принимает имя хоста Ubuntu, то я должен быть прав.

Связанный контент