CDN Nutzung für CGNAT Umgehung

Moin zusammen,

Ich habe bis vor kurzem noch eine öffentliche IPv4 Adresse gehabt und darüber über eine Portfreigabe von außen Zugriff auf mein Heimnetz gehabt.
Genutzt wurde das für einen Nginx Proxy Manager, über den ich dann mit dem DynDNS Dienst von IPv64 1-2 Dienste von außen erreichbar gemacht habe.

Vor kurzem bin ich auf Glasfaser gewechselt und bin nun CGNAT betroffen.
Ich habe mir die Videos bezüglich CDN von Dennis angeschaut, aber ich bin einfach zu blöd zu verstehen, wie ich dieses Konstrukt nun wieder so hinbekomme.

Meine SSL Zertifikat vergabe schlägt fehl und ich erreiche nun vor allem mein Vaultwarden nicht mehr von außen, was ziemlich blöd ist…

Kann mir jemand genau erklären, was ich genau einstellen muss?
Ich wäre für Unterstützung sehr dankbar.

Beste Grüße

Und dass der Glasfaser-ISP dir nur CGNAT bereitstellen würde, war dir vorher natürlich gänzlich unbekannt und es war dir daher auch vollkommen unmöglich dich rechtzeitig durch Umstellung auf IPv6 auf die nun eingetretene Situation vorzubereiten :wink:

Okay, Eine konkrete Hilfe ist mit deinen wenigen gelieferten Infos sowieso nicht möglich. Daher nur generell:

  • überprüfe deinen Router / deine Firewall auf korrekte IPv6-Implementation und Konfiguration
  • überprüfe ob alle Server / Dienste, die SSL Zertifikate benötigen per IPv6 erreichbar sind.

Wenn nicht

  • mach diese Server / Dienste per IPv6 erreichbar. SSL Zertifikate können auch per IPv6 erzeugt werden
  • erreichbar per IPv6 bedeutet diese Server / Dienste haben nicht nur eine inet6 fe80:... sondern auch eine inet6 2001:..., die vorzugsweise per DHCPv6 und nicht SLAAC vergeben wird.
  • Danach kannst du dann per IPv6 SSL Zertifikat vergaben / erneuern. Ich selbst mache das mit Let’s Encrypt und Let’s Encrypt bevorzugt bei der Erstellung / Erneuerung von Zertifikaten definitiv IPv6 vor IPv4. Das bedeutet bei vorhandener IPv6-Anbindung wird immer IPv6 benutzt, selbst dann, wenn auch IPv4 möglich wäre.

Was CDN angeht. Bevor du den CDN von Dennis benutzen kannst muss deine IPv6-Konfiguration stehen. Ohne funktionierende IPv6-Konfiguration kannste auch kein CDN nutzen, denn der CDN-Portmapper und / oder der CDN-Proxy leiten Anfragen an eine von Dennis bereitgestellte IPv4-Adresse an die IPv6-Adresse von z.B. deinem Webserver weiter,

Da du aber bisher ziemlich sicher noch keine funktionierende IPv6-Konfiguration hast, denn ansonsten wäre es ja möglich die Zertifikate per IPv6 zu erzeugen, kann auch CDN noch nicht funktionieren. Da kannst du die Videos so oft angucken wie du willst.

Moin, wie @The_eagle schon gesagt hat, ist es ohne Infos was für v6-Addressen wo vorhanden sind, nicht möglich dir zu helfen. Also bitte mal ein Screenshot von den v6-Addressen auf deinen betroffenen Hosts. Wenn diese mit 2xxx beginnen bitte etwas unkenntlich machen😉

Danke erst mal für die schnelle Reaktion. Ich komme leider erst jetzt dazu, zu antworten.
Vorweg: Es war mir tatsächlich nicht bekannt, dass CGNAT vor allem bei Glasfaser-ISPs so gängig ist. Tatsächlich war der Glasfaservertrag relativ kurzfristig zustande gekommen, aber das tut hier ja erst mal nichts zur Sache :slight_smile:.

Ich habe Anhand deiner Punkte mal ein paar Änderungen vorgenommen und das ist der aktuelle Stand:

IPv6 Settings der Fritzbox:


Verbindungsdetails auf der FritzBox:
Internet, IPv6 verbunden seit 16.06.2025, 09:45 Uhr, ISP-XY
IPv6-Adresse: 2a04:xxx1:x:x::x:xxxx/64, Gültigkeit: 214106/127706s
IPv6-Präfix: 2a04:xxx0:xxx:xxxx::/60, Gültigkeit: 214106/127706s

Zum setup:
Es ist ein RaspPi 4, auf dem DietPi als Betriebssystem läuft.
Darauf ist Docker installiert mit ein paar Containern.
Mir geht es hauptsächlich nun um Nginx Proxy Manager und Vaultwarden.
Für diese hatte ich ein Docker MACVLAN Netz eingerichtet, um den einzelnen Containern eigene IPv4 Adressen zu vergeben, da beide Container Port 80 verwenden.

