RobertMe schreef op donderdag 29 mei 2025 @ 21:15:
[...]
Ja, dat is een userland proxy. Zoals ik aangaf gewoon een programmaatje dat luistert op de host IP/port opgegeven bij de publish en vervolgens het binnenkomende verkeer 1-op-1 doorzet naar een (nieuwe) verbinding richting de container.
Ok. Helder. Ik zie dat ik die kan uitzetten, maar dan wordt inderdaad IPv6 aanvragen domweg geblokkeerd. Logisch eigenlijk.
[...]
Wat bedoel je hier nu precies mee? remote_ip zoals je in PHP hebt? Maar dat werkt sowieso niet direct als je achter een Caddy reverse proxy zit. Dan moet je naar de X-FORWARDED-FOR header kijken die Caddy zal sturen. Maar okay, bij de proxy variant zal die net zo goed niet kloppen.
Nope. Dat is Caddy
Caddy pleurt dingen behalve in de header ook in de logging, waarin je de remote_ip oa kunt zien. En met templates kun je bijv ook handmatig je "X-Real-IP" op {remote} of {remote_host} zetten als je wilt...
Een voorbeeldlog waarin de Docker gateway staat omdat de client IPv6 gebruikt:
JSON:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| {
"level": "info",
"ts": 1748525274.9179876,
"logger": "http.log.access.log2",
"msg": "handled request",
"request": {
"remote_ip": "172.30.0.1",
"remote_port": "48622",
"client_ip": "172.30.0.1",
"proto": "HTTP/2.0",
"method": "GET",
},
"Server": [
"Caddy",
"Rocket"
],
}
} |
En een log waarin wel het juiste externe IP adres staat omdat de client IPv4 gebruikt doordat in de DNS enkel een A record is opgenomen:
JSON:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| {
"level": "info",
"ts": 1748525327.5075016,
"logger": "http.log.access.log2",
"msg": "handled request",
"request": {
"remote_ip": "188.207.108.185",
"remote_port": "26385",
"client_ip": "188.207.108.185",
"proto": "HTTP/2.0",
"method": "GET",
"Server": [
"Caddy",
"Rocket"
]
}
} |
[...]
De grap is dat de Linux kernel al jaaaren alleen maar nftables code bevat. Waarbij er vervolgens iptables (+ ipset + ...) implementatie is die aan de achterkant de nftables APIs van de kernel aanspreekt.
Volgens mij gebruik ik dan de compatibility laag. Iets van "legacy" ofzo in de naam. Kan het me vaag herinneren omat het 2,5 jaar geleden is dat ik docker op de server heb gezet

[...]
Nee, gaat niet werken. Om IPv6 te ontvangen in de containers moeten de containers zelf IPv6 doen. En ik heb je niet zien schrijven dat je IPv6 op de Docker networks enabled hebt (
docker network create --ipv6 .... IIRC). En netwerken kun je niet bewerken. De enige optie is dus alle containers die in zo'n netwerk (in jouw geval het ingress netwerk?) zitten stoppen, verwijderen, het netwerk verwijderen, het netwerk opnieuw aanmaken
met IPv6 en daarna weer de containers aanmaken & starten. En dat gaat dus iets verder dan "aanzetten" en ik heb je nog niet lezen vloeken over dat je de ~50 containers moet verwijderen (en daarna opnieuw aanmaken), dus ik denk niet dat je al zo ver bent

Dat bedoel ik met aanzetten ja
En Nee, daar ben ik nog niet aan begonnen
Ik zal het ingress netwerk van Caddy, waarin natuurlijk alle containers zitten die via Caddy benaderd kunnen worden (zowel via een lokale dns als vanaf extern) met IPv6 moeten uitrusten. Ik heb daar nu enkel een custom IPv4 netwerk in gedefinieerd zodat ik de addressen kan herkennen.
Dat zal ik dus ook voor IPv6 moeten doen, en ja dat betekent dat alle containers die in dat netwerk zitten down moeten en weer moeten worden aangemaakt. Ach...
Aan de andere kant kan ik het ook Docker lekker zelf laten uitzoeken: die maakt dan ULAs aan door enkel
een "vinkje" te zetten:Dynamic IPv6 subnet allocation
If you don't explicitly configure subnets for user-defined networks, using docker network create --subnet=<your-subnet>, those networks use the default address pools of the daemon as a fallback. This also applies to networks created from a Docker Compose file, with enable_ipv6 set to true.
Is dus ook nog een overweging. Ik had namelijk een zelf gedefinieerd IPv4 netwerk gedefinieerd eerder om voor Caddy eventueel nog een proxy te zetten. Dan is een vast adres voor Caddy wel erg handig.
Edit:
Of bedoel je met IPv6 activeren de IPv6 optie in de daemon.json van Docker? Ook dat zal niet veel helpen. Want die optie gaat om het default bridge network. Dat is zeg maar de --ipv6 van docker network create voor die ingebouwde bridge. Niet meer, niet minder. Hetzelfde als die optie voor het IPv6 subnet dat je op kunt geven in de daemon.json, ook die heeft alleen betrekking op het default bridge netwerk.
Nee. Ik gebuik het default bridge netwerk niet. Overal heb ik eigen netwerken opgegeven. De meeste apps eisen dit ook omdat die zelf meerdere containers starten, en dus ook in hun eigen netwerk willen zitten. Alleen de hoofd-app komt extra in het ingress netwerk van Caddy te hangen.