
Ich habe ein Problem mit IPv6 auf meinem Server. Ich habe nginx so konfiguriert, dass es auf Port 443 von IPv4 und IPv6 lauscht. Und es funktioniert großartig: Meine Website ist über das Internet mit aktiviertem TLS verfügbar.
Kompliziert wird es, wenn ich nftables aktiviere:Wenn ich über IPv4 auf meine Website zugreife, funktioniert es, aber wenn ich über IPv6 darauf zugreife, tritt eine Zeitüberschreitung der Verbindung auf :(
Ausgabe von sudo nft list ruleset
:
table inet filter {
chain INPUT {
type filter hook input priority filter; policy drop;
meta nftrace set 1
ct state established,related accept comment "allow established connections"
iif "lo" accept comment "allow all from localhost"
iif != "lo" ip daddr 127.0.0.0/8 counter packets 0 bytes 0 drop comment "drop connections to loopback not coming from loopback"
iif != "lo" ip6 daddr ::1 counter packets 0 bytes 0 drop comment "drop connections to loopback not coming from loopback"
iifname "tunnel0" accept comment "allow all from VPN"
udp dport 12345 accept comment "allow VPN on port 12345"
tcp dport { 22, 80, 443 } accept comment "allow HTTP, HTTPS and SSH on classic ports"
}
chain OUTPUT {
type filter hook output priority filter; policy accept;
}
chain FORWARD {
type filter hook forward priority filter; policy drop;
}
}
Ausgabe von sudo nft monitor trace | grep 443
:
trace id 76d7cb1a inet filter INPUT packet: iif "eth0" ether saddr AA:AA:AA:AA:AA:AA ether daddr BB:BB:BB:BB:BB:BB ip6 saddr 2a01:cb09:804b:cd61:CCCC:CCCC:CCCC:CCCC ip6 daddr 2001:CCCC:CCCC:CCCC::CCCC ip6 dscp cs0 ip6 ecn not-ect ip6 hoplimit 45 ip6 flowlabel 0 ip6 nexthdr tcp ip6 length 40 tcp sport 53184 tcp dport 443 tcp flags == syn tcp window 22240
Beachten Sie, dass ich dieses Problem mit SSH auf Port 22 nicht habe. Ich verwende nftables v0.9.8 (E.D.S.)
Debian 11.
Ich habe fast einen Tag damit verbracht, nach der Lösung zu suchen. Jede Hilfe ist willkommen! Danke
Antwort1
ICMPv6, ein Protokoll über IPv6, implementiert die Link-Layer-Auflösung mittels Multicast und Unicast. Wird ICMPv6 gelöscht, ist keine Auflösung mehr verfügbar: Knoten können keine anderen Knoten im selben LAN finden. Dies gilt auch für den Upstream-IPv6-Router, der nicht mehr über IPv6 mit dem Linux-System kommunizieren kann, wenn ICMPv6 gelöscht wird.
Im Gegensatz dazu basiert IPv4 auf einem anderen Protokoll: ARP (unter Verwendung von Broadcast und Unicast), das nicht über IPv4 läuft. Man kann also ICMP komplett weglassen und hat keine Probleme mit der LAN-Konnektivität, da ARP nicht betroffen ist (aber man kann immer noch unterPMTU-Schwarzes Lochund andere ähnliche Probleme beim Löschen des gesamten ICMP, insbesondere bei Verwendung von Tunneln).
Aktivieren Sie zunächst ICMPv6 vollständig. Wenn Sie dann ein zweites Mal überprüft haben, ob IPv6 wieder funktioniert, prüfen Sie, was Sie selektiv akzeptieren möchten, falls Sie nicht alles aktivieren möchten.Neighbor Discovery-Protokoll(für einen Nicht-Routing-Knoten würde ich sagen, mindestens die Typen 134, 135, 136 und 137):
nft add rule inet filter INPUT 'icmpv6 type { 134, 135, 136, 137 } accept'
Antwort2
Das hat bei mir geholfen:
table inet filter {
chain INPUT {
type filter hook input priority 0; policy drop;
meta l4proto ipv6-icmp accept
ip6 ecn not-ect accept
# Although I used the slightly more restrictive:
# ip6 ecn not-ect ip6 hoplimit 1 accept
}
}
Beachten Sie, dass das von Ihnen erfasste Paket ein ECN-Paket ist, genau wie meines (außer dass meines IP6-Hoplimit 1 von einem Link-Local-fe80::/10-Saddr hat, während Ihres IP6-Hoplimit 45 hat). Es scheint, dass dieses Paket akzeptiert werden muss, um von meinem ISP (Spectrum Broadband) einen IPv6-Block zugewiesen zu bekommen, und möglicherweise haben Sie ähnliche Schwierigkeiten im Zusammenhang mit diesen ECN-Paketen.