Как задать полное имя хоста в CentOS 7.0?

Как задать полное имя хоста в CentOS 7.0?

Как задать полное имя хоста в CentOS 7.0?

Я видел несколько постов в Интернете, например, с использованием:

$ sudo hostnamectl set-hostname nodename.domainname

Однако запуск 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

решение1

Чтобы установитьимя хоста делатьиспользуйте 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являются альтернативными именами для этой команды.)

Отображение полного доменного имени или DNS-имени домена

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

Для отображенияFQDN (полное доменное имя)системы, запустите 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для получения FQDN хоста функции распознавателя пытаются получить FQDN для имени хоста системы. Если хост не указан в файле /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.

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

127.0.1.1    ursula.example.com ursula

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

Поэтому это зависит от конфигурации резолвера (обычно в /etc/host.conf), как вы можете изменить его. Обычно файл hosts анализируется до DNS или NIS, поэтому чаще всего меняют FQDN в /etc/hosts.

решение2

На Centos7 использование nmtui для установки имени хоста и предоставление формата nodename.domainname / FQDN дает согласованные результаты. hostname [d/f/s] все дает правильные ожидаемые результаты. Он не хранится в /etc/resolv.conf ИЛИ /etc/hosts. Но FQDN записывается в /etc/hostname как однострочная запись.

решение3

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

Думаю, это появилось, когда я установил виртуальную машину CentOS 7. Мне следовало ввести только имя хоста, а не полное доменное имя.

решение4

Аналогичная проблема, как у OP (RHEL7), и решена путем удаления завершающего пробела из короткого имени хоста, указанного в /etc/hostnameфайле. За которым следует systemctl restart systemd-hostnamed. Теперь отображается полное доменное имя с hostname -fкомандой.

Связанный контент