Docker: Container können den PiHole-Container nicht erreichen (DNS Auflösung)

crashbandicot

Captain
Registriert
Dez. 2013
Beiträge
3.074
Hi,

ich bin gerade beim Umbau meines kleinen Homelabs und komme nicht weiter. Bis vor ein paar Stunden lief PiHole auf einem Synology NAS (192.168.1.200). Neben PiHole liefen weitere Container (z.B. Speedtest-Tracker).

Ich habe diese beiden Container vom NAS auf ein kleinen Debian Server (192.168.1.201) migriert. Seitdem funktioniert die Docker-interne DNS Auflösung nicht mehr.

Von meinem Client aus:
~ >>> nslookup startpage.com
Server: 192.168.1.201
Address: 192.168.1.201#53

Non-authoritative answer:
Name: startpage.com
Address: 145.131.132.72

Vom Debian aus:
crash@debian:~$ nslookup startpage.com
Server: 192.168.1.201
Address: 192.168.1.201#53

Non-authoritative answer:
Name: startpage.com
Address: 145.131.132.72

Aus dem Speedtest-Tracker-Container heraus:

Ohne Angabe eines DNS-Servers: Fehler 🚫
root@e96a34d96944:/# nslookup startpage.com
Server: 127.0.0.11
Address: 127.0.0.11:53

;; connection timed out; no servers could be reached
Mit Angabe des Debian / PiHole Servers: Fehler 🚫
root@e96a34d96944:/# nslookup startpage.com 192.168.1.201
;; connection timed out; no servers could be reached
Mit Angabe der FritzBox: Funktioniert ✅
root@e96a34d96944:/# nslookup startpage.com 192.168.1.1
Server: 192.168.1.1
Address: 192.168.1.1:53

Non-authoritative answer:
Name: startpage.com
Address: 37.0.81.241
Ein "ping" geht aber durch (FritzBox / Debian Server)
root@e96a34d96944:/# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: seq=0 ttl=63 time=1.252 ms
64 bytes from 192.168.1.1: seq=1 ttl=63 time=0.881 ms
^C
--- 192.168.1.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.881/1.066/1.252 ms

root@e96a34d96944:/# ping 192.168.1.223
PING 192.168.1.223 (192.168.1.223): 56 data bytes
64 bytes from 192.168.1.223: seq=0 ttl=64 time=0.139 ms
64 bytes from 192.168.1.223: seq=1 ttl=64 time=0.143 ms
^C
--- 192.168.1.223 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.139/0.141/0.143 ms

Die Docker-Netzwerke sind nicht manuell angelegt worden und alle vom Typ "DRIVER: Bridge" sowie "SCOPE: local". Jeder Docker-Container befindet sich in seinem eigenen Netzwerk.

Ich habe dann testweise ein neues Docker Netzwerk angelegt und PiHole sowie Speedtest-Tracker an dieses gehängt. Anschließend waren ping und nslookup mit angegebenen DNS-Server erfolgreich.
root@26cbb1fee303:/# ping 172.25.0.3
PING 172.25.0.3 (172.25.0.3): 56 data bytes
64 bytes from 172.25.0.3: seq=0 ttl=64 time=0.207 ms
64 bytes from 172.25.0.3: seq=1 ttl=64 time=0.149 ms
^C
--- 172.25.0.3 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.149/0.178/0.207 ms

root@26cbb1fee303:/# nslookup startpage.com 172.25.0.3
Server: 172.25.0.3
Address: 172.25.0.3:53

Non-authoritative answer:
Name: startpage.com
Address: 145.131.132.84

Non-authoritative answer:

Ohne Angabe des DNS-Servers hingegen nicht.
root@26cbb1fee303:/# nslookup startpage.com
Server: 127.0.0.11
Address: 127.0.0.11:53

;; connection timed out; no servers could be reached

Die resolv.conf aus dem Container:
root@26cbb1fee303:/# cat /etc/resolv.conf
# Generated by Docker Engine.
# This file can be edited; Docker Engine will not make further changes once it
# has been modified.

nameserver 127.0.0.11
search fritz.box
options ndots:0

