Je me connecte souvent à plusieurs réseaux simultanément. Chacun de ces réseaux fournit la configuration du server de noms via DHCP. Par exemple Réseau 1: (eth0):
domain company1.corp # nameserver 192.168.0.253 nameserver 192.168.0.254
Réseau 2 (tun0):
domain company2.corp # nameserver 10.102.204.51 nameserver 10.102.208.51
# Noms modifiés
Lorsqu'il est connecté aux deux réseaux simultanément:
# resolv.conf from NetworkManager domain company1.corp, company2.corp nameserver 192.168.0.253 nameserver 192.168.0.254 nameserver 10.102.204.51 # NOTE: the libc resolver may not support more than 3 nameservers. # The nameservers listd below may not be recognized. nameserver 10.102.208.51
La résolution de service.company2.corp ne fonctionne pas car le server de premier nom ne connaît que les noms de company1.corp.
Donc, inspiré par cet article , j'ai installé openresolv (une implémentation de resolvconf) en configurant un service local de dnsmasq sur mon installation d'Arch linux.
Si je configure les servers de noms manuellement en utilisant resolvconf:
# resolvconf -d NetworkManager # echo "domain company1.corp nameserver 192.168.0.253 nameserver 192.168.0.254 " | resolvconf -a eth0 # echo "domain company2.corp nameserver 10.102.204.51 nameserver 10.102.208.51 " | resolvconf -a tun0
Ensuite, je suis capable de résoudre les noms de company1.corp et company2.corp (le server local dnsmasq gère cela.)
Notez qu'après la configuration manuelle, resolveconf -l affiche les 2 configurations séparément:
~ # resolvconf -l # resolv.conf from tun0 domain company2.corp nameserver 10.102.204.51 nameserver 10.102.208.51 # resolv.conf from eth0 domain company1.corp nameserver 192.168.0.253 nameserver 192.168.0.254
Cependant, lorsque vous configurez le gestionnaire de réseau, les deux configurations ne sont pas séparées, comme ce serait le cas si le gestionnaire de réseau écrivait dans /etc/resolve.conf
~ # resolvconf -l # resolv.conf from NetworkManager # Generated by NetworkManager domain company1.corp, company2.corp nameserver 192.168.0.253 nameserver 192.168.0.254 nameserver 10.102.204.51 # NOTE: the libc resolver may not support more than 3 nameservers. # The nameservers listd below may not be recognized. nameserver 10.102.208.51
Ma question est comment puis-je get le gestionnaire de réseau pour appeler correctement resolveconf afin que les servers de noms pour chaque interface sont enregistrés séparément. (Malheureusement googler pour cela est inutile parce que google pense que "resolveconf" == "resolve.conf")
NetworkManager a la fonctionnalité de gérer un server local dnsmasq embedded. Il n'est pas nécessaire d'utiliser resolvconf / openresolv pour le faire.
Pour activer ceci:
dns=dnsmasq
à /etc/NetworkManager/NetworkManager.conf
. Une fois que vous avez fait cela, vous verrez que NetworkManager a démarré un process dnsmasq:
$ pgrep dnsmasq -fl 1697 /usr/bin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/nm-dns-dnsmasq.pid --listn-address=127.0.0.1 --conf-file=/var/run/nm-dns-dnsmasq.conf --cache-size=400 --proxy-dnssec
/etc/resolve.conf
devrait pointer vers l'instance locale de dnsmasq:
$ cat /etc/resolv.conf # Generated by NetworkManager domain company1.corp search company1.corp nameserver 127.0.0.1
et nous pouvons voir quels servers dnsmasq utilise:
# cat /var/run/nm-dns-dnsmasq.conf server=/company2.corp/10.102.208.51 server=/10.in-addr.arpa/10.102.208.51 server=192.168.1.244 server=192.168.1.239
Il semble que NetworkManager écrase simplement /etc/resolv.conf
et n'utilise pas openresolv. Selon FS # 24635 , NetworkManager a le support pour openreslov, mais il n'a pas été initialement activé dans la construction. Quelle version d'Arch Linux utilisez-vous et quelle est la version du packageage networkmanager?