ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

华为USG防火墙双向NAT配置:地址重叠与NAT回流实战

华为USG防火墙双向NAT配置:地址重叠与NAT回流实战 前阵子有个朋友在群里发来一张截图说他们分公司和总部的网段都是192.168.1.0/24两边用加密隧道把内网连起来之后两边的主机互相ping不通总部访问分公司的一台服务器始终没反应。我一看配置就明白了——这是个非常典型的“地址重叠”场景两边内网网段一样报文出了隧道之后回包根本不知道该往哪儿送。解决这个问题的办法就是在华为USG防火墙上做双向映射也就是我们常说的双向NAT。这篇文章就围绕华为USG防火墙的双向NAT配置展开从原理、场景判断、配置步骤到排查方法一次讲清楚。如果你正在做企业网络改造、准备华为ICT大赛或者只是用eNSP搭实验练手这篇文章应该能帮你省下不少折腾的时间。1. 先搞懂双向映射到底在解决什么问题1.1 一个典型的“地址打架”现场先说刚才那个案例。总部内网是192.168.1.0/24分公司内网也是192.168.1.0/24两台设备通过加密隧道把两边的私网“接”在一起。从总部的主机访问分公司的服务器报文到了分公司防火墙之后防火墙一看目的地址是192.168.1.x按路由表一查发现这个网段就在本地于是把报文直接扔给了本地网络。但问题是这个报文根本不是发给本地主机的它是从隧道那边过来的目的地址在分公司侧并没有对应的主机。结果就是报文被错误地投递通信彻底失败。反过来也一样。分公司的主机如果主动访问总部也会出现同样的问题。这个场景在现实项目中其实不少见——尤其是两个单位合并、网络互联或者分支机构沿用总部规划的时候地址段经常撞车。如果推倒重来重新规划地址牵扯到所有终端、服务器、打印机、监控设备工程量非常大而且很容易漏改。在这种背景下双向NAT就成了最省事的解法我不动你原有的地址规划只在防火墙上做“翻译”让两边看起来对方的网段是另一个地址段。1.2 华为USG的NAT三分法源NAT、目的NAT和双向NAT华为USG防火墙上的NAT体系按照转换对象可以分成三大类NAT类型转换对象典型场景华为USG上的配置入口源NATSource NAT转换报文的源IP地址内网用户上网把私网地址转换成公网地址NAT策略中配置action source-nat或用easy-ip目的NATDestination NAT转换报文的目的IP地址外网用户访问内网服务器把公网地址映射成私网地址NAT Server、NAT策略中配置action destination-nat双向NATBidirectional NAT同时转换源IP和目的IP地址重叠的站点互联、内网用户通过公网地址访问内部服务器NAT策略中同时配置source-nat和destination-nat很多刚接触防火墙的同学以为双向NAT是某个独立的开关其实不是。双向NAT的本质就是“在一条NAT策略里同时给报文做源地址转换和目的地址转换”。去程报文两个地址都变了回程报文再反着变一次这样就能保证整个会话的来回路径一致、地址可路由。1.3 双向NAT的本质一次会话四个地址一起变我举个例子你就明白了。假设总部内网服务器A的地址是192.168.1.10分公司有一台主机B地址也是192.168.1.10。为了让总部和分公司能互相访问我们在总部的防火墙上做双向NAT把总部的192.168.1.0/24“映射”成172.16.1.0/24。那么当总部的主机源地址192.168.1.100访问分公司的服务器实际地址192.168.1.10时配置层面我们告诉防火墙去往某个网段的报文目的地址如果是192.168.1.10先把它改成分公司服务器的真实地址同时源地址192.168.1.100要改成172.16.1.100这样回程报文才能沿着隧道正确地回来。从报文视角看报文方向转换前转换后去程总部 - 分公司源192.168.1.100目的192.168.1.10源172.16.1.100目的192.168.1.10回程分公司 - 总部源192.168.1.10目的172.16.1.100源192.168.1.10目的192.168.1.100看到没有出去的时候源地址变了回来的时候目的地址再变回去。整个过程对两端主机完全透明它们始终觉得自己在和192.168.1.x网段通信。这就是双向NAT最核心的价值——在网络地址规划冲突的时候用最少的改动实现全网互通。2. 配置前必须想清楚的四件事2.1 判断你的场景属于哪一种双向NAT不是万能的也不是所有场景都需要做。我在实际项目中遇到的双向NAT需求基本可以归成三类第一类站点间地址重叠互访。两边内网网段相同需要通过加密隧道互联。这是最常见的一种也是本文实战一要演示的。第二类内网用户通过公网地址访问内部服务器NAT回流/Hairpin。比如企业内部有一台OA服务器对外映射的公网地址是202.106.x.x内网用户也想通过这个公网地址访问OA而不是绕道内网IP。这个场景涉及“先目的NAT再源NAT”的配合实战二会讲。第三类端口映射加源NAT联动。比如外网用户访问内网某台服务器的Web服务同时这台服务器还需要主动访问外网。为了让回程报文能正确找到服务器也需要双向NAT的配合。在动手配置之前先问自己三个问题这个场景是真的需要双向NAT还是单方向的源NAT或目的NAT就能解决双向NAT影响的范围是哪些网段、哪些主机转换后的地址段会不会和现有路由冲突这三个问题想清楚配置思路基本就成型了。2.2 Web界面还是命令行华为USG防火墙配置双向NAT有两条路Web界面和命令行CLI。如果你是在eNSP里做实验或者面对的是USG6000系列这种主流设备我个人建议优先用Web界面。原因很简单Web界面把源NAT和目的NAT放在同一个策略页面里不容易漏配而且有图形化的对象选择器对新手非常友好。命令行虽然看起来很“专业”但一长串配置敲下来很容易在某条命令上卡住尤其是版本不同导致的命令差异。当然命令行也有它的优势可复制、可批处理、适合交付文档。我现在的习惯是先用Web界面把配置走通验证无误后再用display命令把配置导出来整理成命令行版本放进交付文档里。这样既保证了配置正确又方便后续批量部署。如果你在eNSP里练手建议两种方式都试一遍考试和实际项目里都可能会遇到。2.3 配置前必查的五个关键点双向NAT配置本身不难难的是前置条件没准备好。我整理了五个必须检查的项缺一个都可能导致NAT不生效安全区域Zone划分正确。防火墙是基于区域的策略控制设备源区域、目的区域必须明确。比如内网接口划入trust区域外网接口划入untrust区域NAT策略里的源区域和目的区域要和报文实际出入的区域一致。路由可达。NAT转换后的地址段必须能在防火墙上找到正确的出接口路由。很多双NAT配置失败不是NAT本身写错了而是转换后的地址段没有路由。接口IP和NAT地址池没有冲突。转换后的地址不能和现有接口IP、内网地址段重叠否则会产生路由黑洞。安全策略放行。华为USG上NAT策略和安全策略是两套东西NAT负责改地址安全策略负责放行流量。很多朋友配完NAT发现还是不通一看安全策略流量压根没放行。确认版本差异。不同版本的USG软件NAT策略的命令行格式略有差异配置前用display version确认一下软件版本再去查对应版本文档或者用Web界面操作能少踩很多坑。2.4 在eNSP里练手要注意什么华为的eNSP模拟器里集成了USG6000V防火墙是练习NAT配置的好工具。但有几个坑我必须提醒你第一eNSP里的防火墙设备启动非常慢有时候要等两分钟以上别急着重启给设备一点时间。第二新版的eNSP比如eNSP Pro对电脑配置有一定要求如果你的机器带不动可以把防火墙换成较低版本或减少同时运行的设备数量。第三eNSP里防火墙默认可能没有开启Web管理功能如果你想用浏览器图形界面配置需要先给防火墙配置一个管理IP并开启HTTP/HTTPS服务。具体命令后面实战部分我会提到。在eNSP里练双向NAT有个好处可以自由搭拓扑随便改配置错了就重置完全不用心疼设备。建议你先在eNSP里把实验跑通再考虑在真实设备上操作。毕竟生产环境的防火墙配置错了影响的可是整个网络。3. 实战一地址重叠场景的双向NAT配置3.1 拓扑与地址规划我们来搭建一个模拟环境。这个拓扑用eNSP就能实现不需要真机总部防火墙USG-A连接总部内网和加密隧道分公司防火墙USG-B连接分公司内网和加密隧道。为了方便演示我只在一侧做双向NAT另一侧保持原地址不动。设备/网段地址规划总部内网段192.168.1.0/24总部防火墙USG-A内网接口192.168.1.1/24总部防火墙USG-A隧道接口172.16.0.1/30分公司防火墙USG-B隧道接口172.16.0.2/30分公司内网段192.168.1.0/24总部要做NAT转换后的网段172.16.1.0/24为了分辨两个相同网段里的主机我们约定总部内网有一台服务器IP是192.168.1.10我们把它“映射”成172.16.1.10给分公司访问分公司内网有一台同IP的服务器保持192.168.1.10不变。这样分公司的主机访问172.16.1.10时实际访问的就是总部的服务器分公司自己网段里的192.168.1.10还是本地的服务器两边互不干扰。3.2 CLI配置逐条拆解先登录总部防火墙USG-A。我以USG6000 V500R005及以上版本为例给出命令。第一步是配置接口IP和安全区域# 进入内网接口 interface GigabitEthernet1/0/0 ip address 192.168.1.1 255.255.255.0 service-manage ping permit quit # 将接口划入trust区域 firewall zone trust add interface GigabitEthernet1/0/0 quit # 配置隧道接口IP interface Tunnel0/0/1 ip address 172.16.0.1 255.255.255.252 quit # 将隧道接口划入untrust区域 firewall zone untrust add interface Tunnel0/0/1 quit注意我把隧道接口划入了untrust区域这是因为隧道的对端是分公司网络属于“不可信”的边界。实际项目中你完全可以根据安全策略把它划到自定义区域里但区域划分必须和后续NAT策略里的区域配置保持一致。接下来配置NAT地址池。这个地址池用来存放转换后的源地址nat address-group dual_nat_pool mode pat section 0 172.16.1.10 172.16.1.200 quit地址池的范围我取了172.16.1.10到172.16.1.200注意不能包含路由器、服务器等已经被占用的地址否则会冲突。mode pat表示端口复用模式多个内网用户共享一个地址池通过端口号区分会话这对IPv4地址紧张的环境非常友好。然后是核心的双向NAT策略nat policy name dual_nat_to_branch source-zone trust destination-zone untrust source-address 192.168.1.0 mask 24 destination-address 192.168.1.0 mask 24 action source-nat address-group dual_nat_pool action destination-nat destination-address 192.168.1.10 quit这条策略的含义从trust区域总部内网去往untrust区域分公司隧道的报文如果源地址是192.168.1.0/24目的地址也是192.168.1.0/24就把源地址转换成172.16.1.x来自dual_nat_pool地址池同时把目的地址转换成192.168.1.10分公司服务器的真实地址。这里有一个非常重要的细节目的地址的转换到底转成什么取决于你访问的到底是分公司哪台机器。我在例子里把目的地址统一转成了192.168.1.10这是为了演示。真实场景中如果分公司有多台服务器你通常需要多条NAT策略或者在目的地址转换时配合端口号来区分。如果你是访问分公司的一个网段而不是单台主机华为USG也支持配置目的地址转换时使用地址段映射但配置复杂度和排查难度都会上升建议先从单台主机练起。配完了NAT策略别忘了安全策略。我加一条宽松一点的放行规则便于测试security-policy rule name permit_trust_to_untrust source-zone trust destination-zone untrust action permit quit如果你使用的是eNSP还需要确认防火墙的Web管理和telnet/ssh功能是否开启否则后续想登录设备或者抓配置都麻烦# 开启Web管理 http server enable https server enable # 配置管理员可以登录的区域 manager-user admin service-type web quit # 配置管理接口 interface GigabitEthernet1/0/0 service-manage https permit service-manage ping permit quit以上配置在分公司防火墙上大部分不需要做只要把隧道接口地址配成172.16.0.2内网接口配好再放行从隧道侧过来的流量即可。3.3 验证与测试配置完成后验证分为三步。第一步在总部内网的一台主机上ping分公司服务器的真实地址192.168.1.10ping 192.168.1.10如果通了说明去程报文的源地址转换和目的地址转换都生效了回程也能正确地变换回来。第二步在防火墙上查看NAT会话display nat session table你应该能看到一条会话源地址显示为172.16.1.x目的地址显示为192.168.1.10并且会话状态是正常的。第三步如果有条件在隧道接口上抓包确认报文出了总部防火墙之后源地址确实变成了172.16.1.x。这一步我经常做因为抓包能直接证明NAT是否真正生效而不是靠猜。我自己第一次做这个实验的时候卡在了一个意想不到的地方ping通了但访问服务器的具体端口不通。后来才发现是安全策略里只放行了ICMP协议TCP端口没放行。在真实项目中这种“通了又没完全通”的情况特别多所以验证的时候一定要测具体的业务端口不要只ping一下就完事。4. 实战二内网用户通过公网地址访问内部服务器4.1 场景与配置思路第二个场景可能比你想象中更常见。公司有一台OA服务器内网地址是192.168.10.10防火墙把它映射成了公网地址202.106.1.88提供外部访问。外部用户访问202.106.1.88没问题但内网用户麻烦就来了他们访问202.106.1.88的时候流量出了防火墙又被路由器扔了回来很多情况下根本不通或者通了但响应极慢。原因就是内网用户到公网地址的报文在防火墙上没有对应的NAT处理逻辑形成了一个“绕路黑洞”。这个问题在华为USG上有两种解决思路一种是在内网DNS上做域名解析分流内网用户解析域名时直接返回内网地址不经过公网映射另一种就是本文要讲的通过双向NAT实现“NAT回流Hairpin”让内网用户访问公网地址的流量也能正确转换。用双向NAT的思路是这样的内网用户访问202.106.1.88时防火墙先把目的地址从202.106.1.88转换成192.168.10.10同时把源地址从内网用户的私网地址转换成防火墙出接口的地址或者一个NAT地址池的地址。这样服务器收到的报文源地址是防火墙的地址回包也回到防火墙防火墙再根据会话表把回包的目的地址转换成用户的私网地址。整个来回都能在防火墙内部完成转换不需要绕到外部网络。4.2 Web界面操作演示华为USG的Web界面配置这个场景非常直观。登录Web管理界面后按下面步骤操作第一步配置NAT Server也就是目的NAT。在“策略 NAT策略 NAT Server列表”里新建一条公网接口选择连接外网的接口公网地址填202.106.1.88内部服务器地址填192.168.10.10服务选HTTP或你实际使用的端口。第二步配置源NAT策略。在“策略 NAT策略 NAT策略列表”里新建一条策略名称填hairpin_snat源区域选择trust目的区域也选择trust注意这里目的区域选trust因为转换后的目的地址是内网地址源地址填内网用户网段目的地址填202.106.1.88/32。动作里勾选源地址转换选择“转换为出接口IP”或指定地址池。第三步配置安全策略。在“策略 安全策略”里放行内网用户访问202.106.1.88的流量。这里有个细节安全策略的匹配时机在NAT策略之后吗不是的华为USG默认是先匹配安全策略再匹配NAT策略所以安全策略里的目的地址要写转换前的公网地址202.106.1.88而不是转换后的内网地址。很多人在这一步搞反了结果安全策略放行的目的地址写成了192.168.10.10导致流量被丢弃。第四步如果上述配置做完还是不通检查接口下是否开启了NAT hairpin功能。在部分USG版本上需要在连接内网的接口下执行interface GigabitEthernet1/0/0 nat hairpin enable quit这个命令的作用是允许从内网接口进来的流量经过NAT转换后仍然从同一个接口出去。默认情况下这个功能是关闭的很多工程师排查到最后才发现是这个开关的问题。4.3 为什么这个场景一定要双向NAT可能有人会问只做目的NAT不做源NAT行不行答案是可以但有前提——服务器回包时能直接路由到用户。在实际场景中如果你只做目的NAT服务器收到的报文源地址是192.168.10.100用户的真实地址它回包的时候会尝试直接把这个报文发给192.168.10.100。在很多网络环境里这是没问题的因为服务器和用户在同一个二层网络。但如果服务器和用户之间隔了路由器或者服务器的网关设在防火墙上回包路径一复杂就容易出问题。做源NAT的核心作用是强制让回包必须经过防火墙利用防火墙的会话表保证来回路径一致。这就像你寄快递如果寄件人和收件人都在同一个小区你可能觉得直接放门口就行但如果小区门禁很严快递员还是得通过门卫防火墙转一手才最稳妥。双向NAT在回程路径复杂、多网关、多路由的环境里是一种更可控、更保险的做法。5. 常见问题与排查技巧实录5.1 问题速查表我整理了这几年来配置华为USG双向NAT时最常遇到的问题做成一张速查表方便你对照排查现象可能原因排查命令/方法ping不通对端安全策略未放行ICMPdisplay security-policy rule all确认规则匹配ping通了但业务端口不通安全策略未放行业务端口检查策略中的服务类型补充TCP/UDP端口双NAT配置后只有单向通回程路由缺失或NAT反向不生效display nat session table观察回程会话内网访问公网映射地址不通NAT hairpin未开启检查接口下是否配置nat hairpin enable转换后的网段访问不了地址池与现有路由冲突display ip routing-table检查冲突路由配置了NAT但没匹配到NAT策略匹配顺序问题display nat policy all确认策略顺序和参数两边地址相同无法互访没有做源NAT只做了目的NAT确认action source-nat是否配置5.2 一套可复制的排查方法排查NAT问题我的经验是遵循“从外到内、从粗到细”的顺序。先看最外层的现象——报文到底到没到防火墙然后在防火墙上确认流量有没有命中安全策略有没有命中NAT策略最后再深入到NAT会话表确认地址转换是否正常。具体来说用一条命令就能看很多东西display firewall session table这条命令会显示防火墙上的会话条目包括五元组信息和NAT转换前后的地址。如果会话里显示的源地址、目的地址和你预期的转换结果不一致说明NAT策略的匹配有问题。再看display nat session table这条命令专门显示NAT会话能更直观地看到转换前后的地址对。如果这里没有会话说明流量根本没有命中NAT策略回去检查策略的源区域、目的区域、地址段是否匹配。如果会话正常但业务还是不通那就需要抓包分析了。华为USG可以在诊断视图下用抓包命令也可以用eNSP里的抓包工具。抓包时重点看两个点出接口的报文源地址是否已经变成转换后的地址回程报文的目的地址是否被正确还原。这两个点一旦确认NAT本身就没有问题了剩下的问题大概率出在应用层或路由层。5.3 我踩过的几个坑第一个坑NAT策略的匹配顺序。华为USG的NAT策略是按顺序匹配的匹配到第一条就不再继续往下找。如果你的NAT策略列表里有一条更宽泛的策略排在前面后面的双向NAT策略永远不会生效。我遇到过一位同事配了一条“trust到untrust全放行并做easy-ip”的策略放在最前面结果双向NAT一直不生效查了好久才发现是顺序问题。所以配置双向NAT策略时尽量把具体的策略放在宽泛策略前面。第二个坑目的地址转换的地址段问题。在做地址重叠场景的双向NAT时如果你的NAT策略目的地址写的是一个网段比如192.168.1.0/24而实际想访问的只是其中一台服务器那么所有目的地址是192.168.1.0/24的流量都会被转换到那一台服务器上导致其他主机不可达。这个问题的本质是“转换粒度”没有规划好。建议先精确到单台主机跑通了再考虑扩展网段排查的时候会省很多事。第三个坑回程路由。双向NAT不只是改去程报文回程报文同样需要正确路由。如果你在防火墙上配置了地址池172.16.1.0/24但防火墙本身没有这条网段的路由或者路由的下一跳指向了错误的方向回程报文就会丢。我建议配置双向NAT时把转换后的网段单独写一条静态路由指向内网方向这样即使地址池范围比较大也不容易出差错。还有一个很实用的小技巧在eNSP里做实验配置完NAT后不要太急着测试等待几秒钟让防火墙刷新会话。有时候你刚配置完立刻去ping第一次会超时第二次就通了这不是配置问题而是会话表还没建立。别问我怎么知道的说多了都是泪。写在最后的一点体会双向NAT在华为USG防火墙上的配置逻辑本质上就是“源也要变、目的也要变、回程反着变”这三个环节的串联。配置命令并不多真正的难点在于对场景的理解——你到底需要转换哪些地址、转换后怎么保证回程可达、安全策略和NAT策略的匹配顺序会不会打架。这些想清楚了不管是Web界面还是命令行都能很快配出来。我个人在实际操作中的建议是新手一定先用eNSP搭拓扑把本文的两个实战场景亲手做一遍尤其是地址重叠场景那是最能帮你理解双向NAT本质的实验。做通了之后再拿着display配置去对照真实设备。配置之前用纸笔把转换前后的地址对画出来标出去程和回程的变化确认无误再动手。这张纸上的逻辑通了设备上的配置就不会错。希望这篇文章能让你少踩几个我踩过的坑。
返回列表