Gestionnaire de réseau et plug-in DNSmasq

Le plugin dnsmasq est un joyau caché de NetworkManager.

Lors de l'utilisation du plugin, au lieu d'utiliser le serveur de noms DNS distribué par DHCP, NetworkManager configurera une copie locale de dnsmasq qui peut être personnalisée.

Vous pouvez demander : pourquoi faire cela ?

Personnellement, j'ai deux cas d'utilisation :

Sur mon ordinateur portable, j'exécute une installation complète d'OpenShift.
Pour que cela fonctionne, je dois pouvoir ajouter des entrées DNS.Je pourrais créer une machine virtuelle pour exécuter un serveur DNS ou exécuter un serveur DNS localement, mais je dois ensuite modifier mon resolv.conf à chaque fois que je change de réseau (et parfois plus souvent).Quand je suis à la maison, je veux toujours pouvoir accéder aux entrées DNS de mon réseau domestique pendant que je suis sur VPN.De nombreux VPN sont configurés de telle sorte que seul le trafic destiné au réseau VPN soit envoyé via le tunnel. Je peux toujours accéder à tout mon réseau local et la plupart du trafic sort par la passerelle par défaut.C'est très bien car je peux toujours accéder à mon imprimante réseau ou écouter de la musique à partir de mon serveur multimédia tout en travaillant. Cependant, la connexion VPN écrase mon resolv.conf avec les serveurs DNS du réseau VPN. Par conséquent, le DNS de mon réseau domestique n'est plus accessible.Le plugin dnsmasq pour NetworkManager résout ces deux problèmes.

Pour les entrées DNS locales, le plugin peut configurer des domaines locaux qui seront disponibles quel que soit le réseau auquel je suis connecté.

Pour le scénario VPN, je peux configurer dnsmasq pour transférer les demandes de mon domaine domestique vers mon serveur DNS domestique. Le DNS du VPN est configuré comme un transitaire dans dnsmasq plutôt que comme un serveur DNS principal, je peux donc résoudre à la fois les entrées DNS sur le réseau VPN et les miennes.

Voici comment le configurer dans Fedora 29 :

Dans un certain contexte, mon domaine sur mon ordinateur portable s'appelle laplab et mon domaine personnel est .cscc. Chez moi, mon serveur DNS est 172.31.0.20. Pour les entrées DNS dans laplab, la plupart d'entre elles sont définies dans /etc/hosts. DNSmasq peut alors les lire. J'ai également quelques entrées DNS supplémentaires définies pour un DNS générique et certains alias.

Voici les cinq fichiers à ajouter. NetworkManager utilise un répertoire de configuration. Vous pourriez peut-être disposer ces fichiers différemment si vous le souhaitez :

dans /etc/NetworkManager/conf.d/ :

# /etc/NetworkManager/conf.d/00-use-dnsmasq.conf
#
# This enabled the dnsmasq plugin.
[main]
dns=dnsmasq

dans /etc/NetworkManager/dnsmasq.d/

# /etc/NetworkManager/dnsmasq.d/00-cscc.conf
#
# This file directs dnsmasq to forward any request to resolve
# names under the .cscc domain to 172.31.0.20, my home DNS server.
server=/cscc/172.31.0.20

# /etc/NetworkManager/dnsmasq.d/01-laplab.conf
# This file sets up the local lablab domain and
# defines some aliases and a wildcard.
local=/laplab/
address=/.ose.laplab/192.168.101.125
address=/openshift.laplab/192.168.101.120
address=/openshift-int.laplab/192.168.101.120

# /etc/NetworkManager/dnsmasq.d/02-add-hosts.conf
# By default, the plugin does not read from /etc/hosts.
# This forces the plugin to slurp in the file
addn-hosts=/etc/hosts

# /etc/hosts
127.0.0.1 localhost localhost.localdomain
::1 localhost localhost.localdomain
192.168.101.120 ose-lap-jumphost ose-lap-jumphost.laplab
192.168.101.121 ose-lap-master1 ose-lap-master1.laplab
192.168.101.122 ose-lap-master2 ose-lap-master2.laplab
192.168.101.123 ose-lap-master3 ose-lap-master3.laplab
192.168.101.125 ose-lap-infnode1 ose-lap-infnode1.laplab
192.168.101.126 ose-lap-infnode2 ose-lap-infnode2.laplab
192.168.101.127 ose-lap-infnode3 ose-lap-infnode3.laplab
192.168.101.128 ose-lap-node1 ose-lap-node1.laplab
192.168.101.129 ose-lap-node2 ose-lap-node2.laplab
192.168.101.130 ose-lap-node3 ose-lap-node3.laplab

Une fois tous ces fichiers en place, redémarrez NetworkManager avec

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

Si tout fonctionne correctement, vous devriez voir que votre resolv.conf pointe vers 127.0.0.1 et qu'un nouveau processus dnsmasq est généré.

...@...:~ $ ps -ef | grep dnsmasq
dnsmasq 1835 1188 0 08:01 ? 00:00:00 /usr/sbin/dnsmasq --no-resolv
--keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/NetworkManager/dnsmasq.pid
--listen-address=127.0.0.1 --cache-size=400 --clear-on-reload --conf-file=/dev/null
--proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq
--conf-dir=/etc/NetworkManager/dnsmasq.d
...@...:~ $ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 127.0.0.1
...@...:~ $ host ose-lap-jumphost.laplab
ose-lap-jumphost.laplab has address 192.168.101.120