我有一个 Fedora 31 系统,正在使用iptables-nft
.我需要这个,因为仍然有很多软件需要旧版iptables
命令行工具。这意味着我的 nftables 配置具有相应的一组表来匹配旧配置:
table ip filter
table ip nat
table ip6 filter
table ip mangle
table ip6 nat
table ip6 mangle
我使用容器化 VPN 服务,在 nftables 之前,该服务可以通过在 VPN 启动时运行类似以下内容来在我的主以太网接口上启用伪装:
iptables -t nat -A POSTROUTING -s 172.16.254.0/24 -o eth0 -j MASQUERADE
自从升级到 Fedora 31 和 以来iptables-nft
,这不再有效。容器(运行 alpine)没有iptables-nft
兼容性包装器,但它本身有nft
命令。
我无法使用nft
cli 向现有表添加规则,因为这会破坏iptables-nft
.但是我能创建新表。我希望我可以应用这样的配置:
table ip vpn {
chain postrouting {
type nat hook postrouting priority filter; policy accept;
ip saddr 172.16.254.0/24 oifname "eth0" counter masquerade
}
chain forward {
type filter hook forward priority filter; policy accept;
ip saddr 172.16.254.0/24 counter accept
}
}
……但这似乎没有任何影响。通过将此表中的链设置为优先级 0,我希望它们能够匹配前旧nat
表,但情况似乎并非如此。
有办法让这项工作发挥作用吗?
答案1
经过在 irc 频道上的一些讨论后#netfilter
,事实证明事情是“按设计”运行的。这是不是一条链可以提供更广泛的访问(以规则的形式)比具有(或)规则accept
的链提供的访问权限。reject
drop
判决accept
仅在其发生的链中有效,并且不会阻止数据包处理在更高优先级的链中继续进行。
换句话说,如果你有这样的链:
table ip filter {
chain INPUT {
type filter hook input priority 0; policy accept;
reject with icmp type host-prohibited
}
}
无法通过创建额外的链来授予访问权限。覆盖该reject
规则的唯一方法是添加其他规则在同一个链中。
答案2
这有点猜测。
- nft版本中没有跳转伪装。
- 需要配置反向吗?