显然,目前在 Linux 内核中的NPTv6(IPv6 网络前缀转换)的实现与连接跟踪不兼容。这非常令人失望,因为当您拥有来自 ISP 的动态 IPv6 前缀并希望拥有稳定的内部 IPv6 地址时,我觉得 NPTv6 是比 NAT66 更明智的解决方案。
我当然不想做 NAT66,但也需要有状态防火墙,特别是考虑到 NPTv6 保留端到端连接,因此连接跟踪是必须的。
我的问题是,有没有人知道任何补丁/附加组件/变通办法让我在同一主机上拥有 NPTv6 和转换流的连接跟踪?
SNPT / DNPT 是专门为轻量级 NPTv6 创建的,专门在“mangle”表中完成并且与连接跟踪不兼容。
如果采用连接跟踪,则有一个 NETMAP 目标可以进行 IPv6 网络前缀转换。因此,文档对此不清楚,我怀疑是出于政治/宗教原因(NETMAP 目标实际上是 NAT66 的一种形式,许多人不喜欢它)。
所以,如果2607:xxx::/64
是外部前缀,fda3:xxx::/64
是内部前缀,并且eth0.99
是传出接口,那么下面的工作:
ip6tables -t nat -A POSTROUTING -o eth0.99 -j NETMAP --to 2607:xxx::/64 -s fda3:xxx::/64
ip6tables -t nat -A PREROUTING -i eth0.99 -j NETMAP -d 2607:xxx::/64 --to fda3:xxx::/64
Run Code Online (Sandbox Code Playgroud)
现在,要明确一点:NETMAP 执行 1:1 地址转换 (NAT),但我不确定它是否遵循 RFC6296 与校验和无关,或者它如何以其他方式与符合 RFC 的 NPTv6 不同,但它是对我来说足够好,而且它有效。