
За несколько лет использования 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, то я должен быть прав.