创建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 上测试正常。