在 nft 中使用自定义表

在 nft 中使用自定义表

我有一个 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命令。

我无法使用nftcli 向现有表添加规则,因为这会破坏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的链提供的访问权限。rejectdrop

判决accept仅在其发生的链中有效,并且不会阻止数据包处理在更高优先级的链中继续进行。

换句话说,如果你有这样的链:

table ip filter {
        chain INPUT {
                type filter hook input priority 0; policy accept;
                reject with icmp type host-prohibited
        }
}

无法通过创建额外的链来授予访问权限。覆盖该reject规则的唯一方法是添加其他规则在同一个链中

答案2

这有点猜测。

  • nft版本中没有跳转伪装。
  • 需要配置反向吗?

相关内容