我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 firewall
,ping6
立即开始按预期工作。如果我然后重新建立 ip6 防火墙表,IPv6 连接不会立即失败,但等待几分钟我发现ping6
命令返回上述错误。
我的托管服务提供商没有在网络级别提供任何 IPv6 自动配置或路由器广告。
以前有人见过这样的事情吗?
我猜你已经破坏了邻居发现。最初,事情继续工作,因为您已经在邻居发现缓存中拥有了东西,但后来条目超时。
您似乎允许邻居请求消息,但不允许邻居广告消息。
您正在删除太多 ICMPv6 类型。由于 ,应该允许大多数错误消息
state established,related
,但是您正在删除邻居广告和路由器广告。试试这个:它将允许未经请求的 NA 和 RA 进入,这可能会解决您的问题。
如果您想确保错误消息也能通过(我没有测试是否
state established,related
确实适用于所有 ICMPv6 错误消息),那么还要添加这些:不应该是必要的,但以防万一:)丢弃 ICMPv6 错误消息会导致严重的延迟甚至阻塞连接,所以最好避免这种情况:)