In der /etc/docker/daemon.json habe ich nachträglich nun mein IPv6 Präfix unter „fixed-cidr-v6“ hinzugefügt. Muss ich hier das /60 Präfix auf der Fritzbox angeben, oder erwartet docker hier eine /64?

Anschließend habe ich das MACVLAN Netz neu mit IPv6 Unterstützung angelegt und hier einen kleinen Teil des Präfix Netzes mitgegeben.

Hier ein Auszug aus der docker-compose.yml:

networks:
network_prod:
ipv4_address: 192.168.178.x
ipv6_address: 2a04:xxx0:xxx:xxx::2

Auf der Fritzbox wird mir der Container, wie zuvor auch, als Client mit eigener IP angezeigt. Allerdings wird mir als IPv6-Interface-ID etwas ganz anderes angezeigt, als in der yml angegeben.

Eine Portfreigabe für 80 und 443 habe ich für den Client auch gemacht, mit der Interface-ID die mir auf der Fritzbox angezeigt wird.

Beim erstellen eines Zertifikates steht folgendes im Terminal:

app-1 | [6/16/2025] [8:42:19 PM] [Nginx ] › ⬤ debug Deleting file: /data/nginx/proxy_host/3.conf
app-1 | [6/16/2025] [8:42:19 PM] [Nginx ] › ⬤ debug Could not delete file: {
app-1 | „errno“: -2,
app-1 | „code“: „ENOENT“,
app-1 | „syscall“: „unlink“,
app-1 | „path“: „/data/nginx/proxy_host/3.conf“
app-1 | }
app-1 | [6/16/2025] [8:42:19 PM] [Nginx ] › ⬤ debug Deleting file: /data/nginx/proxy_host/3.conf.err
app-1 | [6/16/2025] [8:42:19 PM] [Nginx ] › ⬤ debug Could not delete file: {
app-1 | „errno“: -2,
app-1 | „code“: „ENOENT“,
app-1 | „syscall“: „unlink“,
app-1 | „path“: „/data/nginx/proxy_host/3.conf.err“
app-1 | }
app-1 | [6/16/2025] [8:42:19 PM] [Global ] › ⬤ debug CMD: /usr/sbin/nginx -t -g „error_log off;“
app-1 | [6/16/2025] [8:42:19 PM] [Nginx ] › :information_source: info Reloading Nginx
app-1 | [6/16/2025] [8:42:19 PM] [Global ] › ⬤ debug CMD: /usr/sbin/nginx -s reload
app-1 | [6/16/2025] [8:42:24 PM] [SSL ] › :information_source: info Requesting Let’sEncrypt certificates for Cert #7: subdomain.subdomain.lan64.de
app-1 | [6/16/2025] [8:42:24 PM] [SSL ] › :information_source: info Command: certbot certonly --config ‚/etc/letsencrypt.ini‘ --work-dir „/tmp/letsencrypt-lib“ --logs-dir „/tmp/letsencrypt-log“ --cert-name „npm-7“ --agree-tos --authenticator webroot --email ‚…‘ --preferred-challenges „dns,http“ --domains „subdomain.subdomain.lan64.de
app-1 | [6/16/2025] [8:42:24 PM] [Global ] › ⬤ debug CMD: certbot certonly --config ‚/etc/letsencrypt.ini‘ --work-dir „/tmp/letsencrypt-lib“ --logs-dir „/tmp/letsencrypt-log“ --cert-name „npm-7“ --agree-tos --authenticator webroot --email ‚…‘ --preferred-challenges „dns,http“ --domains „subdomain.subdomain.lan64.de
app-1 | [6/16/2025] [8:42:30 PM] [Nginx ] › ⬤ debug Deleting file: /data/nginx/temp/letsencrypt_7.conf
app-1 | [6/16/2025] [8:42:30 PM] [Global ] › ⬤ debug CMD: /usr/sbin/nginx -t -g „error_log off;“
app-1 | [6/16/2025] [8:42:30 PM] [Nginx ] › :information_source: info Reloading Nginx
app-1 | [6/16/2025] [8:42:30 PM] [Global ] › ⬤ debug CMD: /usr/sbin/nginx -s reload
app-1 | [6/16/2025] [8:42:30 PM] [Express ] › :warning: warning Saving debug log to /tmp/letsencrypt-log/letsencrypt.log
app-1 | Some challenges have failed.
app-1 | Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /tmp/letsencrypt-log/letsencrypt.log or re-run Certbot with -v for more details.

Bei IPv64 habe ich meine DynDNS Domain und die IPv6 Prefix URL in der Fritzbox eingetragen.

Bitte Bescheid geben, falls ich wichtige Infos vergessen habe und danke vorab für die Hilfe.