dns
02/04/2026DNS
SCHEMA :
on fait ping google.com depuis un conteneur.
flowchart TD
A[Docker DNS
127.0.0.11] --> B[Lit /etc/resolv.conf]
B --> C[systemd-resolved
127.0.0.53]
C -->|upstream| D[AdGuard
127.0.0.1]
C -->|fallback| E[1.1.1.1 / 8.8.8.8]
D -->|resolution| E
E --> F[Internet]RESUME des options :
dans /etc/systemd/resolved.conf
- on met DNSStubListener=yes et DNS=1.1.1.1
alors /etc/resolv.conf va contenir nameserver 127.0.0.53
en gros il demarre un proxy qui va ecouter sur 127.0.0.53:53 et resoudre le dns en utilisant le dns "DNS=1.1.1.1"
# script actuellemetn en prod rm -f /etc/resolv.conf; ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf; sed -i -n -E -e '/^#?DNSStubListener=/!p' -e '$aDNSStubListener=yes' /etc/systemd/resolved.conf; sed -i -n -E -e '/^#?DNS=/!p' -e '$aDNS=1.1.1.1 8.8.8.8' /etc/systemd/resolved.conf; sed -i -n -E -e '/^#?FallbackDNS=/!p' -e '$aFallbackDNS=9.9.9.9' /etc/systemd/resolved.conf; systemctl restart systemd-resolved;
- si on met adguard ça sert a rien car adguard fait deja ça.
donc on peut mettre DNSStubListener=no et DNS=127.0.0.1
et on demarre adguard sur 127.0.0.1
et on regle le dns upstream dans adguard (1.1.1.1)
ou carement eteindre systemd-resolved et forcer le fichier directement /etc/resolv.conf
systemctl disable --now systemd-resolved rm -f /etc/resolv.conf echo "nameserver 127.0.0.1" > /etc/resolv.conf
- on peut aussi mettre DNSStubListener=no et "DNS=1.1.1.1"
127.0.0.53 ne marchera pas.
on peut directement forcer le fichier /etc/resolv.conf : nameserver 1.1.1.1
le requetes dns partiront directement à 1.1.1.1
systemctl disable --now systemd-resolved rm -f /etc/resolv.conf echo "nameserver 1.1.1.1" > /etc/resolv.conf
- on met systemd-resolved, qui envoie à adguard mais garde 1.1.1.1 en fallback
rm -f /etc/resolv.conf; ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf; sed -i -n -E -e '/^#?DNSStubListener=/!p' -e '$aDNSStubListener=yes' /etc/systemd/resolved.conf; sed -i -n -E -e '/^#?DNS=/!p' -e '$aDNS=127.0.0.1' /etc/systemd/resolved.conf; sed -i -n -E -e '/^#?FallbackDNS=/!p' -e '$aFallbackDNS=1.1.1.1' /etc/systemd/resolved.conf; systemctl restart systemd-resolved;
forcer docker à utiliser le bon dns
jq '.dns = ["172.17.0.1"]' "/etc/docker/daemon.json" > "/etc/docker/daemon.json.tmp" && mv "/etc/docker/daemon.json.tmp" "/etc/docker/daemon.json" systemctl restart docker
installer adguard
Il faut que adguard ecoute 127.0.0.1 pour répondre aux requetes de l'OS.
et 172.17.0.1 pour répondre aux requetes de docker.
docker rm -f adguard docker run -d \ --name adguard \ -v /root/docker/adguard/work:/opt/adguardhome/work \ -v /root/docker/adguard/conf:/opt/adguardhome/conf \ -p 127.0.0.1:53:53/tcp \ -p 127.0.0.1:53:53/udp \ -p 172.17.0.1:53:53/tcp \ -p 172.17.0.1:53:53/udp \ -p 0.0.0.0:80:80 \ -p 0.0.0.0:3000:3000 \ --restart=unless-stopped \ adguard/adguardhome
vérifier l'état de systemd-resolved;
resolvectl status; resolvectl dns resolvectl statistics
Test réel (le plus fiable)
Fais une requête DNS directe :
dig google.com # forcer un dig sur un serveur précis : # dig @127.0.0.1 google.com # dig @1.1.1.1 google.com # dig @127.0.0.53 google.com
faire une requete depuis un conteneur docker
docker run --rm alpine nslookup google.com
Puis regarde :
resolvectl query google.com
Et surtout :
journalctl -u systemd-resolved -f