NFTABLE 문제: IPv6은 미러 구성을 사용하는 IPv4처럼 작동하지 않습니다.

NFTABLE 문제: IPv6은 미러 구성을 사용하는 IPv4처럼 작동하지 않습니다.

내 서버의 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 패킷과 관련하여 비슷한 어려움을 겪고 있을 것입니다.

관련 정보