Named Map 适合 IP→端口路由因其内核哈希表实现纳秒级查找、支持原子热更新、命名可复用且分离策略与执行;键为 ipv4_addr、值为 inet_service,纯IP+纯端口组合最高效。

用 nftables 的 Named Map 实现入站 IP 到后端多端口的极速路由,核心是把“谁(源IP)能访问哪个服务端口”这个映射关系固化在内核哈希表中,一次查找完成决策,避免链式规则遍历。Named Map 是持久、可复用、支持原子更新的命名集合,比匿名集合更适合长期运行、需动态维护的路由策略。
Named Map 为什么适合 IP→端口路由
Named Map 在内核中以哈希表实现,对 ipv4_addr → inet_service 类型的键值对,单次查找稳定在纳秒级;它有名字,可被多条规则引用,也支持运行时增删元素而不重载整条链;相比写死一堆 if-then 规则,它把“策略逻辑”和“执行路径”分离,更清晰也更稳。
- 键(key)用 ipv4_addr,值(value)用 inet_service,表示“某个源 IP 允许访问某端口”
- 不推荐混用掩码或范围——纯 IP + 纯端口组合最高效,避免退化为线性扫描
- Map 必须先创建再引用,且建议预设 size(如 1024 或 4096),防止扩容抖动
三步搭建 IP 到端口的路由 Map
假设你有 3 个可信管理 IP(192.168.5.10/11/12),分别只允许访问 SSH(22)、API(3000)、监控(9090);另有一个运维网段 10.10.20.0/24 全部放行 22 和 8080:
- 创建 Map:sudo nft add map inet filter ip_to_port_map { type ipv4_addr : inet_service ; size 1024 }
- 批量加载映射:sudo nft add element inet filter ip_to_port_map { 192.168.5.10 : 22, 192.168.5.11 : 3000, 192.168.5.12 : 9090, 10.10.20.0/24 : 22, 10.10.20.0/24 : 8080 }
- 在 INPUT 链中调用:sudo nft add rule inet filter input ip saddr . tcp dport @ip_to_port_map ct state new accept
注意:这里用了 ip saddr . tcp dport 复合匹配,要求 key 类型必须是 ipv4_addr . inet_service,所以 Map 定义要严格对应。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
搭配连接状态与默认拒绝,保障安全底线
仅靠 Map 匹配新连接还不够——必须确保已建立连接的返回流量畅通,同时堵住未授权访问。标准顺序不能错:
- 第一句:放行 established/related 流量(保障响应包通行)
nft add rule inet filter input ct state established,related accept - 第二句:用 Map 匹配并放行合法的新连接
nft add rule inet filter input ip saddr . tcp dport @ip_to_port_map ct state new accept - 第三句:链默认策略设为 drop(或显式加一条 drop 规则兜底)
nft add rule inet filter input drop
这样既快又稳:99% 的合法请求在第二条就命中,恶意扫描或错配 IP+端口组合直接落到末尾被丢弃。
日常运维与扩缩容技巧
业务变更是常态,Named Map 支持热更新,无需重启或 reload 整个规则集:
- 新增一个 IP 访问权限:nft add element inet filter ip_to_port_map { 172.16.1.88 : 5044 }
- 移除某条映射:nft delete element inet filter ip_to_port_map { 192.168.5.11 : 3000 }
- 查看当前所有映射:nft list map inet filter ip_to_port_map
- 导出全部元素供备份:nft list map inet filter ip_to_port_map -n -a
若需按网段批量操作,可配合脚本生成元素列表,再用 nft add element 批量导入,整个过程毫秒级生效。


















