华为设备中的NAT回流hairpin是啥, 使用场景是什么?
拓扑
内网server 192.168.1.10 映射到了公网Ip 203.0.113.10
[USG] nat static global 203.0.113.10 inside 192.168.1.10 netmask 255.255.255.255
这时如果内网员工访问 203.0.113.10 能正常访问到吗?
为什么 ?
结果是访问失败, 需要配置nat 回流才能成功
这个回流原理是啥
首先,我们来理解一下没有配置 NAT 回流时的问题(即 NAT 环路问题)。
1 场景还原(无 NAT 回流)
1.1 网络结构:
内网服务器:192.168.1.10
静态 NAT 规则:将公网 IP 203.0.113.10 映射到该服务器。
内部员工电脑:192.168.1.100
防火墙外网口:GE0/0/1, IP 假设为 198.51.100.1
防火墙内网口:GE0/0/2, IP 为 192.168.1.1
1.2 访问过程(员工访问 203.0.113.10):
步骤1(出方向):员工电脑 (192.168.1.100) 要访问公司官网(他认为在 203.0.113.10)。数据包发出:
源IP:192.168.1.100
目的IP:203.0.113.10
步骤2(到达防火墙):防火墙根据路由表,发现目的IP 203.0.113.10 是一个公网IP,且匹配了静态NAT规则。关键在于,此时防火墙会尝试执行 NAT。
它检查规则:“任何访问 203.0.113.10 的流量,其目的IP都应被转换为 192.168.1.10”。
于是,防火墙将数据包的目的IP修改为 192.168.1.10。
但源IP仍然是 192.168.1.100。
步骤3(返回路径问题):服务器 192.168.1.10 收到了这个数据包。它准备回复,看到的通信对端是 192.168.1.100。
它直接回复一个数据包:
源IP:192.168.1.10
目的IP:192.168.1.100
步骤4(环路与不对称):员工电脑 192.168.1.100 收到了这个回复。但它困惑了:“我明明是在和 203.0.113.10 通信,怎么收到了 192.168.1.10 的回复?” 许多TCP/UDP应用会因为IP地址不匹配而丢弃这个数据包,导致连接失败。
**核心问题:**对于从内网发起的、访问映射后公网IP的流量,防火墙只做了目的地址转换(DNAT),但没有做相应的源地址转换(SNAT),导致回包路径不正确,形成一个“逻辑环路”。
NAT 回流的原理(启用 Hairpin NAT 后)
nat hairpin enable 命令的作用,就是专门为了解决上述问题而设计的。它的工作原理可以概括为:在同一个接口上,对符合条件的流量同时启用 DNAT 和 SNAT,实现“自转发”。
让我们再看一遍启用后的流程:
**同上的步骤1:**员工 (192.168.1.100) 访问 203.0.113.10。
关键步骤2(在防火墙内网口 GE0/0/2 上触发 Hairpin):
数据包从内网口进入,防火墙首先检查它是否命中一条 “需要Hairpin处理” 的NAT规则。命中条件通常是:数据包的目的IP是某个NAT映射后的公网IP。
一旦命中,防火墙会执行两次连续的NAT操作:
第一次(DNAT):根据静态NAT规则,将目的IP 203.0.113.10 转换为 192.168.1.10。
第二次(SNAT):因为启用了Hairpin功能,防火墙知道这个流量需要“掉头”。它会将源IP 192.168.1.100 转换为防火墙内网口自身的IP 192.168.1.1。(具体转换成的地址可能因设备型号和配置略有不同,但原理是转换为一个中间IP)。
此时,数据包变成了:
源IP:192.168.1.1 (防火墙内网口IP)
目的IP:192.168.1.10 (内网服务器真实IP)
**步骤3(服务器回复)**:服务器 192.168.1.10 收到包,看到是 192.168.1.1 在访问它。它回复:
源IP:192.168.1.10
目的IP:192.168.1.1
**步骤4(防火墙反向转换)**:回复包到达防火墙内网口,防火墙识别出这是之前Hairpin会话的一部分,执行反向NAT:
第一次(反向DNAT):将源IP 192.168.1.10 转换回 203.0.113.10。
第二次(反向SNAT):将目的IP 192.168.1.1 转换回 192.168.1.100。
最终,员工电脑收到的回复包是:
- 源IP:203.0.113.10 (正是他请求的地址)
- 目的IP:192.168.1.100
连接完美建立。
类比解释
可以把防火墙想象成一个邮局(Post Office)。
无 Hairpin:你(员工)住在A街,想给B街的朋友(服务器)寄信,但朋友在邮局登记了一个“公网信箱号”(公网IP)。你把信寄到“公网信箱号”,邮局把信封上的地址改成B街真实地址送过去。朋友回信直接寄到你的A街地址。你收到信后发现地址不对(不是公网信箱号),觉得奇怪。
有 Hairpin:你把信寄到“公网信箱号”。邮局不仅把收件地址改成B街,还把发件人地址改成了邮局自己的地址。朋友回信给邮局,邮局再把发件人地址改成“公网信箱号”,收件人地址改回你的A街地址,然后送给你。整个过程对你和你的朋友来说,地址都是正确的。
技术要点总结
触发条件:从内网接口进入,且目的IP是设备上配置的NAT公网IP的流量。
核心动作:在同一个接口(你配置 nat hairpin enable 的那个接口)上,对同一数据流先做DNAT,紧接着做SNAT(这种在同一个接口上进出的NAT也叫“Hairpin NAT”或“NAT Loopback”)。
解决问题:通过SNAT将内网源IP替换掉,使服务器的回包必须经过防火墙,从而让防火墙有机会将回复包中的源IP(服务器真实IP)再转换回公网IP,保证通信两端IP地址的对称性和一致性。
配置位置:必须在流量进入的私网接口上启用(通常就是连接内网的接口)。在你的命令中,就是在 GigabitEthernet 0/0/2 上启用。
因此,nat hairpin enable 是一个让防火墙“智能地”处理内部访问内部映射IP的开关,确保了内部用户使用公网地址访问内部服务时,能像外部用户一样畅通无阻
浙公网安备 33010602011771号