首页 > 解决方案 > 为 DNAT Nftables 创建 Set 或 Vmap

问题描述

我想知道是否有人找到了这样做的方法。我已经能够使用 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 和端口的映射?假设 ofc 元素看起来像这样(是的,我需要 dnat addr 上的不同端口):

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

标签: linuxfirewallnetfilterdebian-busternftables

解决方案


万一其他人经历了这个,我找到了解决我问题的方法。就我而言,我通过 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 有所帮助,但需要更新,因为不再支持某些语法。


推荐阅读