如何为IPv6添加NFT SNAT规则?路由器配置报错求助
nftables IPv6 SNAT 正确配置方案
错误原因排查
- 首次报错:SNAT目标地址不能加
/64掩码后缀,同时ip6参数位置不符合语法规范 - 二次报错:未指定地址族时默认操作的是IPv4的nat表,无法识别IPv6地址
- 三次报错:
ip6是网络层匹配字段,oifname属于元数据匹配字段,二者位置写反不符合语法要求
配置步骤
前置操作(首次配置需执行,已有对应表链可跳过)
创建IPv6地址族的nat表及postrouting链:
nft add table ip6 nat nft add chain ip6 nat postrouting { type nat hook postrouting priority 100 \; }
写入SNAT规则
所有从enp1s0发出的IPv6数据包,源地址转换为指定地址:
nft add rule ip6 nat postrouting oifname "enp1s0" snat to 2401:fb00:0:1ff::32d
双栈场景(同时管理IPv4/IPv6 nat规则)可选配置
如果使用inet双栈地址族统一管理nat规则,使用如下命令:
# 先创建双栈nat表及链 nft add table inet nat nft add chain inet nat postrouting { type nat hook postrouting priority 100 \; } # 仅匹配IPv6流量执行SNAT nft add rule inet nat postrouting meta oifname "enp1s0" ip6 saddr != 2401:fb00:0:1ff::32d snat ip6 to 2401:fb00:0:1ff::32d
验证方式
执行nft list ruleset查看规则是否正常写入,通过tcpdump -i enp1s0 icmp6抓取出口IPv6报文,确认源地址已替换为指定地址即可。
内容的提问来源于stack exchange,提问作者Mani Varma Indukuri
相关产品推荐
相关产品推荐

