双向NAT
定义:
在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 映射):
目的 NAT(NAT Server):将公网 IP
203.0.113.2:80映射到服务器内网 IP192.168.1.10:80。源 NAT(关键):将客户端发来的原始源 IP
1.2.3.4转换成防火墙的内网接口 IP192.168.1.1(或者另外一个与服务器同网段的空闲 IP)。
处理流程:
请求包(客户端 → 服务器):
客户端发送
(1.2.3.4:5678) → (203.0.113.2:80)防火墙做目的 NAT:
203.0.113.2:80→192.168.1.10:80防火墙做源 NAT:
1.2.3.4:5678→192.168.1.1:5678(假设端口不变)最终发出:
(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来绕过”。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)