我的 nftables 规则阻止 IPv6

我的 nftables 规则阻止 IPv6

我的防火墙规则nftables.conf只需运行flush ruleset即可include。我从 Arch Wiki 复制了这些规则。因此,包含的内容firewall.rules包括:

# An iptables-like firewall

table firewall {
  chain incoming {
    type filter hook input priority 0;

    # established/related connections
    ct state established,related accept

    # invalid connections
    ct state invalid drop

    # loopback interface
    iifname lo accept

    # icmp
    icmp type echo-request accept

    # open tcp ports
    tcp dport {http, https, ...} accept

    # open udp ports
    udp dport {...} accept

    # drop everything else
    drop
  }
}

table ip6 firewall {
  chain incoming {
    type filter hook input priority 0;

    # established/related connections
    ct state established,related accept

    # invalid connections
    ct state invalid drop

    # loopback interface
    iifname lo accept

    # icmp
    icmpv6 type {echo-request,nd-neighbor-solicit,nd-router-solicit,mld-listener-query} accept

    # open tcp ports
    tcp dport {http, https, ....} accept

    # open udp ports
    udp dport {...} accept

    # drop everything else
    drop
  }
}

因此,当所有内容都加载后,我无法使用 IPv6,ping6错误

From ams16s21-in-x0e.1e100.net icmp_seq=1 Destination unreachable: Address unreachable

但是,如果我运行sudo nft flush table ip6 firewallping6它会立即按预期开始工作。如果我随后重新建立 ip6 防火墙表,IPv6 连接不会立即失败,但等待几分钟后,我发现命令ping6返回了上述错误。

我的托管服务提供商不提供网络级别的任何 IPv6 自动配置或路由器广告。

以前有人见过类似的事情吗?

答案1

IPv6 连接不会立即失败,但等待几分钟后我发现 ping6 命令返回上述错误。

我猜你破坏了邻居发现。最初一切正常,因为你已经在邻居发现缓存中拥有一些东西,但后来条目超时了。

您似乎允许邻居征求消息,但不允许邻居广告消息。

答案2

您丢弃了太多 ICMPv6 类型。由于 ,大多数错误消息应该被允许进入state established,related,但您丢弃了邻居通告和路由器通告。试试这个:

icmpv6 type {echo-request,nd-neighbor-solicit,nd-neighbor-advert,nd-router-solicit,
             nd-router-advert,mld-listener-query} accept

它将允许未经请求的 NA 和 RA 进入,这可能会解决您的问题。

如果您想确保错误消息也能通过(我没有测试它是否state established,related适用于所有 ICMPv6 错误消息),那么还要添加以下内容:

icmpv6 type {echo-request,nd-neighbor-solicit,nd-neighbor-advert,nd-router-solicit,
             nd-router-advert,mld-listener-query,destination-unreachable,
             packet-too-big,time-exceeded,parameter-problem} accept

这不是必要的,但以防万一 :) 丢弃 ICMPv6 错误消息将导致严重延迟甚至阻塞连接,因此最好避免这种情况 :)

相关内容