我的局域网中有一些家庭服务器,通过adsl连接到互联网我的路由器是一个基于linux的x86服务器,我在上面写了脚本几个月前,我将脚本更新为nftables。。。
它在ipv4中运行良好…
有一天,我发现我的isp通过dhcp-pd提供ipv6由于ipv6地址可能会更改,因此很难在服务器上设置静态全局ipv6地址。然后我正在考虑使用唯一的本地地址。我需要这样的东西:ip6tables-t nat-A POSTROUTING-o eth0-s fc00::/64-j NETMAP--到2006::/64将地址nat为全局地址(并使用适当的dnat规则(但我在nftables中找不到这样的东西。。。
我已经查看了官方维基:nft_nat
但是我不明白如何使用nft_nat。
如果它是ipv4中的/24块,甚至可以将所有地址枚举到映射中。但是在ipv6中枚举a/64块真的是不可能的…
那么,有什么方法可以通过nftables进行网络映射吗?或者我必须恢复到ip(6(表?或者有其他建议吗?
谢谢。
对于像我这样寻找最新答案的人来说,有状态的网络前缀转换(也称为NPT/NPTv6/NAT66(可以用nftables
完成。这方面有一个常规的使用案例——RFC 7157,无网络地址转换的IPv6多宿。
只需将以下规则放在natpostrouting挂钩中(使用前缀大小(:
ip6 saddr <local-prefix>::/64 snat ip6 prefix to <public-prefix>::/64
您可以在规则前面加上oifname "<outgoing-interface>"
,以便只匹配从特定接口发出的数据包。