# Based on host file: '/etc/resolv.conf' (internal resolver)
# ExtServers: [192.168.1.201]
# Overrides: []
# Option ndots from: internal

Ich habe den Durchblick verloren und weiß nicht mehr wo ich noch etwas machen kann.
 
127.0.0.11 kann natürlich nicht funktionieren. Das musst du auf jeden Fall anpassen.

Welche IP hat der Speedtest-Tracker?
 
riversource schrieb:
Welche IP hat der Speedtest-Tracker?
172.25.0.2

riversource schrieb:
127.0.0.11 kann natürlich nicht funktionieren. Das musst du auf jeden Fall anpassen.
Wie bekomme ich Docker dazu, dies für alle Container zu korrigieren und für neue direkt richtig zu hinterlegen?
 
Das Problem hatte ich auch. Mein Pi-Hole war auf dem Mini-Server und da liefen auch Docker-Container. Bei manchen Docker-Containern kann man es lösen, wenn man
Code:
--network=host
setzt. Aber das klappt nicht bei jedem Container. Ich habe es am Ende so gelöst, dass Pi-Hole bei mir in einem LXC Container unter Proxmox läuft und ich muss nicht immer irgendwelche Anpassungen machen.
 
  • Gefällt mir
Reaktionen: Azghul0815
crashbandicot schrieb:
Und der DNS Server kennt den Weg dahin? Gibt es entsprechende Roufen?


crashbandicot schrieb:
Wie bekomme ich Docker dazu, dies für alle Container zu korrigieren und für neue direkt richtig zu hinterlegen?
Wieso Docker? Wenn du selber die DNS Konfiguration änderst, musst du das auch selber anpassen.
 
Ich bin gerade über die Lösung oder zumindest einen guten Workaround gestolpert: Anpassung der resolv.conf auf dem Debian.
crash@debian:~$ cat /etc/resolv.conf
domain fritz.box
search fritz.box
nameserver 127.0.0.1

nslookup auf Debian erfolgreich:
crash@debian:~$ nslookup startpage.com
Server: 127.0.0.1
Address: 127.0.0.1#53

Non-authoritative answer:
Name: startpage.com
Address: 37.0.81.241

Und auch im Container:
root@6c04379d286a:/# cat /etc/resolv.conf
# Generated by Docker Engine.
# This file can be edited; Docker Engine will not make further changes once it
# has been modified.

nameserver 127.0.0.11
search fritz.box
options ndots:0

# Based on host file: '/etc/resolv.conf' (internal resolver)
# ExtServers: [host(127.0.0.1)]
# Overrides: []
# Option ndots from: internal

root@6c04379d286a:/# nslookup startpage.com
Server: 127.0.0.11
Address: 127.0.0.11:53

Non-authoritative answer:
Name: startpage.com
Address: 37.0.81.241

Non-authoritative answer:

Quelle: https://discourse.pi-hole.net/t/sol...-containers-when-using-docker-pihole/31413/13


Etwas unorthodox, funktioniert für mich aber.
 
Komisch, denn vorher auf dem NAS lief alles ohne Probleme und "Taschenspielertricks". Aufgesetzt und fertig.
 
Falls der weg über /etc/resolv.conf nicht klappt, oder ein Network Manager sie überschreibt. Kannn man die Container auch mit --dns starten.
 
  • Gefällt mir
Reaktionen: Bohnenhans
Ich habe noch einmal eine grundlegende Frage: wie bekomme ich die Startreihenfolge der einzelnen Container festgelegt? Konkret geht es mir darum, dass PiHole als zentraler DNS Server als erstes gestartet werden muss, bevor andere Container starten (die über DNS auf andere Dienste zugreifen). Steht DNS nicht zur Verfügung, bricht nahezu sämtliche Kommunikation zusammen.
 
Du kannst in Docker-Compose die Startreihenfolge (depends) setzen. Aber unter den Containern ist mir keine Lösung bekannt.
 
Bei Podman mache ich das über systemd scripte. Sollte auch mit Docker funtionieren Jeder container jat ein init script um die pods zu starten
 
Zurück
Oben