Raspi 4 PiHole Docker Cloudflared ipv6 Challenge

shirocko

Cadet 2nd Year
Registriert
Juni 2012
Beiträge
27
Hallo,

ich kämpfe gerade mit dem Problem IPv6 für PiHole in einem Docker Container auf einem Raspi 4 einzurichten.
Im Moment betreibe ich einen Raspi 4 mit 2 Docker Containern.
Einer ist pihole und der andere Cloudflared.
Beide sind Mitglied eines separaten MACVLAN mit dem IP Range /30 via IPv4.
The Anfragen von pihole werden an den cloudflared Container auf Port 5053 weiter geleitet und dieser Aufbau funktioniert auch reibungslos.

Nun möchte ich meinen alten Raspi 2B+ mit einer nativen PiHole Installation ersetzen. Das einzige was noch fehlt ist die Unterstützung von IPv6 im pihole Docker Container.

Und hier fangen meine Probleme leider an.
Im Moment habe ich bereits das folgende ausprobiert:

1. Ich habe IPv6 in Docker mittels Eintrag in die Datei /etc/docker/daemon.json aktiviert:
{
"ipv6": true,
"fixed-cidr-v6": "2003:xxx:xxxx:xxxx::/64"
}

Hier kommt auch schon die erste Frage. Ist es korrekt den globalen IP Range für eth0 zu verwenden oder muss ich die "fd00::/64" Adresse verwenden?

2. Ich habe eine neue MACVLAN Konfiguration erstellt mit einem /64 Subnetz for IPv6 und habe anschließend das Netzwerk selbst auch erstellt und es mit dem pihole Container verbunden und die IPv4 Adresse hinzu konfiguriert. Die IPv6 Adresse habe ich offen gelassen, um zu sehen, was passiert.
Wenn ich den Container starte und über Inspect betrachte, dann zeigt er mir eine IPv6 Adresse und diese ist auch pingbar und ich kann mich über die Adresse auch zur Config Website von pihole verbinden.
Aber im Admin Panel sind dann die Felder für IPv4 und IPv6 nur mit Nullen gefüllt. 0.0.0.0 bzw. 0:0:0:0:0:0.

Also was genau muss ich jetzt machen, damit IPv6 über das MACVLAN für die pihole und cloudflared Container zur Verfügung steht und welche Adresse sollte ich nutzen? (2003:, fd00:, fe80:)

Besten Dank im voraus
shirocko
 
Wenn deine Container von extern (aus dem Netz) erreichbar sein sollen ist die Globale IP richtig, allerdings nur wenn du ein statisches Präfix hast. Wenn nicht, musst du mit einem Nameserver arbeiten.
Soll das ganze aber nur lokal erreichbar sein, benutze die fd00 (ULA - Unique Local Address), welche vom Router verteilt werden. Theoretisch gehen aber auch die fe80 (LLA - Link-Local-Adress), welche direkt auf dem Endgerät erzeugt werden. Also ganz normal, dass dort eine Addresse auftaucht, die du unter Umständen gar nicht vergeben hast.

Entsprechende IPs solltest du dann auch im docker-compose.yml des Containers eintragen. Dann tauchen die auch im Admin-Bereich auf.

Siehe Beispiel

ServerIP: <Host's IP>
Recommended
--net=host mode requires Set to your server's LAN IP, used by web block modes and lighttpd bind address
ServerIPv6: <Host's IPv6>
Required if using IPv6
If you have a v6 network set to your server's LAN IPv6 to block IPv6 ads fully

https://hub.docker.com/r/pihole/pihole/
https://github.com/pi-hole/docker-pi-hole/blob/master/docker_run.sh

Und auch noch einmal in Ausführlich: http://tonylawrence.com/posts/unix/synology/free-your-synology-ports/
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: snaxilian
hycon schrieb:
...benutze die fd00 (ULA - Unique Local Address), welche vom Router verteilt werden. Theoretisch gehen aber auch die fe80 (LLA - Link-Local-Adress), welche direkt auf dem Endgerät erzeugt werden.
Hi zunächst besten Dank für die kurzfristige Antwort.
Ich erzeuge ja ein neues Interface mit der macvlan Konfiguration und dadurch bekommt dieses ja auch eine andere ULA zugewiesen, als das eth0 Interface des Raspi. Ich weiß also vorher ja noch gar nicht, wie diese Adresse aussehen wird, da der Router mir diese ja scheinbar erst bei der ersten Verwendung zuweist.
Bleibt diese anschließend immer gleich oder macht es eher Sinn gleich auf die fe80 zu gehen, da ich diese lokal für das Gerät vorgeben kann?
Grundsätzlich könnte ich es per docker-compose erledigen, jedoch habe ich Gefallen daran gefunden die Container über Portainer per Web-Interface zu definieren. Dies sollte ja genauso gut gehen.

Wenn ich mir nun eine statische IPv6 Adresse generieren möchte, vermutlich dann eine LLA (fe80), muss diese ein bestimmtes Format in den ersten 64 Bit beinhalten und die letzten 64 Bit kann ich dann z.B. à la fe80....::1 fe80...::2 vergeben? Hier würde es natürlich schön sein, die Adressen äquivalent zur IPv4 zu vergeben in den letzten Stellen.

Danke im Voraus, ich schau mir derweil die Links an und probier ein wenig herum.
shirocko

---------------------------------------------------------------------------------------------------------------------

Ergänzung:

Ok ich habe jetzt pihole auf fd00::45 konfiguriert und damit scheint es jetzt problemlos zu klappen.
Sollte also vermutlich soweit kein Problem geben.
Wenn doch, dann bitte vorwarnen. Danke :)
 
Zuletzt bearbeitet:
Hallo noch einmal.
Zunächst hat das Setup funktioniert.
Nach einem Neustart des Raspi kam jedoch der Docker Service nicht mehr hoch und über journalctl sieht man dann folgende Fehlermeldung:
failed to start daemon: Error initializing network controller: Error creating default "bridge" network: Pool overlaps with other one on this address space
Nach etwas Suchen und ausprobieren habe ich den Fehler gefunden.
Ich definiere unter /etc/docker/daemon.json dass IPv6 verwendet werden soll und gebe das Standard Subnet "fd00::/64" an.
Innerhalb meines macvlan Netzwerks verwende ich aber auch das Netzwerk "fd00::/64" und die beiden IP Adressen "fd00::45" und "fd00::46".
Hier scheint es zu krachen, da sowohl die Docker bridge "fd00::", als auch das macvlan diesen Adressraum verwenden wollen.
Wenn ich IPv6 in der daemon.json deaktiviere startet der Service sofort wieder.
Nun möchte ich aber, dass auch die restlichen Container über IPv6 erreichbar bleiben, die über die Standard bridge laufen.

Wie muss ich meine Subnetze wählen, damit sowohl das Bridge Netzwerk normal über den Router erreichbar ist, als auch das macvlan Netz für pihole?

Wenn ich z.B. für das macvlan das Subnetz "fd01::/64" verwende, dann kann ich meine Router als Default Gateway nicht mehr angeben, da dieser mit fd00: beginnt und damit außerhalb des Adressraums liegt.

Hat jemand eine hilfreiche Idee?

Besten Dank,
shirocko



----
Niemand eine Idee?
 
Zuletzt bearbeitet:
Zurück
Oben