nftables: IPv6-NAT-Pakete gelangen nicht in die Weiterleitungskette, aber das zurückgegebene Ziel ist nicht erreichbar

nftables: IPv6-NAT-Pakete gelangen nicht in die Weiterleitungskette, aber das zurückgegebene Ziel ist nicht erreichbar

Ich richte NAT für IPv6 auf einem OpenWrt-Router (22.03.0-rc4) ein, da mein ISP nur eine einzige IPv6-Adresse über DHCPv6 zuweist und nur einer MAC-Adresse erlaubt, eine einzige IPv6-Adresse zu verwenden, die zuletzt über DHCPv6 erhalten wurde (Pakete mit anderen Adressen werden gelöscht).

Die neueste Version von OpenWrt verwendet Firewall4 + nftables, daher habe ich beschlossen, die alten ip6tables vollständig zu entfernen und die neuen zu verwenden. Ich habe es geschafft, dem Router Zugriff auf das IPv6-Internet zu gewähren und den Clients im LAN IPv6-Adressen (ULA-Adressen) zuzuweisen, aber als ich sie masq6für Clients im LAN konfigurierte, funktionierte NAT6 nicht.

Wenn ich Wireshark auf meinem PC ausführe, wird angezeigt, dass alle Pakete, die zum Routing an den Router gesendet wurden, mit der Meldung „Ziel nicht erreichbar (keine Route zum Host)“ abgelehnt wurden. Als ich zur nftables-Verfolgung ging, bemerkte ich, dass KEIN IPv6-PAKET von LAN-Hosts jemals die Weiterleitungskette erreicht hat. Diese Pakete erreichten die Zielkette (beim Prerouting) und verschwanden aus der Verfolgung, wodurch dem PC die Meldung „Ziel nicht erreichbar“ zurückgegeben wurde. Selbst wenn ich eine neue Kette forwardmit einer Priorität von -1000 erstelle, ist kein IPv6-Paket zu sehen.

Tatsächlich habe ich es gestern geschafft, es zum Laufen zu bringen (ich habe aber vergessen, wie), aber nach einem Reset des Routers funktioniert es wieder nicht.

Ich bezweifle, dass ein Kernelmodul fehlt oder Konflikte verursacht, daher hier mein lsmod:

cfg80211              298812  5 mt7615_common,mt7603e,mt76_connac_lib,mt76,mac80211
cmac                    2546  2 
compat                  1358  2 mac80211,cfg80211,[permanent]
crc_ccitt               1774  1 ppp_async
crc32c_generic          1458  1 
drbg                   17586  0 
gpio_button_hotplug     6674  0 
hmac                    2578  0 
hwmon                   8038  1 mt7615_common
ip_tables              11645  0 
ip6_tables             11331  0 
jitterentropy_rng       7561  0 
leds_gpio               3250  0 
libcrc32c                727  1 nf_tables
libsha256               8772  1 sha256_generic
mac80211              557288  5 mt7615e,mt7615_common,mt7603e,mt76_connac_lib,mt76
mt76                   48100  4 mt7615e,mt7615_common,mt7603e,mt76_connac_lib
mt76_connac_lib        26897  2 mt7615e,mt7615_common
mt7603e                40284  0 
mt7615_common          68934  1 mt7615e
mt7615e                11469  0 
netatop                35215  0 
nf_conntrack           71239  8 nft_redir,nft_nat,nft_masq,nft_flow_offload,nft_ct,nf_nat,nf_flow_table,nf_conntrack_bridge
nf_conntrack_bridge     3346  0 
nf_defrag_ipv4          1273  1 nf_conntrack
nf_defrag_ipv6          6036  2 nf_conntrack_bridge,nf_conntrack
nf_flow_table          23615  4 nf_flow_table_ipv6,nf_flow_table_ipv4,nf_flow_table_inet,nft_flow_offload
nf_flow_table_inet       658  0 
nf_flow_table_ipv4       530  0 
nf_flow_table_ipv6       530  0 
nf_log_common           3064  2 nf_log_ipv6,nf_log_ipv4
nf_log_ipv4             3762  0 
nf_log_ipv6             4050  0 
nf_nat                 24974  4 nft_redir,nft_nat,nft_masq,nft_chain_nat
nf_reject_ipv4          2601  3 nft_reject_ipv4,nft_reject_inet,nft_reject_bridge
nf_reject_ipv6          2926  3 nft_reject_ipv6,nft_reject_inet,nft_reject_bridge
nf_tables             153615203 nft_fib_inet,nf_flow_table_ipv6,nf_flow_table_ipv4,nf_flow_table_inet,nft_reject_ipv6,nft_reject_ipv4,nft_reject_inet,nft_reject_bridge,nft_reject,nft_redir,nft_quota,nft_objref,nft_numgen,nft_nat,nft_meta_bridge,nft_masq,nft_log,nft_limit,nft_hash,nft_flow_offload,nft_fib_ipv6,nft_fib_ipv4,nft_fib,nft_ct,nft_counter,nft_compat,nft_chain_nat
nfnetlink               5761  2 nft_compat,nf_tables
nft_chain_nat            946  2 
nft_compat              5874  0 
nft_counter             2226 18 
nft_ct                  7538  3 
nft_fib                 1622  3 nft_fib_inet,nft_fib_ipv6,nft_fib_ipv4
nft_fib_inet             754  0 
nft_fib_ipv4            2197  1 nft_fib_inet
nft_fib_ipv6            2869  1 nft_fib_inet
nft_flow_offload        3442  0 
nft_hash                2578  0 
nft_limit               3634  5 
nft_log                 1810  0 
nft_masq                1938  2 
nft_meta_bridge         1426  0 
nft_nat                 2738  0 
nft_numgen              1826  0 
nft_objref              1746  0 
nft_quota               2098  0 
nft_redir               1906  0 
nft_reject              1383  4 nft_reject_ipv6,nft_reject_ipv4,nft_reject_inet,nft_reject_bridge
nft_reject_bridge       4178  0 
nft_reject_inet         1234  2 
nft_reject_ipv4          754  0 
nft_reject_ipv6          754  0 
ppp_async               7330  0 
ppp_generic            25903  3 pppoe,ppp_async,pppox
pppoe                   9714  0 
pppox                   1520  1 pppoe
seqiv                   1682  0 
sha256_generic          2557  0 
slhc                    5538  1 ppp_generic
x_tables               17341  3 nft_compat,ip6_tables,ip_tables

