Webseite nicht mit IPv6 / HTTPS erreichbar

CoMo

Captain
Registriert
Dez. 2015
Beiträge
3.162
Hallo,

bei mir Zuhause liefert Nginx Proxy Manager eine statische HTML-Seite auf meiner öffentlichen IP-Adresse aus.

Genauer gesagt, auf meinen öffentlichen Adressen. Auf meiner IPv4-Adresse und auf der öffentlichen IPv6-Adresse meines Routers.

Beide Adressen sind als A- und AAAA Eintrag für die Domain eingetragen und verweisen auch reverse auf die Domain.

Sowohl für IPv4 wie auch für IPv6 nutze ich Port Forwardings, um die Anfragen an Port 80 und 443 an den LXC-Container weiterzuleiten. IPv4 wie üblich an meine lokale 192.168. Adresse, IPv6 an die lokale ULA Adresse. Router ist eine OPNSense.

HTTP funktioniert einwandfrei über beide Protokolle. HTTPS funktioniert einwandfrei über IPv4, nicht jedoch über IPv6. Hier schlägt der TLS-Handshake fehl:


Code:
 curl -vvv -6 https://sub.<meine-domain>.de/
*   Trying [2003:a:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX]:443...
* Connected to sub.<meine-domain>.de (2003:a:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX) port 443 (#0)
* ALPN: offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs

<lange pause>

* Recv failure: Connection reset by peer
* OpenSSL SSL_connect: Connection reset by peer in connection to sub.<meine-domain>.de:443
* Closing connection 0
curl: (35) Recv failure: Connection reset by peer

Eine Idee, wo ich hier etwas vergessen haben könnte?
 
Bin bei sowas auch immer ein Freund von tcpdump auf dem Zielsystem und schauen ob/was da ankommt und ob/was und wohin die Antworten gehen.

Außerdem Firewall-Log auf der opnsense prüfen.
 
In den NPM Logs steht gar nichts, ich versuche noch heruaszufinden, wo ich das Logging hochdrehen kann.

In den Firewall Logs sehe ich keinen Unterschied zu HTTP und IPv4. TCP kommt rein, wird an die ULA des Containers weitergeleitet, fertig.

NPM Logs gefunden. HTTP und HTTPS über IPv4 taucht im Access Log auf. Sent-to 127.0.0.1. Beim HTTPS-Zugriff über IPv6 bleibt das Log leer.
 
IPv6 ist im Container nicht disabled? Das Docker-Netzwerk ist auch IPv6 fähig? Zeigt der NPM auch noch auf eine IPv6-Adresse oder nur auf IPv4. Letzteres sollte soweit mir bekannt eigentlich ausreichend sein.
 
Wie sollte ich denn via IPv6 auf Port 80 auf die Webseite zugreifen können, wenn im Container kein IPv6 aktiv wäre?

Der Container hat eine ULA wie alle Geräte in meinem Netzwerk. Und was auf der WAN-IP meines Routers auf Port 80 und Port 443 ankommt, wird an diese ULA weitergeleitet. Das Konstrukt ist so gebaut, da für diese WAN-IP der Reverse DNS-Eintrag gesetzt ist.

Nochmal: HTTP IPv6 funktioniert. HTTPS IPv6 hängt sich beim TLS Handshake auf.
 

Anhänge

  • waterfox_pNuvAOIYya.png
    waterfox_pNuvAOIYya.png
    37 KB · Aufrufe: 30
Habs jetzt nicht rauslesen können, was sagt tcpdump auf dem Zielsystem?
 
  • Gefällt mir
Reaktionen: redjack1000
CoMo schrieb:
Genau aus dem Grund habe ich doch Port Forwarding konfiguriert.
weil du mit ipv6 auch auf den internen geräten global gültige adressen hast und ein portforwarding nicht notwendig ist. bei ipv4 hast du intern private adressen und daher muss die anfrage auf port 80 deines routers mit der öffentlichen ip nach intern weitergeleitet werden -> port forwarding. mit ipv6 braucht man das nicht und die anfrage soll direkt an das gerät mit seiner öffentlichen ipv6 gehen. im router wird das bei ipv6 auch gerne als port forwarding bezeichnet, aber eigentlich ist das nur eine ausnahme in dessen firewall.
 
0x8100 schrieb:
mit ipv6 braucht man das nicht
Kann man aber trotzdem so machen und ich finde Docker mit IPv6 eh nervig, ohne mich groß damit auszukennen, und hab da aktuell auch ne ULA drauf. Vielleicht stelle ich das mal nach.
 
0x8100 schrieb:
im router wird das bei ipv6 auch gerne als port forwarding bezeichnet, aber eigentlich ist das nur eine ausnahme in dessen firewall.

Port Forwarding ist Port Forwarding. Warum sollte ich einen Port, der auf einer IPv6-Adresse angesprochen wird, nicht an eine andere IPv6-Adresse weiterleiten können. Noch mal: Ich tue genau das für Port 80 und es funktioniert.

Hier der Dump:

Code:
root@nginxproxymanager:~# tcpdump -v -i eth0 ip6 and tcp port 443
tcpdump: listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
18:24:26.448427 IP6 (flowlabel 0x1dc01, hlim 54, next-header TCP (6) payload length: 40) <externer-server>.de.44098 > fda6::<redacted>.https: Flags [SEW], cksum 0x38e0 (correct), seq 3815823478, win 43200, options [mss 1440,sackOK,TS val 384285234 ecr 0,nop,wscale 11], length 0
18:24:26.448450 IP6 (flowlabel 0x934d0, hlim 64, next-header TCP (6) payload length: 40) fda6::<redacted>.https > <externer-server>.de.44098: Flags [S.E], cksum 0x2adf (incorrect -> 0x4182), seq 2273708205, ack 3815823479, win 62160, options [mss 8892,sackOK,TS val 3052554878 ecr 384285234,nop,wscale 7], length 0
18:24:26.465493 IP6 (flowlabel 0x1dc01, hlim 54, next-header TCP (6) payload length: 32) <externer-server>.de.44098 > fda6::<redacted>.https: Flags [.], cksum 0x803f (correct), ack 1, win 22, options [nop,nop,TS val 384285252 ecr 3052554878], length 0
18:24:26.467998 IP6 (class 0x02, flowlabel 0x1dc01, hlim 54, next-header TCP (6) payload length: 549) <externer-server>.de.44098 > fda6::<redacted>.https: Flags [P.], cksum 0x7473 (correct), seq 1:518, ack 1, win 22, options [nop,nop,TS val 384285254 ecr 3052554878], length 517
18:24:26.468016 IP6 (flowlabel 0x934d0, hlim 64, next-header TCP (6) payload length: 32) fda6::<redacted>.https > <externer-server>.de.44098: Flags [.], cksum 0x2ad7 (incorrect -> 0x7c58), ack 518, win 482, options [nop,nop,TS val 3052554898 ecr 384285254], length 0
18:24:26.469180 IP6 (class 0x02, flowlabel 0x934d0, hlim 64, next-header TCP (6) payload length: 2505) fda6::<redacted>.https > <externer-server>.de.44098: Flags [P.], cksum 0x3480 (incorrect -> 0x6121), seq 1:2474, ack 518, win 482, options [nop,nop,TS val 3052554899 ecr 384285254], length 2473
18:24:26.486801 IP6 (flowlabel 0x1dc01, hlim 54, next-header TCP (6) payload length: 44) <externer-server>.de.44098 > fda6::<redacted>.https: Flags [.], cksum 0x1854 (correct), ack 1, win 22, options [nop,nop,TS val 384285273 ecr 3052554898,nop,nop,sack 1 {1429:2474}], length 0
18:24:26.494006 IP6 (flowlabel 0x934d0, hlim 64, next-header TCP (6) payload length: 1460) fda6::<redacted>.https > <externer-server>.de.44098: Flags [.], cksum 0x306b (incorrect -> 0xc8e3), seq 1:1429, ack 518, win 482, options [nop,nop,TS val 3052554924 ecr 384285273], length 1428
18:24:26.713979 IP6 (flowlabel 0xd1be7, hlim 64, next-header TCP (6) payload length: 1460) fda6::<redacted>.https > <externer-server>.de.44098: Flags [.], cksum 0x306b (incorrect -> 0xc807), seq 1:1429, ack 518, win 482, options [nop,nop,TS val 3052555144 ecr 384285273], length 1428
18:24:27.153968 IP6 (flowlabel 0xb0b4c, hlim 64, next-header TCP (6) payload length: 1460) fda6::<redacted>.https > <externer-server>.de.44098: Flags [.], cksum 0x306b (incorrect -> 0xc64f), seq 1:1429, ack 518, win 482, options [nop,nop,TS val 3052555584 ecr 384285273], length 1428
18:24:28.081973 IP6 (flowlabel 0x9bbf4, hlim 64, next-header TCP (6) payload length: 1460) fda6::<redacted>.https > <externer-server>.de.44098: Flags [.], cksum 0x306b (incorrect -> 0xc2af), seq 1:1429, ack 518, win 482, options [nop,nop,TS val 3052556512 ecr 384285273], length 1428
18:24:29.874014 IP6 (flowlabel 0xcf7e2, hlim 64, next-header TCP (6) payload length: 1460) fda6::<redacted>.https > <externer-server>.de.44098: Flags [.], cksum 0x306b (incorrect -> 0xbbaf), seq 1:1429, ack 518, win 482, options [nop,nop,TS val 3052558304 ecr 384285273], length 1428
18:24:33.394020 IP6 (flowlabel 0x34425, hlim 64, next-header TCP (6) payload length: 1460) fda6::<redacted>.https > <externer-server>.de.44098: Flags [.], cksum 0x306b (incorrect -> 0xadef), seq 1:1429, ack 518, win 482, options [nop,nop,TS val 3052561824 ecr 384285273], length 1428
18:24:40.434054 IP6 (flowlabel 0xfba45, hlim 64, next-header TCP (6) payload length: 1460) fda6::<redacted>.https > <externer-server>.de.44098: Flags [.], cksum 0x306b (incorrect -> 0x926f), seq 1:1429, ack 518, win 482, options [nop,nop,TS val 3052568864 ecr 384285273], length 1428
18:24:54.770001 IP6 (flowlabel 0xb1dbe, hlim 64, next-header TCP (6) payload length: 1460) fda6::<redacted>.https > <externer-server>.de.44098: Flags [.], cksum 0x306b (incorrect -> 0x5a6f), seq 1:1429, ack 518, win 482, options [nop,nop,TS val 3052583200 ecr 384285273], length 1428
18:25:22.930012 IP6 (flowlabel 0x939bf, hlim 64, next-header TCP (6) payload length: 1460) fda6::<redacted>.https > <externer-server>.de.44098: Flags [.], cksum 0x306b (incorrect -> 0xec6e), seq 1:1429, ack 518, win 482, options [nop,nop,TS val 3052611360 ecr 384285273], length 1428
18:25:26.466118 IP6 (flowlabel 0x939bf, hlim 64, next-header TCP (6) payload length: 32) fda6::<redacted>.https > <externer-server>.de.44098: Flags [F.], cksum 0x2ad7 (incorrect -> 0x883c), seq 2474, ack 518, win 482, options [nop,nop,TS val 3052614896 ecr 384285273], length 0
18:25:26.483649 IP6 (flowlabel 0x1dc01, hlim 54, next-header TCP (6) payload length: 44) <externer-server>.de.44098 > fda6::<redacted>.https: Flags [.], cksum 0x2df5 (correct), ack 1, win 22, options [nop,nop,TS val 384345270 ecr 3052554898,nop,nop,sack 1 {1429:2475}], length 0
18:25:26.483667 IP6 (flowlabel 0x939bf, hlim 64, next-header TCP (6) payload length: 1460) fda6::<redacted>.https > <externer-server>.de.44098: Flags [.], cksum 0x306b (incorrect -> 0xf42f), seq 1:1429, ack 518, win 482, options [nop,nop,TS val 3052614913 ecr 384345270], length 1428
18:25:26.706018 IP6 (flowlabel 0x6e60e, hlim 64, next-header TCP (6) payload length: 1460) fda6::<redacted>.https > <externer-server>.de.44098: Flags [.], cksum 0x306b (incorrect -> 0xf350), seq 1:1429, ack 518, win 482, options [nop,nop,TS val 3052615136 ecr 384345270], length 1428
18:25:27.146023 IP6 (flowlabel 0xb9a6a, hlim 64, next-header TCP (6) payload length: 1460) fda6::<redacted>.https > <externer-server>.de.44098: Flags [.], cksum 0x306b (incorrect -> 0xf198), seq 1:1429, ack 518, win 482, options [nop,nop,TS val 3052615576 ecr 384345270], length 1428
18:25:28.049990 IP6 (flowlabel 0xc3b9e, hlim 64, next-header TCP (6) payload length: 1460) fda6::<redacted>.https > <externer-server>.de.44098: Flags [.], cksum 0x306b (incorrect -> 0xee10), seq 1:1429, ack 518, win 482, options [nop,nop,TS val 3052616480 ecr 384345270], length 1428
18:25:29.841980 IP6 (flowlabel 0xddfe2, hlim 64, next-header TCP (6) payload length: 1460) fda6::<redacted>.https > <externer-server>.de.44098: Flags [.], cksum 0x306b (incorrect -> 0xe710), seq 1:1429, ack 518, win 482, options [nop,nop,TS val 3052618272 ecr 384345270], length 1428
18:25:33.361984 IP6 (flowlabel 0xacb9b, hlim 64, next-header TCP (6) payload length: 1460) fda6::<redacted>.https > <externer-server>.de.44098: Flags [.], cksum 0x306b (incorrect -> 0xd950), seq 1:1429, ack 518, win 482, options [nop,nop,TS val 3052621792 ecr 384345270], length 1428
18:25:40.850038 IP6 (flowlabel 0xbbaa6, hlim 64, next-header TCP (6) payload length: 1460) fda6::<redacted>.https > <externer-server>.de.44098: Flags [.], cksum 0x306b (incorrect -> 0xbc10), seq 1:1429, ack 518, win 482, options [nop,nop,TS val 3052629280 ecr 384345270], length 1428
18:25:48.212779 IP6 (flowlabel 0x1dc01, hlim 54, next-header TCP (6) payload length: 44) <externer-server>.de.44098 > fda6::<redacted>.https: Flags [F.], cksum 0xd912 (correct), seq 518, ack 1, win 22, options [nop,nop,TS val 384366999 ecr 3052554898,nop,nop,sack 1 {1429:2475}], length 0
18:25:48.212799 IP6 (flowlabel 0xbbaa6, hlim 64, next-header TCP (6) payload length: 32) fda6::<redacted>.https > <externer-server>.de.44098: Flags [.], cksum 0x2ad7 (incorrect -> 0xf409), ack 519, win 482, options [nop,nop,TS val 3052636642 ecr 384366999], length 0

Mehr kommt nicht.

<externer-server> ist mein VPS, von dem aus ich meine Seite aufrufe.

Wenn ich den tcpdump auf Port 80 ansetze, sehe ich da meine Header und den Rest der HTML-Seite durchrauschen.
 
Also hier geht es 😁, getestet mit dem Smartphone und das NAT für IPv4 mal kurz deaktiviert, um IPv6 zu erzwingen.

Also NAT IPv6 WAN-IP auf ULA des Docker-Hosts, auf dem wiederum NPM läuft, der sich wiederum auf eine IPv4-Adresse verbindet.
Ergänzung ()

Funktioniert bei mir auch mit NPt, welches das "bessere" NAT für IPv6 ist.
Ergänzung ()

Disclaimer: Hab aber alles nur mit IPv6 und HTTPS getestet.
 
Zuletzt bearbeitet:
Zurück
Oben