Bind n'écoute que sur localhost sous CentOS 7

Rédigé par Nicolas Sulek Aucun commentaire
Classé dans : Services réseaux, Système Mots clés : aucun
Malgré une configuration correcte de Bind, il peut arriver qu'il n'écoute que sur localhost.
Pourtant un redémarrage du service, avec systemct restart named, le fera bien écouter sur toutes les interfaces...

Ce problème est en fait dû au temps de démarrage des interfaces réseaux, ce que l'on peut vérifier avec journalctl. On verra alors les message d'activation des interfaces après le démarrage de Bind.

Identification du problème

Dans la définition du service named :
[Unit]
Description=Berkeley Internet Name Domain (DNS)
Wants=nss-lookup.target
Wants=named-setup-rndc.service
Before=nss-lookup.target
After=network.target
After=named-setup-rndc.service

[Service]
Type=forking
EnvironmentFile=-/etc/sysconfig/named
Environment=KRB5_KTNAME=/etc/named.keytab
PIDFile=/run/named/named.pid

ExecStartPre=/bin/bash -c 'if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z /etc/named.conf; else echo "Checking of zone files is disabled"; fi'
ExecStart=/usr/sbin/named -u named $OPTIONS
ExecReload=/bin/sh -c '/usr/sbin/rndc reload > /dev/null 2>&1 || /bin/kill -HUP $MAINPID'
ExecStop=/bin/sh -c '/usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID'
PrivateTmp=true

[Install]
WantedBy=multi-user.target
on peut constater que Bind démarre après que le réseau soit démarré (After=network.target), or, cette cible n'implique pas que le réseau est opérationnel.

C'est la cible network-online.target qui a ce rôle.

Définition de la nouvelle cible

Pour corriger ce soucis, il suffit de surcharger la définition du service named :
systemctl edit named
Dans l'éditeur de texte, indiquer :
[Unit]
After=network-online.target
Cela va créer un fichier /etc/systemd/system/named.service.d/override.conf surchargeant les valeurs par défaut de l'unité.

Puis il faut redémarrer le service avec :
systemctl daemon-reload 
systemctl restart named
On peut vérifier que notre modification a bien été prise en compte avec :
systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/named.service.d
           └─override.conf
   Active: active (running) since Wed 2016-04-27 08:04:46 CEST; 4s ago
  Process: 1358 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 1443 ExecStart=/usr/sbin/named -u named $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 1441 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z /etc/named.conf; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
 Main PID: 1446 (named)
   CGroup: /system.slice/named.service
           └─1446 /usr/sbin/named -u named
On constate que le fichier override.conf est bien pris en compte.

Les commentaires sont fermés.