定义:

在NAT设备上同时进行源NAT和目的NAT的转换,称为双向NAT

双向 NAT:也叫双向地址转换,一条流量同时做 目的 NAT + 源 NAT

产生背景

(1)内网主机通过域名解析到公网地址来访问内网服务器

外网访问内网

内网访问外网 (转回)内网

NAT Server 产生的 Server Map 表不能绕过安全策略检查。


入站流量(外→内)处理五步详解


双向NAT的sessIon表

普通NAT的Session表是“单臂转换”——只改一个方向的地址,另一个方向只做逆运算。双向NAT的Session表是“双臂转换”——正向和反向都独立地修改了源和目的地址。

  • 普通NAT:报文经过防火墙时,只有一侧地址被“翻译”,另一侧原样通过。

  • 双向NAT:报文经过防火墙时,两侧地址都被“翻译”,内外网看到的地址都不是原始地址。

任何Session表都包含正反两个方向

防火墙为每一个通信流创建一条Session表项,里面至少包含:

方向 原始五元组(收到时的样子) 转换后五元组(发出时的样子)
正向 (A_sip, A_sport, B_dip, B_dport, prot) (A'_sip, A'_sport, B'_dip, B'_dport, prot)
反向 (B_dip, B_dport, A_sip, A_sport, prot) 的镜像 (B'_dip, B'_dport, A'_sip, A'_sport, prot)

无论你配置的是源NAT、目的NAT还是双向NAT,Session表都长这样。


“一般”NAT的Session表特征

场景A:纯源NAT(内网→外网,比如Easy IP)

  • 正向:(10.0.0.1:1234 → 8.8.8.8:80) 变为 (1.1.1.1:5678 → 8.8.8.8:80)

  • 反向:(8.8.8.8:80 → 1.1.1.1:5678) 变为 (8.8.8.8:80 → 10.0.0.1:1234)

  • 结论:只有源地址被替换,目的地址不变。

场景B:纯目的NAT(NAT Server,外网→内网)

  • 正向:(2.2.2.2:9999 → 203.0.113.5:80) 变为 (2.2.2.2:9999 → 192.168.1.10:80)

  • 反向:(192.168.1.10:80 → 2.2.2.2:9999) 变为 (203.0.113.5:80 → 2.2.2.2:9999)

  • 结论:只有目的地址被替换,源地址不变。

这就是“一般”NAT的Session表:只有一个方向发生了地址改写,另一个方向是反向还原


双向NAT的Session表特征

场景:内网用户通过公网IP访问内网服务器(NAT回流问题)

配置:

  • NAT Server:203.0.113.5:80 → 192.168.1.10:80

  • 源NAT:将用户源 192.168.1.100 → 192.168.1.1(防火墙内网接口IP)

正向:

  • 原始:(192.168.1.100:1234 → 203.0.113.5:80)

  • 转换后:(192.168.1.1:1234 → 192.168.1.10:80)

反向:

  • 原始:(192.168.1.10:80 → 192.168.1.1:1234)

  • 转换后:(203.0.113.5:80 → 192.168.1.100:1234)

结论:正向同时改了源和目的;反向也同时改了源和目的。两个方向都发生了地址替换,且替换不是简单的还原,而是两个地址都被映射


双向NAT的使用场景二:内部服务器没有配置网关

问题场景:服务器没有配置网关

假设:

  • 内网服务器 192.168.1.10/24没有配置默认网关(或者网关指向了错误设备,比如指向了交换机,而不是防火墙)。

  • 防火墙内网接口 IP:192.168.1.1/24

  • 客户端(可能是外网用户,也可能是另一个内网网段 10.0.0.0/24)需要访问这台服务器。

正常情况:客户端发送请求到服务器 192.168.1.10,服务器收到后,发现源 IP 不是同网段(比如客户端是 10.0.0.2),就会查自己的路由表。由于没有默认网关,服务器不知道该怎么把回包发给 10.0.0.2,于是:

  • 如果服务器开启了 ICMP 重定向或 ARP 探测,可能会失败;

  • 一般情况下,服务器直接丢弃回包,或者尝试发到同网段广播,但无法到达客户端。

结果:客户端能发请求到服务器,但收不到回应,通信失败。


双向NAT如何解决“无网关”问题

核心原理:防火墙让服务器“以为”客户端和它在同一个网段,从而服务器不经过网关,直接通过 ARP 将回包发给防火墙。

具体配置(假设客户端是外网用户 1.2.3.4 访问 NAT Server 映射):

  1. 目的 NAT(NAT Server):将公网 IP 203.0.113.2:80 映射到服务器内网 IP 192.168.1.10:80

  2. 源 NAT(关键):将客户端发来的原始源 IP 1.2.3.4 转换成防火墙的内网接口 IP 192.168.1.1(或者另外一个与服务器同网段的空闲 IP)。

处理流程:

请求包(客户端 → 服务器):

  1. 客户端发送 (1.2.3.4:5678) → (203.0.113.2:80)

  2. 防火墙做目的 NAT:203.0.113.2:80 → 192.168.1.10:80

  3. 防火墙做源 NAT:1.2.3.4:5678 → 192.168.1.1:5678(假设端口不变)

  4. 最终发出:(192.168.1.1:5678) → (192.168.1.10:80)

服务器收到请求

  • 看到源 IP 是 192.168.1.1,目的 IP 是 192.168.1.10 → 同一个网段

  • 服务器不需要查默认网关,直接通过 ARP 查询 192.168.1.1 的 MAC 地址,然后发送回包:(192.168.1.10:80) → (192.168.1.1:5678)

回包到达防火墙

  • 防火墙根据会话表,识别出这个回包属于之前建立的会话。

  • 反向转换:目的地址 192.168.1.1:5678 → 1.2.3.4:5678,源地址 192.168.1.10:80 → 203.0.113.2:80

  • 转发给客户端 1.2.3.4

结果:客户端正常通信,服务器全程没有使用默认网关。

规范的企业网络建设要求:

  • 所有服务器必须配置正确的默认网关(通常指向防火墙或核心交换机)。

  • 否则服务器无法跨网段通信,监控系统会告警,网络管理员会被追责。

  • 现代服务器操作系统(Windows Server、Linux)安装过程中就会要求配置网关。

所以,一个正规运维的网络里,几乎不会出现服务器没有网关的情况。网络工程师的第一反应一定是“去把服务器的网关配上”,而不是“用双向NAT来绕过”。


Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