
내 서버의 IPv6에 문제가 있습니다. IPv4 및 IPv6에서 포트 443을 수신하도록 nginx를 구성했습니다. 그리고 그것은 훌륭하게 작동합니다. 내 웹사이트는 TLS가 활성화된 인터넷에서 사용할 수 있습니다.
nftables를 활성화하면 상황이 복잡해집니다.IPv4에서 웹 사이트에 액세스하면 작동하지만 IPv6에서 액세스하면 연결 시간이 초과됩니다.
출력 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;
}
}
출력 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
참고 포트 22의 ssh에는 이 문제가 없습니다. nftables v0.9.8 (E.D.S.)
Debian 11에서 실행 중입니다.
나는 해결책을 찾는 데 거의 하루를 보냈습니다. 어떤 도움이라도 환영합니다! 감사하다
답변1
IPv6를 통한 프로토콜인 ICMPv6은 멀티캐스트와 유니캐스트를 사용하여 링크 계층 해상도를 구현합니다. ICMPv6을 삭제하면 더 이상 사용할 수 있는 해결 방법이 없습니다. 노드는 동일한 LAN에서 다른 노드를 찾을 수 없습니다. 여기에는 ICMPv6이 삭제된 경우 IPv6를 사용하여 Linux 시스템과 통신할 수 없는 업스트림 IPv6 라우터가 포함됩니다.
대조적으로 IPv4는 IPv4를 통하지 않는 다른 프로토콜인 ARP(브로드캐스트 및 유니캐스트 사용)를 사용합니다. 따라서 ICMP를 모두 삭제해도 ARP는 영향을 받지 않으므로 LAN 연결 문제가 발생하지 않습니다(그러나 여전히 문제가 발생할 수 있음).PMTU 블랙홀특히 터널을 사용할 때 모든 ICMP를 삭제할 때 기타 유사한 문제가 발생합니다.
따라서 ICMPv6을 모두 활성화한 후 두 번째로 IPv6가 다시 작동하는지 확인한 후 모든 것을 활성화하지 않으려면 선택적으로 허용할 항목을 확인하십시오.이웃 발견 프로토콜(비라우팅 노드의 경우 최소한 유형 134, 135, 136 및 137이라고 말하겠습니다):
nft add rule inet filter INPUT 'icmpv6 type { 134, 135, 136, 137 } accept'
답변2
이것은 나를 위해 트릭을 수행했습니다.
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
}
}
캡처한 패킷은 내 패킷과 마찬가지로 ECN 패킷입니다(단, 내 패킷에는 링크 로컬 fe80::/10 saddr의 ip6 hoplimit 1이 있고 귀하의 패킷에는 ip6 hoplimit 45가 있습니다). 내 ISP(Spectrum Broadband)에서 IPv6 블록을 할당받으려면 이 패킷을 수락해야 하는 것 같습니다. 아마도 귀하도 이러한 ECN 패킷과 관련하여 비슷한 어려움을 겪고 있을 것입니다.