Le DNS de systemd adoré à 127.0.0.53 semble fonctionner sauf lorsque je demande des noms de machines locales. Mais si je leur demande et spécifie spécifiquement le serveur DNS local (mon routeur), je reçois la réponse appropriée. Mais le fichier de configuration indique qu'il utilise également le routeur comme adresse de recherche. Des pensées?
J'utilise Ubuntu 18.04 sur mon ordinateur portable Dell.
Résultats incorrects:
$ nslookup web1
Server: 127.0.0.53
Address: 127.0.0.53#53
** server can't find web1: SERVFAIL
échoue également
$ nslookup -i wlp3s0 web1
nslookup: couldn't get address for 'web1': not found
résultats corrects:
$ nslookup web1 192.168.1.1
Server: 192.168.1.1
Address: 192.168.1.1#53
Name: web1
Address: 192.168.1.107
Informations sur la configuration systemd-resolution
$ systemd-resolve --status
Global
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
168.192.in-addr.arpa
17.172.in-addr.arpa
18.172.in-addr.arpa
19.172.in-addr.arpa
20.172.in-addr.arpa
21.172.in-addr.arpa
22.172.in-addr.arpa
23.172.in-addr.arpa
24.172.in-addr.arpa
25.172.in-addr.arpa
26.172.in-addr.arpa
27.172.in-addr.arpa
28.172.in-addr.arpa
29.172.in-addr.arpa
30.172.in-addr.arpa
31.172.in-addr.arpa
corp
d.f.ip6.arpa
home
internal
intranet
lan
local
private
test
Link 3 (wlp3s0)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 192.168.1.1
DNS Domain: wp.comcast.net
Link 2 (enp2s0)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
Configuration Info NetworkManager
$ cat /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile
[ifupdown]
managed=false
[device]
wifi.scan-Rand-mac-address=no
Alors, comment puis-je obtenir nslookup pour renvoyer la réponse correcte? Le lien 3 semble être la bonne information (ma connexion wifi) et mon DNS sur le routeur renvoie la bonne réponse, mais le cache local n'essaie jamais de chercher l'adresse (ou semble-t-il).
Votre fichier resolv.conf ne pointait pas au mauvais endroit - ../run/systemd/resolve/stub-resolv.conf
est là où il est censé pointer par défaut.
Le problème est que systemd-resolved
ne transmet pas les noms non en point sur DNS. Apparemment, cela fonctionne "comme prévu". Voir ce problème de github qui indique que "la résolution ne permettra jamais aux recherches en une seule étiquette de fuir sur le DNS unicast".
Que vous soyez d'accord ou non avec le raisonnement de cette question de github, voici un moyen de résoudre ce problème . Il n'est même pas nécessaire de modifier la configuration par défaut sur votre machine Ubuntu:
Tout d'abord, le DNS de votre réseau local doit avoir un nom de domaine.
Si vous utilisez dnsmasq, ajoutez ce qui suit à /etc/dnsmasq.conf
sur votre serveur DNS:
expand-hosts
domain=your-domain # replace "your-domain" with domain of your choice
Vous devriez maintenant pouvoir résoudre les noms d’hôte LAN si vous ajoutez le domaine:
nslookup web1.your-domain
Deuxièmement, assurez-vous que le nom du domaine de votre réseau local est également défini sur votre serveur DHCP s'il est différent de votre serveur DNS. Sur mon serveur DHCP (mon routeur), ce paramètre s’appelle simplement "Nom de domaine".
Si vous renouvelez ensuite votre bail DHCP sur votre machine Ubuntu, vous devriez voir une directive de recherche apparaître dans /run/systemd/resolve/stub-resolv.conf
:
nameserver 127.0.0.53
search your-domain
Rechercher maintenant web1
le développera à web1.your-domain
, ce qui résoudra ensuite à l'aide de DNS.
$ nslookup web1
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: web1.your-domain
Address: 192.168.1.107
Notez que si vous utilisez Dig
au lieu de nslookup
name__, Dig
n'utilise pas le chemin de recherche par défaut - utilisez son option +search
pour l'activer.
J'ai trouvé le correctif qui a fonctionné pour moi.
mon fichier resolv.conf pointait au mauvais endroit. Cela ressemble à un bogue dans Ubuntu tel qu’il s’est produit sur mon ordinateur portable (la machine sur laquelle j’ai le premier remarqué ce problème) et lors d’une nouvelle installation du serveur Ubuntu 18.04.
Le défaut
$ ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Apr 26 12:07 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
J'ai supprimé cela et pointé vers le bon fichier. Après le redémarrage, cela a résolu mon problème. Et j'ai même été capable de changer de réseau sur mon ordinateur portable et le DNS a basculé correctement. Bien sûr, lorsque sur des réseaux externes, je ne peux résoudre aucun de mes ordinateurs locaux, mais cela est à prévoir. Dès que je repasse sur mon réseau local, toutes les machines locales sont résolues correctement car mon routeur est le DNS.
Le correctif
$ Sudo rm -f /etc/resolv.conf
$ Sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
$ ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 32 May 29 08:48 /etc/resolv.conf -> /run/systemd/resolve/resolv.conf
$ Sudo reboot
Après cela, tout a fonctionné comme prévu et 127.0.0.53 n’est plus utilisé du tout.
Les résultats corrects
$ nslookup web1
Server: 192.168.1.1
Address: 192.168.1.1#53
Name: web1
Address: 192.168.1.107
$ nslookup google.com
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
Name: google.com
Address: 172.217.7.174
Name: google.com
Address: 2607:f8b0:4004:80e::200e