Як встановити повноцінне ім'я хоста на CentOS 7.0?


19

Як встановити повноцінне ім'я хоста на CentOS 7.0?

Я бачив кілька публікацій в Інтернеті, наприклад, використовуючи:

$ sudo hostnamectl set-hostname nodename.domainname

Однак запуск доменного імені нічого не повертає:

$ domainname
(none)

Також:

$ hostname
nodename.domainname

Однак,

$ hostname -f
hostname: Name or service not known
$ hostname -d
hostname: Name or service not known

Деякі налагодження:

$ cat /etc/hostname
nodename.domainname

$ grep ^hosts /etc/nsswitch.conf
hosts:      files dns

Відповіді:


30

Щоб встановити ім'я хоста , використовуйте hostnamectl, але тільки з ім'ям хоста, як це:

hostnamectl set-hostname nodename


Щоб встановити (DNS)/etc/hosts файл редагування доменного імені та переконайтесь, що:

  1. Існує лінія <machine's primary, non-loopback IP address> <hostname>.<domainname> <hostname>є
  2. Немає інших рядків з <some IP> <hostname>, і це включає рядки з адресами 127.0.0.1та ::1(IPv6).

Зауважте, що якщо ви не використовуєте NIS, (none)це правильний вихід під час виконання domainnameкоманди.

Щоб перевірити, чи правильно встановлено ваше доменне ім'я DNS, скористайтеся dnsdomainnameкомандою та перевірте вихід hostnamevs hostname -f(FQDN).


Домен NIS проти DNS

Це питання збентежило мене, коли я вперше натрапив на нього. Здається, domainnameкомандування передувало популярності Інтернету. Замість доменного імені DNS воно показує або встановлює доменне ім’я NIS (мережева інформаційна служба), відоме як YP (Yellow Pages) (група комп'ютерів, які надають послуги, що надаються головним сервером NIS). Ця команда просто відображає ім'я, повернене getdomainname(2)стандартною функцією бібліотеки. ( nisdomainnameі ypdomainnameальтернативні назви для цієї команди.)

Відображення доменного імені FQDN або DNS

Для перевірки доменного імені DNS (Internet) слід запустити dnsdomainnameкоманду або hostnameз -d, --domainпараметрами. (Зверніть увагу, що dnsdomainnameкоманду не можна використовувати для встановлення доменного імені DNS - вона використовується лише для її відображення.)

Щоб відобразити FQDN (повністю кваліфіковане ім'я домену) системи, запустіть hostnameз -f, --fqdn, --longпараметрами (аналогічно, цю команду не можна використовувати для встановлення частини доменного імені).

Вищезазначені команди використовують роздільник системи (реалізований gethostbyname(3)функцією зі стандартної бібліотеки, як визначено POSIX) для визначення імені домену DNS та FQDN.

Дозвіл імені

У сучасних операційних системах, таких як RHEL 7, hostsзапис /etc/nsswitch.confвикористовується для вирішення імен хостів. У вашому апараті CentOS 7 ця лінія налаштована як (за замовчуванням для CentOS 7):

hosts:      files dns

Це означає, що коли функції резолютора шукають імена хостів або IP-адресу, вони спочатку перевіряють запис у /etc/hosts файлі, а потім спробують DNS-сервери, які перераховані в списку /etc/resolv.conf.

Під час запуску hostname -fдля отримання FQDN хоста функції Resolver намагаються отримати FQDN для імені хоста системи. Якщо хост не вказаний у /etc/hostsфайлі або на відповідному сервері DNS, спроба завершується невдалою та hostnameповідомляє про це Name or service not known.

Коли hostname -dзапускається для отримання доменного імені, виконуються ті ж самі операції, і частина доменного імені визначається за допомогою зняття частини імені хоста та першої крапки з FQDN.

Налаштуйте доменне ім’я

1. Оновіть відповідний сервер імен DNS

У моєму випадку я вже додав запис для моєї нової машини CentOS 7 на сервері DNS для моєї локальної локальної мережі, тому коли FQDN не був знайдений у /etc/hostsфайлі, коли я працював hostnameіз параметром -dабо -f, місцеві служби DNS змогли повністю вирішити FQDN для мого нового імені хоста.

2. Використовуйте /etc/hostsфайл

Якщо сервер DNS не був налаштований, повне кваліфіковане доменне ім’я можна вказати у /etc/hostsфайлі. Найпоширеніший спосіб зробити це - вказати первинну IP-адресу системи, а потім її FQDN та коротке ім'я хоста. Наприклад,

172.22.0.9  nodename.domainname nodename

Уривок зі hostnameсторінки людини

Ви не можете змінити FQDN за допомогою hostnameабо dnsdomainname.

Рекомендований спосіб встановлення FQDN - зробити так, щоб ім'я хоста було псевдонімом повноцінного імені за допомогою /etc/hosts,DNS або NIS. Наприклад, якщо ім'я хоста було "ursula", у нього може бути рядок, у /etc/hostsякому написано:

27.0.1.1    ursula.example.com ursula

Технічно: FQDN - це ім'я getaddrinfo (3), яке повертається для імені хоста, поверненого gethostname (2). Ім'я домену DNS - це частина після першої крапки.

Тому залежно від конфігурації резолютора (як правило, в /etc/host.conf) залежить, як ви можете його змінити. Зазвичай файл хостів аналізується перед DNS або NIS, тому найчастіше змінювати FQDN в /etc/hosts.


Дякую за вашу відповідь. Я оновив це питання - на жаль, hostname -fкоманда не працює на моєму CentOS VM.
Кріс Сноу

@SHC Чи можете ви відредагувати своє запитання, щоб також містити вміст /etc/hostnameта вихідний текст grep ^hosts: /etc/nsswitch.conf? Я не знаю багато про Network Manager , але я також зауважив , що моя /etc/NetworkManager/NetworkManager.confмістить рядок в своєму [keyfile]розділі: hostname=<nodename>.
Ентоні Г - справедливість для Моніки

1
@SHC Я з тих пір досліджував цю проблему і докорінно переглянув свою відповідь; Тепер він повинен вирішити ваше питання більш всебічно.
Ентоні Г - справедливість для Моніки

Захист до цієї відповіді суперечить тілу. hostnamectl set-hostname nodename.domainnameце НЕ встановлено ім'я домену DNS (і це не те, що він встановлює ім'я домену NIS або).
sourcejedi

@sourcejedi У мене немає часу, але я спробую уточнити свою відповідь, коли отримаю можливість.
Ентоні Г - справедливість для Моніки

1

У Centos7, що використовує nmtui для встановлення імені хоста та надання формату nodename.domainname / FQDN, дає стійкі результати. ім'я хоста [d / f / s] - всі правильні очікувані результати. Він не зберігається в /etc/resolv.conf АБО / etc / hosts. Але FQDN записується в / etc / hostname як окремий рядок.


0

Для мене файл / etc / hostname містив FQDN замість імені хоста (наприклад, ім'я хоста замість hostname.example.com). Після того, як я видалив домен з імені хоста в / etc / hostname, команда 'hostname -f' працювала нормально.

Я думаю, що це було введено під час встановлення CentOS 7 VM. Я повинен був ввести лише ім'я хоста, а не повноцінне доменне ім’я.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.