Documentation du Dr FRAPPE

Ce wiki regroupe les résultats de mes expériences en informatique accumulés au cours de mes recherches sur le net.

Dans la mesure du possible, j'ai cité mes sources ; il en manque certainement… :-)

Ceci est une ancienne révision du document !


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

  • Installez le paquet dnsmasq ou en ligne de commande :

    ...@...:~$ sudo apt install dnsmasq

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

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.