Що визначає ім'я хоста 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

Відповіді:


12

hostnameПрограма виконує uname системного виклику, як можна бачити з роботи:

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

З невідомої сторінки управління системою ssscall він каже, що 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.


5
Це неправда. Перегляньте сторінку hostname(1)чоловіка, де пояснюється спосіб встановлення та повернення імені хоста. Незважаючи на схожість у імені, доменне ім’я NIS / YP не має нічого спільного з доменним іменем FQDN / DNS, яке повертається резолютором. Якщо ви не налаштували NIS / YP, то доменне ім’я NIS / YP не буде встановлено.
бодгіт

Це "nodename" поле, яке вам важливо? Було б узгоджено з ностальгією unix, як і раніше вважати IP-мережі необов'язковою та визначеною реалізацією :)
rackandboneman

5

У системі Linux є два незалежні (!) Концепції імені хоста.

Існує все, що ядро ​​вважає ім'ям локального хоста (як обробляється за допомогою системних викликів gethostname / unme та sethostname) незалежно від будь-якого підключення до мережі - ці механізми все одно існуватимуть, якби ви створили ядро ​​без можливості для мереж TCP / IP.

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


3

Ймовірно, Ubuntu підключився до Інтернету через домашній маршрутизатор під час встановлення. Для цього вона повідомила маршрутизатору своє ім’я хоста і отримала тимчасовий локальний IP.

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

Я здогадуюсь, що маршрутизатор надсилає ім'я хоста, на якому була зареєстрована оренда IP, і Fedora підбирає це.

На жаль, у мене немає жодних доказів або цитат, які б підтверджували мою відповідь, я можу просто поговорити з особистим досвідом встановлення Ubuntu в подвійному завантаженні з Windows. Тоді Ubuntu відмовився встановлювати те саме ім’я хоста під час встановлення, як і те, що я використовував у Windows, тому що він стверджував, що ім'я було присутнє в мережі. Ймовірно, у нас тут відбувається щось подібне.

Щоб переконатися, що те, що я думаю, стосується і вашої ситуації, спробуйте скасувати оренду IP-адреси в інтерфейсі налаштування вашого маршрутизатора, а потім перезавантажте Fedora. Якщо воно більше не приймає ім'я хоста Ubuntu, я маю рацію.


Дійсно, що клієнт DHCP може надіслати ім'я хоста на сервер або прочитати ім'я хоста з сервера. Більшість все робить перше (хоча, коли ім'я хоста встановлено на "localhost", це навряд чи матиме великий ефект :). Читання імені хоста з сервера DHCP можливо з клієнтами DHCP Linux, але, як я розумію, ця підтримка не завжди була включена ( наприклад, ). Цікаво почути, що останній Fedora, здається, робить це.
sourcejedi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.