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
# 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;
systemctl disable --now systemd-resolved rm -f /etc/resolv.conf echo "nameserver 127.0.0.1" > /etc/resolv.conf
systemctl disable --now systemd-resolved rm -f /etc/resolv.conf echo "nameserver 1.1.1.1" > /etc/resolv.conf
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
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 /opt/adguard/work:/opt/adguardhome/work \ -v /opt/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
resolvectl status; resolvectl dns resolvectl statistics
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