两个客户端流量在共享转换地址下仍分别映射,返回路由与映射寿命是不同条件。

NAT 通过独立连接映射共享一个地址

网络地址转换会在数据包经过边界时改写地址信息。常见的多个客户端共用一个地址,实际采用网络地址和端口转换:路由器维护映射,区分同时存在的流量。远端 TCP 服务器可能看到相同源 IP,却看到不同源端口。这个共享地址代表转换边界,不一定代表同一台计算机、同一个账号或同一个人,不能直接替代身份判断。 坏掉的样子 转换不能代替路由。客户端仍需要到网关的路径,网关必须允许转发,转换后的地址也要具有返回路径。反过来,在能够路由相应前缀的内部网络中,使用私有地址并不必然要求 NAT。缺少返回路由和缺少转换规则都可能表现为超时,但两者对应不同配置决策。应先确定目标看到什么来源,再检查回复如何返回。 有状态 NAT 还会使规则变更中的已有连接与新连接表现不同。nftables 查询 NAT 链以建立流量映射,后续数据包复用保存的绑定。因此,移除 SNAT 规则不一定撤销已经建立的转换连接。这依赖连接跟踪继续工作、绑定仍然有效,不能把一次规则编辑理解成无条件清除全部会话。测试对象是否复用了旧连接,会直接影响结论。 端口映射与连接跟踪容量都是有限资源。资源耗尽、状态到期,或者故障切换设备缺少相关状态,都可能在对外地址未变时中断通信。可用转换源端口需要结合协议和相关连接元组判断,不能用一个对所有目的地、所有负载都通用的端口总数估算容量。NAT 与决定哪些流量被允许的防火墙策略,也属于不同职责。 独立流量可共享转换地址。删除规则不同于映射与依赖寿命;最后一次交互用于观察,不要求必然失败。 快速验证 历史文章报告未找到对应原始集成日志。本轮没有重跑;特权操作继续暂停,也没有尝试替代路径。 将脚本保存为 check-nat.py,准备 Docker 后运行 python3 check-nat.py。它构建包含 Python 3.11.16 和 nftables 1.0.6 的一次性环境,NET_ADMIN 与 SYS_ADMIN 是创建四个嵌套网络命名空间及临时 proc 挂载的前提。历史文章报告 Linux 6.12.76;需启用 Python 断言,清理仅尽力执行。Docker 共享宿主内核,必须只在另行获准的一次性虚拟机里运行;这些权限与共享内核意味着仅用容器不足以保证隔离。实时软件源也不保证未来还能取得这些固定包版本: ...

十一月 18, 2026 · 3 分钟 · XB Field Notes