Как установить полное имя хоста на 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 (желтые страницы) (группа компьютеров, услуги которых предоставляются главным сервером NIS). Эта команда просто отображает имя, возвращаемое getdomainname(2)стандартной библиотечной функцией. ( nisdomainnameи ypdomainnameявляются альтернативными именами для этой команды.)

Показать полное доменное имя или DNS-имя домена

Чтобы проверить доменное имя DNS (Интернет), вы должны запустить dnsdomainnameкоманду или hostnameс -d, --domainопциями. (Обратите внимание, что dnsdomainnameкоманду нельзя использовать для установки имени домена DNS - она ​​используется только для его отображения.)

Чтобы отобразить полное доменное имя (полное доменное имя) системы, запустите hostnameс -f, --fqdn, --longпараметрами (аналогично, эту команду нельзя использовать для установки части имени домена).

Приведенные выше команды используют системный распознаватель (реализованный gethostbyname(3)функцией из стандартной библиотеки, как указано в POSIX) для определения доменного имени DNS и полного доменного имени.

Разрешение имени

В современных операционных системах, таких как RHEL 7, hostsзапись /etc/nsswitch.confиспользуется для разрешения имен хостов. На вашем компьютере с CentOS 7 эта строка настроена как (по умолчанию для CentOS 7):

hosts:      files dns

Это означает, что когда функции распознавателя ищут имена хостов или IP-адрес, они сначала проверяют наличие записи в /etc/hosts файле, а затем пробуют DNS-сервер (ы), которые перечислены в /etc/resolv.conf.

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

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

Настройте доменное имя

1. Обновите соответствующий DNS-сервер

В моем случае я уже добавил запись для моей новой машины CentOS 7 на DNS-сервере для моей локальной сети, поэтому, когда в /etc/hostsфайле не было найдено полное доменное имя при запуске hostnameс параметром -dили -f, локальные службы DNS могли полностью разрешите полное доменное имя моего нового имени хоста.

2. Используйте /etc/hostsфайл

Если DNS-сервер не был настроен, в /etc/hostsфайле можно указать полное доменное имя . Наиболее распространенный способ сделать это - указать основной IP-адрес системы, затем полное доменное имя и его короткое имя хоста. Например,

172.22.0.9  nodename.domainname nodename

Выдержка из hostnameсправочной страницы

Вы не можете изменить полное доменное имя с помощью hostnameили dnsdomainname.

Рекомендуемый метод установки полного доменного имени - сделать имя хоста псевдонимом для полного имени, используя /etc/hosts,DNS или NIS. Например, если имя хоста было «ursula», можно было бы написать строку /etc/hosts:

27.0.1.1    ursula.example.com ursula

Технически: полное доменное имя - это имя, которое getaddrinfo (3) возвращает для имени хоста, возвращаемого gethostname (2). DNS-имя домена является частью после первой точки.

Поэтому от конфигурации преобразователя (обычно в /etc/host.conf) зависит, как вы можете его изменить. Обычно файл hosts анализируется перед DNS или NIS, поэтому чаще всего менять полное доменное имя в /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. Но полное доменное имя записывается в / etc / hostname в виде однострочной записи.

Понн Дк
источник
0

Для меня файл / etc / hostname содержал полное доменное имя вместо имени хоста (например, имя хоста вместо hostname.example.com). Как только я удалил домен из имени хоста в / etc / hostname, команда 'hostname -f' работала нормально.

Я думаю, что это было введено, когда я установил CentOS 7 VM. Я должен был ввести только имя хоста, а не полное доменное имя.

KenR
источник