为 DNAT Nftables 创建集合或 Vmap

Create Set or Vmap for DNAT Nftables

我想知道是否有人找到了执行此操作的方法。我已经能够使用 nftables 为我的 DNAT 规则创建一组,但是我无法实现我真正想要的。这是我目前拥有的套装:

nft add map ip nat dnat_map{type ipv4_addr . inet_service : ipv4_addr \;}

然而我真正想要实现的是这样的

nft add map ip nat dnat_map{type ipv4_addr . inet_service : ipv4_addr . inet_service \;}

但是 Nftables 真的不喜欢这种格式,所以有没有人能够制作一个允许元素同时具有 daddr 和 dport 以及 dnat daddr 和 port 的映射?假设一个元素看起来像这样(是的,我需要 dnat 地址上的不同端口):

nft add element ip nat dnat_map{\
1.1.1.1 .  2222 : 192.168.1.1 . 22,\
}

万一其他人遇到这个问题,我找到了解决我的问题的方法。在我的例子中,我通过 RDP 和 SSH 连接的隐蔽性获得了安全性,所以我只需要一个端口用于 Windows 和另一个用于 Linux 设备。结果规则是。

nft add rule ip nat prerouting iifname $wan_iface ip saddr @admin_ips tcp dport 2222 dnat ip daddr map @wan_to_lan : tcp dport map{2222 : 22}

然后我的@wan_to_lan地图如下

nft add map ip nat wan_to_lan {type ipv4_addr : ipv4_addr \;}
nft add element ip nat wan_to_lan {1.1.1.1:192.168.1.x}

诀窍是在设置规则时您必须记住您可以使用一个或多个地图。例外是已经以判决结束规则的 vmap。我认为 wiki 有帮助,但需要更新,因为不再支持某些语法。