
Как задать полное имя хоста в 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
файл и убедитесь, что:
<machine's primary, non-loopback IP address> <hostname>.<domainname> <hostname>
Там есть линия- Других строк с НЕТ
<some IP> <hostname>
, включая строки с адресами127.0.0.1
и::1
(IPv6).
Обратите внимание, что если вы не используете NIS, (none)
это правильный вывод при выполнении domainname
команды.
Чтобы проверить правильность настройки вашего доменного имени DNS, используйте dnsdomainname
команду и проверьте вывод hostname
vs 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
запуске для получения доменного имени выполняются те же операции, а часть доменного имени определяется путем удаления части имени хоста и первой точки из полного доменного имени.
Настройте доменное имя
Обновите соответствующий сервер имен DNS.
В моем случае я уже добавил запись для моей новой машины CentOS 7 на DNS-сервере моей локальной сети, поэтому, когда
/etc/hosts
при запускеhostname
с параметром-d
или в файле не было найдено полное доменное имя-f
, локальные службы DNS смогли полностью разрешить полное доменное имя для моего нового имени хоста.Использовать
/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
командой.