Для того, чтобы установить имя хоста делать использование 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 (желтые страницы) (группа компьютеров, услуги которых предоставляются главным сервером 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./etc/hostname
и результатыgrep ^hosts: /etc/nsswitch.conf
? Я не знаю много о Network Manager , но я также заметил , что моя/etc/NetworkManager/NetworkManager.conf
содержит строку в своем[keyfile]
разделе:hostname=<nodename>
.hostnamectl set-hostname nodename.domainname
это не установлено имя домена DNS (и это не то, что он устанавливает имя домена NIS либо).На Centos7 использование nmtui для задания имени хоста и предоставление формата nodename.domainname / FQDN дает согласованные результаты. имя хоста [d / f / s] обеспечивает правильные ожидаемые результаты. Он не хранится в /etc/resolv.conf ИЛИ / etc / hosts. Но полное доменное имя записывается в / etc / hostname в виде однострочной записи.
источник
Для меня файл / etc / hostname содержал полное доменное имя вместо имени хоста (например, имя хоста вместо hostname.example.com). Как только я удалил домен из имени хоста в / etc / hostname, команда 'hostname -f' работала нормально.
Я думаю, что это было введено, когда я установил CentOS 7 VM. Я должен был ввести только имя хоста, а не полное доменное имя.
источник