ipv6 dnat 的 nftables 匿名映射

ipv6 dnat 的 nftables 匿名映射

创建dnat规则时,可以指定以下命令:

nft 'add rule ip  twilight prerouting ip  daddr 1.2.3.0/24 dnat ip  prefix to ip  daddr map { 1.2.3.0/24 : 2.3.4.0/24 }'

然后获取映射地址的 dnat,例如1.2.3.4 -> 2.3.4.4.该命令按预期运行nftables v1.0.4 (Lester Gooch #3),并根据答案这里

如果我尝试对 ipv6 执行相同操作,请使用以下命令:

nft 'add rule ip6 twilight prerouting ip6 daddr aa:bb:cc:dd::/64 dnat ip6 prefix to ip6 daddr map { [aa:bb:cc:dd::]/64 : [bb:cc:dd:ee::]/64 }'
nft 'add rule ip6 twilight prerouting ip6 daddr aa:bb:cc:dd::/64 dnat ip6 prefix to ip6 daddr map { aa:bb:cc:dd::/64 : bb:cc:dd:ee::/64 }'
nft 'add rule ip6 twilight prerouting ip6 daddr aa:bb:cc:dd::/64 dnat ip6 prefix to ip6 daddr map { "aa:bb:cc:dd::/64" : "bb:cc:dd:ee::/64" }'

然后,我收到以下错误消息:

Error: syntax error, unexpected newline
add rule ip6 twilight prerouting ip6 daddr aa:bb:cc:dd::/64 dnat ip6 prefix to ip6 daddr map { [aa:bb:cc:dd::]/64 : [bb:cc:dd:ee::]/64 }
                                                                                                                                        ^
Error: syntax error, unexpected newline
add rule ip6 twilight prerouting ip6 daddr aa:bb:cc:dd::/64 dnat ip6 prefix to ip6 daddr map { aa:bb:cc:dd::/64 : bb:cc:dd:ee::/64 }
                                                                                                                                    ^
Error: syntax error, unexpected newline
add rule ip6 twilight prerouting ip6 daddr aa:bb:cc:dd::/64 dnat ip6 prefix to ip6 daddr map { "aa:bb:cc:dd::/64" : "bb:cc:dd:ee::/64" }
                                                                                                                                        ^

有没有办法可以在 nftables 中制作匿名 ipv6 映射?

答案1

TL;DR:您至少需要 nftables 版本 >= 1.0.5。


版本1.0.5:

      scanner: allow prefix in ip6 scope

哪个匹配这次提交:

扫描仪:允许 ip6 范围内的前缀

“ip6 前缀”是有效的语法,因此请确保扫描仪在 ip6 上下文中也能识别它。

还添加测试用例。

[...]

diff --git a/tests/shell/testcases/sets/0046netmap_0 b/tests/shell/testcases/sets/0046netmap_0
index 2804a4a2..60bda401 100755
--- a/tests/shell/testcases/sets/0046netmap_0
+++ b/tests/shell/testcases/sets/0046netmap_0
@@ -8,6 +8,12 @@ EXPECTED="table ip x {
                           10.141.13.0/24 : 192.168.4.0/24 > }
             }
      }
+     table ip6 x {
+            chain y {
+                    type nat hook postrouting priority srcnat; policy accept;
+                    snat ip6 prefix to ip6 saddr map { 2001:db8:1111::/64 : 2001:db8:2222::/64 }
+            }
+     }
 "
 
 set -e

相应的回归测试与OP的尝试类似。 OP 的语法在 nftables 1.0.7 上测试正常。

相关内容