linux - 为 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,\
}
解决方案
万一其他人经历了这个,我找到了解决我问题的方法。就我而言,我通过 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 有所帮助,但需要更新,因为不再支持某些语法。
推荐阅读
- javascript - 如何在reactjs中制作这样的自定义单选按钮
- node.js - MongoDB 聚合与 Mongoose 虚拟
- multithreading - 为什么设置 requestTimeout 时 ColdFusion 页面不超时?
- spring-mvc - 如何解决 Spring MVC 中的 Servlet 错误?
- c++ - 形状区域的 C++ 异常处理
- javascript - 将“ (GMT-04:00) 东部夏令时间 (America/New_York)” 转换为 “EDT”
- google-sheets - 我如何能够对不同的列求和并根据标准乘以金额?
- flutter - 如何将底部导航栏添加到此颤动代码
- ios14 - 如何为 iOS AppClips 创建 QR/NFC 标签
- javafx - 在 JavaFX 的 Controller 类中分配 KeyEvent 的位置