und hier ist meins nft list ruleset:

table inet fw4 {
        chain input {
                type filter hook input priority filter; policy accept;
                iifname "lo" accept comment "!fw4: Accept traffic from loopback"
                ct state established,related accept comment "!fw4: Allow inbound established and related flows"
                tcp flags syn / fin,syn,rst,ack jump syn_flood comment "!fw4: Rate limit TCP syn packets"
                iifname "br-lan" jump input_lan comment "!fw4: Handle lan IPv4/IPv6 input traffic"
                iifname "wan" jump input_wan comment "!fw4: Handle wan IPv4/IPv6 input traffic"
        }

        chain forward {
                type filter hook forward priority filter; policy drop;
                ct state established,related accept comment "!fw4: Allow forwarded established and related flows"
                iifname "br-lan" jump forward_lan comment "!fw4: Handle lan IPv4/IPv6 forward traffic"
                iifname "wan" jump forward_wan comment "!fw4: Handle wan IPv4/IPv6 forward traffic"
                jump handle_reject
        }

        chain output {
                type filter hook output priority filter; policy accept;
                oifname "lo" accept comment "!fw4: Accept traffic towards loopback"
                ct state established,related accept comment "!fw4: Allow outbound established and related flows"
                meta l4proto tcp counter packets 0 bytes 0 comment "!fw4: @rule[9]"
                meta l4proto udp counter packets 27 bytes 2192 comment "!fw4: @rule[9]"
                oifname "br-lan" jump output_lan comment "!fw4: Handle lan IPv4/IPv6 output traffic"
                oifname "wan" jump output_wan comment "!fw4: Handle wan IPv4/IPv6 output traffic"
        }

        chain handle_reject {
                meta l4proto tcp reject with tcp reset comment "!fw4: Reject TCP traffic"
                reject comment "!fw4: Reject any other traffic"
        }

        chain syn_flood {
                limit rate 25/second burst 50 packets return comment "!fw4: Accept SYN packets below rate-limit"
                drop comment "!fw4: Drop excess packets"
        }

        chain input_lan {
                jump accept_from_lan
        }

        chain output_lan {
                jump accept_to_lan
        }

        chain forward_lan {
                jump accept_to_wan comment "!fw4: Accept lan to wan forwarding"
                jump accept_to_lan
        }

        chain accept_from_lan {
                iifname "br-lan" counter packets 252 bytes 19093 accept comment "!fw4: accept lan IPv4/IPv6 traffic"
        }

        chain accept_to_lan {
                oifname "br-lan" counter packets 105 bytes 7472 accept comment "!fw4: accept lan IPv4/IPv6 traffic"
        }

        chain input_wan {
                meta nfproto ipv4 udp dport 68 counter packets 0 bytes 0 accept comment "!fw4: Allow-DHCP-Renew"
                icmp type echo-request counter packets 0 bytes 0 accept comment "!fw4: Allow-Ping"
                meta nfproto ipv4 meta l4proto igmp counter packets 0 bytes 0 accept comment "!fw4: Allow-IGMP"
                meta nfproto ipv6 udp dport 546-547 counter packets 0 bytes 0 accept comment "!fw4: Allow-DHCPv6"
                ip6 saddr fe80::/10 icmpv6 type . icmpv6 code { mld-listener-query . no-route, mld-listener-report . no-route, mld-listener-done . no-route, mld2-listener-report . no-route } counter packets 0 bytes 0 accept comment "!fw4: Allow-MLD"
                icmpv6 type { destination-unreachable, time-exceeded, echo-request, echo-reply, nd-router-solicit, nd-router-advert } limit rate 1000/second counter packets 0 bytes 0 accept comment "!fw4: Allow-ICMPv6-Input"
                icmpv6 type . icmpv6 code { packet-too-big . no-route, parameter-problem . no-route, nd-neighbor-solicit . no-route, nd-neighbor-advert . no-route, parameter-problem . admin-prohibited } limit rate 1000/second counter packets 20 bytes 1440 accept comment "!fw4: Allow-ICMPv6-Input"
                jump reject_from_wan
        }

        chain output_wan {
                jump accept_to_wan
        }

        chain forward_wan {
                icmpv6 type { destination-unreachable, time-exceeded, echo-request, echo-reply } limit rate 1000/second counter packets 0 bytes 0 accept comment "!fw4: Allow-ICMPv6-Forward"
                icmpv6 type . icmpv6 code { packet-too-big . no-route, parameter-problem . no-route, parameter-problem . admin-prohibited } limit rate 1000/second counter packets 0 bytes 0 accept comment "!fw4: Allow-ICMPv6-Forward"
                meta l4proto esp counter packets 0 bytes 0 jump accept_to_lan comment "!fw4: Allow-IPSec-ESP"
                udp dport 500 counter packets 0 bytes 0 jump accept_to_lan comment "!fw4: Allow-ISAKMP"
                jump reject_to_wan
        }

        chain accept_to_wan {
                oifname "wan" counter packets 2123 bytes 133725 accept comment "!fw4: accept wan IPv4/IPv6 traffic"
        }

        chain reject_from_wan {
                iifname "wan" counter packets 0 bytes 0 jump handle_reject comment "!fw4: reject wan IPv4/IPv6 traffic"
        }

        chain reject_to_wan {
                oifname "wan" counter packets 0 bytes 0 jump handle_reject comment "!fw4: reject wan IPv4/IPv6 traffic"
        }

        chain dstnat {
                type nat hook prerouting priority dstnat; policy accept;
        }

        chain srcnat {
                type nat hook postrouting priority srcnat; policy accept;
                oifname "wan" jump srcnat_wan comment "!fw4: Handle wan IPv4/IPv6 srcnat traffic"
        }

        chain srcnat_wan {
                meta nfproto ipv4 masquerade comment "!fw4: Masquerade IPv4 wan traffic"
                meta nfproto ipv6 masquerade comment "!fw4: Masquerade IPv6 wan traffic"
        }

        chain raw_prerouting {
                type filter hook prerouting priority raw; policy accept;
                iifname "br-lan" jump helper_lan comment "!fw4: lan IPv4/IPv6 CT helper assignment"
        }

        chain raw_output {
                type filter hook output priority raw; policy accept;
        }

        chain helper_lan {
        }

        chain mangle_prerouting {
                type filter hook prerouting priority mangle; policy accept;
        }

        chain mangle_postrouting {
                type filter hook postrouting priority mangle; policy accept;
        }

        chain mangle_input {
                type filter hook input priority mangle; policy accept;
        }

        chain mangle_output {
                type route hook output priority mangle; policy accept;
        }

        chain mangle_forward {
                type filter hook forward priority mangle; policy accept;
                iifname "wan" tcp flags syn tcp option maxseg size set rt mtu comment "!fw4: Zone wan IPv4/IPv6 ingress MTU fixing"
                oifname "wan" tcp flags syn tcp option maxseg size set rt mtu comment "!fw4: Zone wan IPv4/IPv6 egress MTU fixing"
        }
}

Das sysctl.confist der Standard von OpenWrt (brauche ich das wan.accept_ra = 2?):

net.core.bpf_jit_enable=1

net.ipv4.conf.default.arp_ignore=1
net.ipv4.conf.all.arp_ignore=1
net.ipv4.ip_forward=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_responses=1
net.ipv4.igmp_max_memberships=100
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=120
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_sack=1
net.ipv4.tcp_dsack=1

net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1

Eine schnelle Google-Suche hat keine entsprechenden Angaben zu „v4 NAT funktioniert, aber v6 NAT funktioniert nicht“ ergeben. Verlinkter Beitrag im OpenWrt-Forum:https://forum.openwrt.org/t/ipv6-nat-in-v22-03-0-rc4-with-nftables-packets-not-flowing-into-forward-chain/130653

Lassen Sie mich wissen, ob nft monitor traceein Ergebnis oder ein PCAP erforderlich ist. Jede Hilfe wäre willkommen.

Antwort1

Es funktioniert tatsächlich, nachdem ich net.ipv6.conf.wan.accept_ra = 2es hinzugefügt habe /etc/sysctl.conf. Danke an @user1686!

verwandte Informationen