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

13

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

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

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

мягкая фетровая шляпа
источник
Для чего ваша запись hosts:в /etc/nsswitch.conf?
cutrightjm
@cutrightjmhosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
fedora
1
Дубликат кросс-сайта: security.stackexchange.com/questions/158517/…
Дмитрий Григорьев

Ответы:

12

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

strace hostname
...
uname({sysname="Linux", nodename="my.hostname.com", ...}) = 0
...

На странице руководства uname syscall говорится, что syscall извлекает из ядра следующую структуру:

  struct utsname {
               char sysname[];    /* Operating system name (e.g., "Linux") */
               char nodename[];   /* Name within "some implementation-defined
                                     network" */
               char release[];    /* Operating system 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
           };

Таким образом, доменное имя происходит из системы NIS / YP, если верить комментарию. Поэтому, скорее всего, в вашей сети может быть служба NIS / YP, которая возвращает вам имя, заданное операционной системой Ubuntu.

einonm
источник
5
Это не так, см. hostname(1)Справочную страницу, которая объясняет, как имя хоста устанавливается и возвращается. Несмотря на сходство имен, доменное имя NIS / YP не имеет ничего общего с доменным именем FQDN / DNS, которое возвращается распознавателем. Если вы не настроили NIS / YP, то имя домена NIS / YP будет не задано.
боджит
Является ли "nodename" областью, которая вас волнует? Было бы в соответствии с ностальгией Unix, чтобы все еще считать IP-сети необязательными и определяемыми реализацией вещами :)
rackandboneman
5

В системе Linux есть два независимых (!) Понятия имени хоста.

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

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

rackandboneman
источник
3

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

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

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

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

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

Byte Commander
источник
Клиент DHCP действительно может отправить имя хоста на сервер или прочитать имя хоста с сервера. Большинство всего делает первое (хотя, когда имя хоста установлено на "localhost", это вряд ли будет иметь большой эффект :). Чтение имени хоста от сервера DHCP это возможно с клиентами Linux DHCP, но мое понимание было эта поддержка не всегда включена ( например ). Интересно услышать, что более свежая Fedora, кажется, делает это.
sourcejedi