OpenWrt 22.03下iptables 1:1 NAT规则迁移至nftables求助
迁移OpenVPN站点到站点VPN的NAT规则至nftables
原有iptables规则解析
两条规则实现网段映射(NETMAP),用于OpenVPN隧道(tun+接口)两端的网段转换:
- 对从tun接口进来、目标为
10.2.1.0/24的流量,将目标网段映射为192.168.1.0/24 - 对从本地
192.168.1.0/24发往tun接口的流量,将源网段映射为10.2.1.0/24
正确的nftables配置
你的配置存在三个核心问题:链类型错误、缺少接口匹配、NETMAP语法不正确。以下是修正后的配置:
table ip nat { chain prerouting { type nat hook prerouting priority -100; policy accept; iifname "tun+" ip daddr 10.2.1.0/24 dnat to net 192.168.1.0/24 } chain postrouting { type nat hook postrouting priority 100; policy accept; oifname "tun+" ip saddr 192.168.1.0/24 snat to net 10.2.1.0/24 } }
关键修改说明
- 链类型修正:nat表的prerouting和postrouting链必须设置为
type nat,而非type filter - 接口匹配:添加
iifname "tun+"(匹配入站tun接口)和oifname "tun+"(匹配出站tun接口),对应原iptables的-i tun+/-o tun+规则 - NETMAP语法:nftables中实现网段映射需要用
dnat to net和snat to net,而非直接指定网段
配置生效方法
在OpenWrt中,将上述内容保存为/etc/nftables.d/99-vpn-nat.conf,然后执行以下命令生效:
nft -f /etc/nftables.d/99-vpn-nat.conf
或重启nftables服务:
/etc/init.d/nftables restart
内容的提问来源于stack exchange,提问作者dex.404
相关产品推荐
相关产品推荐

