web-dev-qa-db-fra.com

Comment définir le nom d'hôte complet sur CentOS 7.0?

Comment définir le nom d'hôte complet sur CentOS 7.0?

J'ai vu quelques articles en ligne par exemple en utilisant:

$ Sudo hostnamectl set-hostname nodename.domainname

Cependant, l'exécution de nom de domaine ne renvoie rien:

$ domainname
(none)

Aussi:

$ hostname
nodename.domainname

Cependant,

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

Quelques sorties de débogage:

$ cat /etc/hostname
nodename.domainname

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

Pour définir le nom d'hôte do utilisez hostnamectl, mais uniquement avec le nom d'hôte, comme ceci:

hostnamectl set-hostname nodename


Pour définir le (DNS) nom de domaine , éditez le fichier /etc/hosts Et assurez-vous que:

  1. Il y a une ligne <machine's primary, non-loopback IP address> <hostname>.<domainname> <hostname>
  2. Il n'y a AUCUNE autre ligne avec <some IP> <hostname>, Et cela inclut les lignes avec les adresses 127.0.0.1 Et ::1 (IPv6).

Notez que sauf si vous utilisez NIS, (none) Est la sortie correcte lors de l'exécution de la commande domainname.

Pour vérifier si votre nom de domaine DNS est correctement défini, utilisez la commande dnsdomainname et vérifiez la sortie de hostname par rapport à hostname -f (FQDN).


NIS vs domaine DNS

Ce problème m'a confondu lorsque je l'ai rencontré pour la première fois. Il semble que la commande domainname soit antérieure à la popularité d'Internet. Au lieu du nom de domaine DNS, il affiche ou définit le système NIS (Network Information Service) aka YP (Pages jaunes) nom de domaine (un groupe d'ordinateurs dont les services sont fournis par un serveur NIS maître). Cette commande affiche simplement le nom renvoyé par la fonction de bibliothèque standard getdomainname(2). (nisdomainname et ypdomainname sont des noms alternatifs pour cette commande.)

Afficher le nom de domaine FQDN ou DNS

Pour vérifier le nom de domaine [~ # ~] dns [~ # ~] (Internet), vous devez exécuter la commande dnsdomainname ou hostname avec les options -d, --domain. (Notez que la commande dnsdomainname ne peut pas être utilisée pour définir le nom de domaine DNS - elle est uniquement utilisée pour l'afficher.)

Pour afficher le FQDN (nom de domaine complet) du système, exécutez hostname avec les options -f, --fqdn, --long (De même , cette commande ne peut pas être utilisée pour définir la partie du nom de domaine).

Les commandes ci-dessus utilisent le résolveur du système (implémenté par la fonction gethostbyname(3) de la bibliothèque standard, comme spécifié par POSIX) pour déterminer le nom de domaine DNS et le FQDN.

Résolution de nom

Dans les systèmes d'exploitation modernes tels que RHEL 7, l'entrée hosts dans /etc/nsswitch.conf Est utilisée pour résoudre les noms d'hôte. Dans votre machine CentOS 7, cette ligne est configurée comme (par défaut pour CentOS 7):

hosts:      files dns

Cela signifie que lorsque les fonctions du résolveur recherchent des noms d'hôtes ou des adresses IP, elles vérifient d'abord une entrée dans le /etc/hosts fichier et essaient ensuite le serveur DNS ( s) qui sont répertoriés dans /etc/resolv.conf.

Lors de l'exécution de hostname -f Pour obtenir le nom de domaine complet d'un hôte, les fonctions du résolveur tentent d'obtenir le nom de domaine complet du nom d'hôte du système. Si l'hôte n'est pas répertorié dans le fichier /etc/hosts Ou par le serveur DNS approprié, la tentative échoue et hostname signale que Name or service not known.

Lorsque hostname -d Est exécuté pour obtenir le nom de domaine, les mêmes opérations sont effectuées et la partie nom de domaine est déterminée en supprimant la partie nom d'hôte et le premier point du nom de domaine complet.

Configurer le nom de domaine

1. Mettez à jour le serveur de noms DNS approprié

Dans mon cas, j'avais déjà ajouté une entrée pour ma nouvelle machine CentOS 7 dans le serveur DNS de mon réseau local, donc lorsque le nom de domaine complet n'a pas été trouvé dans le fichier /etc/hosts Lorsque j'ai exécuté hostname avec l'option -d ou -f, les services DNS locaux ont pu résoudre complètement le nom de domaine complet pour mon nouveau nom d'hôte.

2. Utilisez le fichier /etc/hosts

Si le serveur DNS n'a pas été configuré, le nom de domaine complet peut être spécifié dans le fichier /etc/hosts. La façon la plus courante de procéder consiste à spécifier l'adresse IP principale du système, suivie de son nom de domaine complet et de son nom d'hôte court. Par exemple.,

172.22.0.9  nodename.domainname nodename

Extrait de la page de manuel hostname

Vous ne pouvez pas modifier le nom de domaine complet avec hostname ou dnsdomainname.

La méthode recommandée pour définir le nom de domaine complet consiste à faire du nom d'hôte un alias pour le nom complet à l'aide de /etc/hosts, DNS ou NIS. Par exemple, si le nom d'hôte était "ursula", on pourrait avoir une ligne dans /etc/hosts Qui se lit:

27.0.1.1    ursula.example.com ursula

Techniquement: le nom de domaine complet est le nom renvoyé par getaddrinfo (3) pour le nom d'hôte renvoyé par gethostname (2). Le nom de domaine DNS est la partie après le premier point.

Par conséquent, cela dépend de la configuration du résolveur (généralement dans /etc/Host.conf) Comment vous pouvez le changer. Habituellement, le fichier hosts est analysé avant DNS ou NIS, il est donc plus courant de changer le FQDN dans /etc/hosts.

32
Anthony Geoghegan

Sur Centos7, l'utilisation de nmtui pour définir le nom d'hôte et fournir le format nodename.domainname/FQDN donne des résultats cohérents. le nom d'hôte [d/f/s] fournit tous les résultats attendus corrects. Il n'est pas stocké dans /etc/resolv.conf OR/etc/hosts. Mais le nom de domaine complet est écrit dans/etc/hostname sous la forme d'une entrée sur une seule ligne.

1
Ponn Dk

Pour moi, le fichier/etc/hostname contenait le FQDN au lieu du nom d'hôte (par exemple, hostname au lieu de hostname.example.com). Une fois que j'ai supprimé le domaine du nom d'hôte dans/etc/hostname, la commande 'hostname -f' a fonctionné normalement.

Je pense que cela a été introduit lors de l'installation de la machine virtuelle CentOS 7. J'aurais dû saisir uniquement le nom d'hôte, pas le nom de domaine complet.

0
KenR