Table des matières

Comment éviter les conflits entre dnsmasq et systemd-resolved ?

Le problème : si on installe dnsmasq comme serveur DNS pour un réseau local, dnsmasq écoute sur le port 53 qui est déjà utilisé par systemd-resolved.

Arrêter simplement systemd-resolved puis le redémarrer après l'exécution de dnsmasq, résout ce problème mais il revient après un redémarrage : systemd-resolved est démarré d'abord et dnsmasq ne démarre pas car le port 53 est déjà utilisé.

Comment faire comprendre à systemd-resolved qu'il ne doit pas démarrer l'écoute et donc conserver le port 53 pour une utilisation par dnsmasq ?

Il est plus intéressant de savoir comment les deux services peuvent fonctionner ensemble. Peuvent-ils travailler côte à côte ou ne sont-ils résolus que par systemd si l'on utilise dnsmasq ?

Voici la solution pour (X)Ubuntu 18.04 Bionic.

Pré-requis

Première étape

Autres étapes

  1. Désactivez l'écoute sur le port 53 pour systemd-resolved (ne touchez pas à /etc/systemd/resolved.conf, car il peut être écrasé lors de la mise à niveau). Pour cela,
    • créez le répertoire

      ...@...:~$ sudo mkdir /etc/systemd/resolved.conf.d

    • créez avec les droits d'administration le fichier /etc/systemd/resolved.conf.d/noresolved.conf :
      /etc/systemd/resolved.conf.d/noresolved.conf
      [Resolve]
      DNSStubListener=no
  2. Redémarrez systemd-resolved :

    ...@...:~$ sudo systemctl restart systemd-resolved.service

  3. Supprimez et recréez /etc/resolv.conf 1) :

    ...@...:~$ sudo rm /etc/resolv.conf
    ...@...:~$ sudo touch /etc/resolv.conf

  4. Pour désactiver l'écrasement de /etc/resolv.conf par NM, éditez avec les droits d'administration le fichier /etc/NetworkManager/conf.d/disableresolv.conf :
    /etc/NetworkManager/conf.d/disableresolv.conf
    [main]
    dns=none
  5. Redémarrez NetworkManager :

    ...@...:~$ sudo systemctl restart NetworkManager.service

  6. Pour que dnsmasq utilise resolv.conf de NM, éditez avec les droits d'administration le fichier /etc/dnsmasq.d/nmresolv.conf :
    /etc/dnsmasq.d/nmresolv.conf
    resolv-file=/var/run/NetworkManager/resolv.conf
  7. Créez avec les droits d'administration le fichier /etc/dnsmasq.d/mondns.conf pour y écrire vos réglages dnsmasq, par exemple :
    /etc/dnsmasq.d/mondomaine.conf
    address=/pc1.mondomaine/192.168.0.1
    address=/framboise.mondomaine/192.168.0.31
    address=/framboise4.mondomaine/192.168.0.32
  8. redémarrez dnsmasq :

    ...@...:~$ sudo systemctl restart dnsmasq

  9. Pour utiliser dnsmasq pour la résolution, éditez avec les droits d'administration le fichier /etc/resolv.conf :
    /etc/resolv.conf
    # Use local dnsmasq for resolving
    nameserver 127.0.0.1

Conclusion

Problèmes connus

Voir aussi


Basé sur « How to avoid conflicts between dnsmasq and systemd-resolved? » par stackexchange.com.

1)
C'est important, car resolv.conf est par défaut un lien symbolique vers /run/systemd/resolve/stub-resolv.conf. Si vous ne supprimez pas le lien symbolique, le fichier sera écrasé par systemd au redémarrage. NetworkManager (NM) vérifie également s'il s'agit d'un lien symbolique pour détecter la configuration de systemd-resolved.