如何编写 nfttables snat 规则?

如何编写 nfttables snat 规则?

设置:

  1. Linux(已在 LEDE、OpenWrt、Ubuntu 16 上尝试过)
  2. iptables 已禁用(内核模块已卸载)
  3. nftables(尝试过 v.0.8、0.8.2)
  4. 链和 NAT 是根据官方 nftables 维基

    % nft add table nat
    % nft add chain nat prerouting { type nat hook prerouting priority 0 \; }
    % nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
    

通过这种设置,dnat 可以按预期运行,例如:

% nft add rule nat prerouting tcp dport 15000 dnat 192.168.0.50:20000

将所有传入的 TCP 数据包从端口 15000 重定向到 192.168.0.50:20000 并返回。

但是,没有处理任何 snat 规则(以下规则均不处理):

% nft add rule nat postrouting counter ip saddr 192.168.0.50 snat 1.2.3.4
% nft add rule nat postrouting counter tcp sport 20000 snat 1.2.3.4:1234
% nft add rule nat postrouting counter ip protocol tcp drop

我已单独或以变体形式尝试了这些规则(oif、ip+tcp 等)- 数据包仍按原样通过(WireShark 已证明)或未被丢弃。不过:

  1. 后路由链已被处理,因为如果我删除后路由链,dnat(通过预路由)将停止工作(如预期的那样)。
  2. 向输入或输出链添加删除规则是可行的。
  3. type nat hook input/output根据添加链AB 的建议仍然没有解决问题。

那么,如何编写 nftables snat 规则?

相关内容