ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

华为AR3260 NAT回流配置详解:解决内网无法通过公网IP访问服务器

华为AR3260 NAT回流配置详解:解决内网无法通过公网IP访问服务器 搞过华为AR3260端口映射的兄弟估计十个里有八个遇到过这个场景外网手机一访问就通公司内网电脑怎么都打不开。我自己第一次碰到这事儿时第一反应是服务器防火墙把内网IP拦了折腾了半天才发现问题出在路由器NAT回流失效上。这篇文章就把华为AR3260的NAT回流配置从头到尾讲透包括WEB界面操作路径、命令行配置逻辑以及我在生产环境里踩过的各种坑。适合正被内网无法通过公网IP访问内部服务器折磨的运维同学也适合刚入门、想弄明白NAT回流原理的网工新人。看懂这一篇你至少能少走三个晚上的弯路。1. NAT回流到底是什么先搞定外网能通、内网不通的怪象1.1 一个每天都在发生的真实场景我先把这个场景完整复现一遍。假设公司在华为AR3260路由器上做了一条端口映射内网Web服务器192.168.1.10的80端口通过公网接口GigabitEthernet0/0/0上的公网IP 202.106.1.1对外开放。外网用户访问http://202.106.1.1页面正常打开速度也还行。但是公司内部员工访问同一个地址浏览器长时间转圈最后报无法访问此网站。你跑到服务器上一看Nginx服务正常、内网其他电脑直接访问http://192.168.1.10也完全没问题。再让外网同事测试一切正常。这类外网通、内网不通的现象专业上叫NAT回流失效。英文术语常见的有NAT Loopback、NAT Hairpin、NAT Shadow等华为AR系列上主要叫hairpin。为什么会这么诡异我打个比方。小区只有一个大门门卫负责登记所有进出访客。外网用户相当于从大门进来的快递员门卫登记后放行快递员找到你家事情办完走大门出去。但是小区里的邻居来找你他觉得自己住同一个小区直接穿过绿化带走到你家门口就完事了根本不需要经过门卫。问题在于你事先跟门卫说过我今天只接待从大门进来的人。邻居没走大门门卫的登记本上没有这笔记录于是邻居按了门铃你却怎么都对不上号。这个类比虽然不是100%精确但抓到了NAT回流的本质转发路径和回程路径不一致导致连接无法建立。1.2 回流的本质DNAT之外还缺一次SNAT从数据包的角度看整个问题的根源非常清晰。内网PC192.168.1.100发出访问http://202.106.1.1的请求。数据包到达AR3260的GigabitEthernet0/0/1内网口后路由器查找NAT Server表发现202.106.1.1:80映射到了192.168.1.10:80于是执行目的地址转换DNAT把目的IP从公网地址改成了内网服务器地址。报文随后被转发到内网服务器。到这里一切正常。服务器收到请求后准备回复200 OK。但它一看请求的源IP发现是192.168.1.100跟自己同在一个网段就绕过路由器直接在二层把响应报文发给了192.168.1.100。服务器这样做有没有错从IP通信的角度讲它没做错。同一个广播域内回包直接发给目标设备效率还更高。问题在于客户端发出的请求是发给202.106.1.1的它期望的响应报文源地址也是202.106.1.1。现在来的响应报文源地址是192.168.1.10客户端根本不会认这笔连接于是丢弃或一直等待TCP握手始终无法完成。要打破这个死循环路由器就必须在DNAT之外额外做一次源地址转换SNAT把内网PC的源地址192.168.1.100改成路由器自己的地址比如内网接口地址192.168.1.1或公网接口地址202.106.1.1。服务器看到的请求源地址就变成了192.168.1.1回包时自然会把报文发给网关路由器路由器再按NAT会话表做反向转换把报文正确送回内网PC。所以NAT回流的本质就是一句话对于从内网发起、目的地址是公网IP且命中了NAT映射的流量路由器必须同时执行DNAT和SNAT强制让回程报文经过自己而不是被服务器直接二层回送。2. WEB界面配置三步能完成但两个隐藏选项最容易被忽略2.1 从浏览器登录到创建端口映射的完整路径很多人拿到AR3260第一反应是找Web管理页面。确实华为企业路由器基本都内置了Web网管配置端口映射这类常见功能不需要记住一堆命令。不过在浏览器里输入管理IP之前得先确认设备上开启了HTTP/HTTPS服务。我还遇到过一台设备web服务没启用浏览器怎么都打不开的情况。可以用Console口或SSH登录命令行执行http server enable或https server enable打开Web管理服务然后再通过浏览器访问。老设备如果忘记Web登录密码通常也得走Console口重置这个后面排障部分会顺带提到。登录进去之后我的操作路径一般是这样的。在Web网管首页进入NAT配置或NAT菜单。AR3260的Web界面在不同VRP版本里菜单位置会有差异有些版本是网络配置下面有NAT Server和NAT Outbound两个子项有些版本直接叫NAT配置但目标都是那一个找到端口映射NAT Server配置页面。点击新建填写端口映射规则。以典型场景为例配置项如下配置项填写值说明公网接口GigabitEthernet0/0/0路由器接公网的接口公网IP202.106.1.1该接口上的公网地址公网端口80对外服务的端口内网IP192.168.1.10服务器的实际IP内网端口80服务器监听的端口协议类型TCP按实际服务选择填完点击确定这条映射规则就建立起来了。此时从外网访问公网IP的80端口是可以正常打开的。这就是外网通的部分。2.2 那个叫hairpin的开关到底在哪里关键来了。要让内网也能通过公网IP访问需要在Web界面上找到NAT回流的开关。在我的实操经验里AR3260的Web网管中这个开关的位置有几种情况第一种在新建端口映射规则的高级选项里有一个类似允许内网用户通过公网IP访问内部服务器的复选框勾选即可。有的版本翻译成NAT回流有的直接保留英文Hairpin。第二种在端口映射规则列表页对已创建的规则点击编辑或高级在弹窗里找到NAT回流选项。第三种Web界面不提供回流开关只能通过命令行在接口下配置nat hairpin enable。这类情况在部分早期版本或简化版Web网管上出现过。我的建议是如果你在Web界面上找到了回流开关先勾上、保存、再验证如果找不到不用担心直接用命令行配置反而更稳定后面第三部分会详细讲。提示无论Web界面上有没有回流开关配置完后我都建议用命令行确认一下接口下是否真的存在nat hairpin enable这条配置。华为AR设备的Web网管在不同版本之间差异不小界面提示成功不等于底层配置正确下发。2.3 WEB界面配置为什么会保存了却没生效我在实际工作中遇到过不少次Web界面明明勾了回流也提示保存成功但内网就是不通的情况。这类问题排查下来九成是下面两个原因。第一个原因是安全策略拦截。AR3260的部分VRP版本启用了防火墙域间安全策略端口映射规则放行的是从不可信域到服务器所在区域的流量而内网员工发起、目的地址为公网IP的报文在路由器上被识别为其他域之间的流量并没有被安全策略放行直接丢弃。这种情况下不管NAT回流开没开报文都到不了服务器。判断方法很简单在Web界面的安全策略或防火墙配置里看是否有针对内网网段访问服务器网段的放行策略。如果安全策略没放行手动加一条Trust域到Trust域或按实际区域调整的放行规则问题往往就解决了。第二个原因是Web界面的回流开关可能只对某条规则生效但设备底层更需要的其实是接口级的hairpin使能。这种情况下Web界面上的开关并没有真正下发到接口配置里。确认方法是在命令行执行display current-configuration interface GigabitEthernet0/0/0查看接口下是否真的有nat hairpin enable这条配置。没有的话回到命令行敲上立竿见影。这一点是AR3260上比较有迷惑性的地方很多人Web界面点完了以为大功告成结果被底层接口配置坑了一晚。3. 命令行配置一条hairpin命令背后的完整逻辑3.1 先梳理清楚配置的核心思路命令行配置NAT回流逻辑上比Web界面更明确。核心就三件事建立NAT映射、开启hairpin、确认安全策略放行。跟我前面讲原理时说的DNAT加SNAT一一对应。命令行配置最大的好处是可控性强每一步做了什么、下发到了哪个接口都是一清二楚的出了问题也更容易从配置层面定位。而且命令行是跨版本最一致的配置方式Web界面在不同VRP版本之间差异较大命令行相对稳定这也是我一直建议生产环境用命令行配置NAT回流的原因。3.2 配置命令逐条讲解还是用前面那个场景内网192.168.1.0/24Web服务器192.168.1.10公网接口GigabitEthernet0/0/0公网IP 202.106.1.1。登录设备进入系统视图逐条配置。首先是配置端口映射system-view interface GigabitEthernet0/0/0 ip address 202.106.1.1 255.255.255.0 nat server protocol tcp global 202.106.1.1 80 inside 192.168.1.10 80这条命令的意思是把公网IP 202.106.1.1的TCP 80端口映射到内网192.168.1.10的80端口。然后是关键一步在同一个接口下开启NAT回流nat hairpin enable两条命令都敲完再输入quit退出接口视图执行save保存配置。配置完成后我习惯执行一下display nat server确认映射存在再执行display current-configuration interface GigabitEthernet0/0/0确认hairpin开关已经生效。这两条检查命令非常有用能避免以为自己配了其实没配的乌龙。加了nat hairpin enable之后内网PC访问202.106.1.1:80的完整处理流程是这样的报文到达GigabitEthernet0/0/1内网口路由器查NAT Server表命中映射执行DNAT将目的地址改为192.168.1.10:80。因为该接口同时开启了hairpin路由器继续执行SNAT将源地址192.168.1.100改为路由器自己的接口地址常见的是公网接口地址或内网网关地址具体看设备策略。转换后的报文从内网口发给192.168.1.10。服务器收到后看到源地址是路由器地址回包发给网关。路由器收到回包后根据NAT会话表做反向转换将目的地址改回192.168.1.100源地址改回202.106.1.1然后把报文发回给内网PC。四步下来内网PC看到的仍然是在跟202.106.1.1通信整个过程天衣无缝。这就是nat hairpin enable这条命令在背后干的事。3.3 多出口场景下的回流配置差异现实网络往往比单出口复杂。比如公司有两条运营商线路一条电信一条联通AR3260上有两个公网接口还配了策略路由或负载分担。这种时候配置NAT回流有一个非常容易踩的坑流量从哪个接口出hairpin就得在哪个接口上开。举个例子。NAT Server配置在GigabitEthernet0/0/0上公网IP是电信地址202.106.1.1。但内网有一台PC因为策略路由默认走GigabitEthernet0/0/2联通出口。当它访问电信的公网IP时流量可能先到0/0/2然后因为目的地址命中的是电信接口上的NAT Server映射流量被引导到0/0/0做转换。这种情况下路径上涉及的两个公网接口理论上都需要评估是否需要使能hairpin否则可能出现转换做了但回程找不到正确会话的诡异现象。我的经验是多出口场景下不要只在某一个接口上开hairpin而是把所有公网接口的hairpin都打开再配合合理的路由策略。当然前提是接口上都有NAT配置需求。如果某个接口只做纯路由不做NAT那开hairpin没有意义反而可能会增加不必要的转换开销。安全策略这块也提一句。如果你的AR3260启用了防火墙域间安全策略命令行配置时还要检查安全策略是否放行。命令大致是firewall zone trust add interface GigabitEthernet0/0/1然后在安全策略里放行内网网段到内网服务器网段的访问。实际操作中很多刚接触华为设备的人会忽略这一步觉得NAT配了就完事了结果被安全策略拦得死死的。这点后面排障部分还会提到。4. 真实排障记录从无法通过公网IP访问服务器到定位根因4.1 故障现象与第一轮误判说一个我自己经历过的真实排障案例。某天上午同事A反馈他在办公室访问公司官网的公网域名一直转圈打不开。但他用手机切到4G秒开。服务器运维看了服务进程正常、端口正常、服务器本机访问正常。我接到任务后第一轮判断是服务器防火墙或者Nginx配置里做了IP白名单限制了内网IP访问。因为现象太像了同一个地址外网能访问、内网不能。我登录服务器检查了iptables、Nginx的allow/deny配置全部正常。接着怀疑是公司内网DNS解析的问题。域名解析到公网IP按理没错但内网用户访问公网域名走到出口再回流确实更容易出问题。我用nslookup查了内网DNS解析结果确认解析到的是公网IP没有问题。排查到这里我已经把服务器侧和DNS侧能查的都查了一遍没有任何发现。最后才把目光放回到路由器上。4.2 从会话表到回程路由的完整排查链路登录AR3260后我是按这个顺序排查的。第一步确认NAT Server映射存在且正确。display nat server输出里能看到映射关系公网IP 202.106.1.1:80 - 192.168.1.10:80状态正常。这一步排除NAT Server没配或配错的问题。第二步在设备上查看是否有相应会话。display nat session这次输出里我只看到外网访问的会话没有看到内网PC访问公网IP的会话。也就是说内网用户的报文到了路由器之后根本没有建立起一条NAT会话。第三步检查接口下的NAT配置。display current-configuration interface GigabitEthernet0/0/0问题出现了。接口下有nat server的配置但没有nat hairpin enable。这意味着NAT回流没开。第四步添加nat hairpin enable并保存。system-view interface GigabitEthernet0/0/0 nat hairpin enable quit save配置生效后我让同事A再试页面秒开。从发现问题到定位根因前面绕了一大圈最后其实就缺这一条命令。这个案例让我深刻意识到一件事遇到外网通、内网不通时不要急着怀疑服务器先确认路由器上的NAT回流配置能省掉大量无用功。4.3 和NAT回流容易混淆的两个概念排障过程中有两个概念经常被混在一起这里一次性说清楚。第一个是DNS映射NAT DNS Mapping。如果你内网用户通过域名访问内部服务器时域名解析到的是公网IP但又不想走NAT回流这条链路可以让内网DNS服务器直接把域名解析为服务器的内网IP让流量全程在内网转发根本不经过路由器。这种方式叫DNS映射或DNS本地解析它和NAT回流解决的问题一样但实现思路完全不同。实际中有的公司会同时用两种方式外网用户通过公网IP走NAT回流访问内网用户通过内网DNS解析到内网IP访问。两者不冲突但要注意别在配置时把DNS映射和NAT回流当成同一个功能来用。第二个是NAT Static静态NAT一对一映射和NAT Server端口映射的区别。很多人把这两个搞混。NAT Static是公网IP和内网IP的一对一固定映射一个公网IP对应一个内网IPNAT Server是端口级别的映射一个公网IP的不同端口可以映射到多个内网IP的不同端口。在NAT回流场景里NAT Server是最常见的应用静态NAT也可以配合hairpin使用但配置位置和命令不同别搞混了。还有一个日常讨论容易混淆的点端口映射NAT Server本身不等于NAT回流。端口映射解决的是外网用户如何访问内网服务器的问题NAT回流解决的是内网用户如何通过公网IP访问内网服务器的问题。很多人把端口映射配好就以为万事大吉其实漏的恰恰是回流那一步。5. 验证与生产建议配置完成后必须做的事5.1 三种验证方式与具体操作配置完NAT回流不能只看配置就完事一定要从多个角度验证。第一种验证方式也是最直观的就是拿一台内网电脑浏览器直接访问http://公网IP:端口。能打开页面说明回流链路基本通了。如果访问的是HTTPS服务流程一模一样只是端口从80变成443。第二种验证方式是查看设备上的NAT会话。在内网PC访问公网IP的同时在AR3260上执行display nat session看输出里有没有同时包含内网PC源地址和公网IP目的地址的会话记录。如果有且状态正常说明DNAT和SNAT都成功执行了。这是比浏览器验证更底层的验证方式能直接确认报文在路由器上确实做了转换。第三种验证方式是观察回程路径。在内网PC上执行tracertWindows或tracerouteLinux访问公网IP如果能看到第一跳就是路由器内网接口地址说明回程路径经过网关符合NAT回流的预期。如果第一跳直接就是服务器地址那说明流量根本没经过路由器回流大概率配置失效了。我在实际操作中通常三种方式都做一遍浏览器验证用户可感知的效果NAT会话验证设备转发行为tracert验证路径走向。三管齐下才能放心地告诉业务方问题解决。如果你用的是eNSP模拟器做实验命令和真机基本一致但要注意模拟器的NAT行为在某些版本里跟真机有差异验证结果只能作为参考最终还是要以真机为准。5.2 生产环境中的几条配套建议NAT回流配置本身不难但生产环境里要让这类映射长期稳定运行我总结了几个建议。第一所有配置变更都走命令行并统一备份。Web界面虽然直观但碰到前面说的界面勾了、底层没生效的情况问题会非常隐蔽。命令行配置保存后用display current-configuration导出备份后续出问题可以快速对照。建议把配置备份文件放到带时间戳的目录里方便回滚。第二DNS映射和NAT回流配合使用。如果公司有内网DNS服务器建议把内部访问的域名解析到内网IP让流量不经过路由器如果确实需要内网用户测试公网链路或访问公网IP再依赖NAT回流。这样既能减轻路由器压力也能减少一条链路上的不稳定因素。第三注意会话状态和性能问题。业务量较大时NAT回流会产生大量会话如果设备性能有限建议关注CPU和内存占用。AR3260作为企业级路由器常规业务量下问题不大但如果同时承载大量内网穿透访问还是要定期观察设备负载。第四变更窗口和回滚预案。生产设备上做任何NAT配置变更尽量选择业务低峰期。操作前把当前配置做一个备份操作后有异常可以快速恢复。不要觉得一条命令的事无所谓真实环境里一个小改动引发连锁故障的情况我见过太多次了。写到这里我再提一个个人习惯。每台华为路由器上做完NAT相关配置我都会习惯性执行一遍display nat session和display logbuffer看一眼有没有异常日志。这两个命令的性价比非常高能在用户发现问题之前就暴露出风险。特别是logbuffer很多新手根本没意识到华为设备还自带了一个环形日志缓冲区里面存了大量有价值的信息。我个人在实际操作中的体会是NAT回流本身并不是一个复杂的特性真正花时间的往往是在原理层面的理解和对各种隐藏开关的排查。把原理搞清楚了Web界面和命令行都只是工具选自己顺手的那条路就行。希望这篇基于真实踩坑经验的分享能让你在配置华为AR3260 NAT回流时少走几个弯路。
返回列表