ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

HCIA-SEC备考:华为USG防火墙NAT原理、配置与排障实战

HCIA-SEC备考:华为USG防火墙NAT原理、配置与排障实战 准备考HCIA-SEC的朋友多少都有这种感觉安全方向的东西听上去全是攻防、加密、入侵检测可真到考试和动手配置的时候最先卡住的反而是最基础的网络地址转换——NAT。我在备考和做防火墙项目的时候NAT这块绕了不少弯子尤其是华为USG防火墙上的NAT策略、NAT回流、会话表联动这些点光看PPT根本不够必须亲手敲命令才能把逻辑理顺。这篇文章就把我的HCIA-SEC学习笔记里NAT部分整理出来从原理到配置到排障适合正在备考HCIA-SEC、或者刚接触华为防火墙准备做实操的同行参考内容以华为USG系列为主顺带对比一些常见环境里的NAT差异帮你少踩几个坑。1. 为什么HCIA-SEC要重点考NAT1.1 NAT在安全体系中的位置很多刚接触安全方向的人会误以为NAT只是“节省IP地址”的老技术跟安全没太大关系。这个理解在HCIA-SEC的体系里是不成立的。华为的HCIA-SEC课程把防火墙作为核心安全设备来讲而防火墙上的包过滤、安全策略、攻击防范这些功能全部要基于对会话的识别和跟踪。NAT恰恰就是在会话建立的时候修改报文的源地址或目的地址它决定了内外网流量以什么形态穿越安全设备也决定了内网主机在公网上的“身份”。没有NAT内网私有地址根本无法访问公网有了NAT安全策略才能精确控制哪些内网用户可以出去、哪些外部流量可以进来。所以NAT不是网络层的一个配件而是防火墙安全机制里承上启下的关键环节。在HCIA-SEC的考试大纲里NAT相关的知识点覆盖了原理、分类、配置和故障排查。华为官方教材在讲防火墙基础的时候会先讲安全区域再讲NAT然后才讲策略路由和应用层检测。这个顺序不是随便排的安全区域决定了流量从哪个域到哪个域NAT决定了流量在穿越域边界时怎么做地址转换而策略检测则在转换前后对报文做访问控制。如果你只背NAT命令不理解它在区域边界中的作用考试时遇到场景题会很吃亏因为你不知道什么时候该做源NAT什么时候该做目的NAT什么时候需要NAT回流。1.2 HCIA-SEC对NAT的知识要求从考试角度说HCIA-SEC笔试里NAT题目常见的有三种考法第一种是概念辨析题考静态NAT、动态NAT、NAPT端口复用的区别以及各自的适用场景第二种是配置理解题给一段防火墙配置片段问你某个PC访问服务器时源地址和端口经过NAT后变成什么第三种是排障思路题给出“内网用户用公网IP访问内部服务器不通”之类的现象让你选择原因和解决办法。第三种题往往最难因为它考的不是单一知识点而是NAT回流、安全策略、域间路由的联动理解。实验上HCIA-SEC要求你能够在eNSP或真机上完成基础NAT配置。很多培训机构只教“命令怎么敲”不教“为什么这么配”结果学员到了项目现场遇到客户说“外网能访问服务器内网自己反而不行”就完全懵了。我后面会专门讲NAT回流这块几乎是每个HCIA-SEC考生和刚入行的安全运维都绕不过去的坎。总之一句话NAT在HCIA-SEC里既是送分题也是拉分题送分是因为基础概念好拿拉分是因为把它放到真实场景里灵活运用并不容易。2. NAT核心原理与工作流程2.1 静态NAT、动态NAT、NAPT的取舍逻辑先花点时间把三种最基础的NAT技术说透因为后面所有的配置都是基于它们的。静态NAT是一对一的固定映射比如内网服务器192.168.1.10在防火墙上静态映射成公网地址203.0.113.10。这种映射关系一直存在不管服务器是否主动发起流量外部都可以通过公网地址访问它。优点是配置简单、可预测性高适合需要对外提供固定服务的服务器缺点是占用公网地址一个公网IP只能给一台内网设备用。日常很少给普通PC配静态NAT因为PC不需要被外部固定访问。动态NAT是把一组公网地址池和一组内网地址池对应起来内网主机发起访问时防火墙从公网地址池里挑一个空闲地址做转换用完就释放。它比静态NAT灵活但依然受限于公网地址数量而且连接断开后映射关系会变不适用于需要固定地址的服务。所以动态NAT在实际防火墙项目中用的也不多真正广泛使用的是NAPT。NAPT也叫端口复用、PAT它把很多内网主机映射到同一个公网IP上靠传输层端口号区分不同会话。比如内网三台PC同时访问互联网经过防火墙后源地址全部变成203.0.113.1但是源端口分别是30001、30002、30003回来的时候防火墙根据端口号把报文送回对应的PC。这是目前家庭路由器和企业防火墙出外网最主流的方案一个公网IP能承载几百上千个并发会话。这三种技术的取舍本质上是“地址映射粒度”和“公网资源消耗”的权衡。HCIA-SEC考试不会让你背定义就完事它喜欢给你一个场景比如“只有1个公网IP内网有50个用户要上网还要对外发布一个Web服务器”这时候正确答案一定NAPT配合静态映射而不是傻乎乎地配动态NAT地址池。理解了这个逻辑很多配置题就能直接秒杀掉。2.2 安全区域与NAT的联动华为USG防火墙的逻辑是安全区域。默认有trust内网、untrust外网、dmz服务器区和local设备自身四个区域。流量从一个区域到另一个区域要经过两道关卡先是NAT转换再是安全策略。这里有个容易绕晕的次序问题防火墙是先做NAT还是先查安全策略华为USG的包处理流程是先进行NAT转换然后进行安全策略检查。举个例子内网PC要访问公网服务器PC的报文到达防火墙的时候源地址是192.168.1.10防火墙把源地址转换成公网IP和端口之后再拿转换后的五元组去匹配安全策略。这意味着你写安全策略的时候源地址要写内网真实地址还是NAT转换后的公网地址答案是源地址写转换前的内网地址目的地址写转换后的公网地址。因为策略检查虽然在NAT之后但是华为防火墙在配置模型上是用“NAT策略 安全策略”分开控制的NAT策略决定了转换关系安全策略基于原始报文方向来匹配。很多新手在这里犯错以为策略里的地址必须和转换后一样结果放行策略写得乱七八糟。反过来看外部访问内部服务器目的地址是公网IP防火墙先做目的NAT把公网IP映射成内部服务器私网地址然后再做安全策略匹配所以安全策略里的目的地址要写服务器的私网地址而不是公网地址。也就是说写安全策略时核心思路是“站在内网角度看真实流量”内网访问外网源是内网真实IP目标是公网IP外网访问内网服务器源是公网任意IP目标是服务器私网IP。如果你弄反了配置完成后永远不通而且查包时非常难找到原因。2.3 会话表与NAT表项防火墙跟普通路由器最大的区别就是基于会话工作。普通路由器转发每个报文都是独立的防火墙则会把属于同一通信流的报文关联成一个会话。NAT转换表项就是和会话绑定在一起的第一个报文触发NAT转换后防火墙生成会话表记录转换前五元组、转换后五元组、所属区域、老化时间等。后续报文直接查会话表转发不再重新匹配NAT策略。这个机制引出了两个重要结论第一NAT不是对每个报文独立查规则的而是只在会话建立的第一个报文上做“翻译”后续报文跟着会话走所以会话表一定要能看到。第二会话表有老化时间TCP连接结束后会话不会立刻消失UDP的会话老化时间更短如果你调用了某些长连接应用比如数据库或视频流需要根据业务情况调整会话老化时间否则连接会被防火墙中途切断。HCIA-SEC考试喜欢围绕会话表出排错题。例如内网PC能ping通外网但TCP业务不通这时候要看是不是某些ICMP会话和TCP会话的NAT行为不同。再例如外网访问内部服务器第一次连接正常过一会儿就断十有八九是会话老化时间设置太短。这些经验在书本上不显眼但在实操中价值极高。学习NAT不能只停留在“配地址”的层面要把会话表当成排查一切通信故障的抓手。3. 华为USG防火墙NAT配置实操3.1 华为USG的NAT策略配置模型华为USG防火墙包括USG6000、USG6500系列的NAT配置方式跟老款路由器不太一样它不是在接口上直接写nat outbound而是用NAT策略统一管理。在小企业路由器上常见的配置是acl number 2000 rule 5 permit source 192.168.1.0 0.0.0.255 interface GigabitEthernet0/0/1 nat outbound 2000 address-group 1但在华为USG上你更常见到的是这样一套结构nat policy name nat_policy_1 source-address 192.168.1.0 mask 255.255.255.0 destination-address any action source-nat easy-ipNAT策略的好处是规则集中、可读性强而且能区分源NAT、目的NAT、双向NAT不用像老接口配置那样到处找。用习惯了之后你会发现所有NAT行为都能在一条或几条策略里看得明明白白而不是像老配置一样散落在接口上。配置NAT策略之前必须先明确这个NAT要解决什么问题。如果是内网访问公网也就是“SNAT”用action source-nat; 如果是公网访问内网服务器也就是“DNAT”用action destination-nat; 如果内网用户希望通过域名或公网IP访问内部的服务器也就是NAT回流则需要额外配置双向NAT或开NAT hairpin。下面我把这三类典型配置分开说。3.2 典型源NAT与目的NAT配置先看源NAT。假设内网网段是192.168.1.0/24防火墙出接口IP是公网地址203.0.113.1内网PC需要访问互联网。USG上的配置如下nat policy name snat_to_internet source-address 192.168.1.0 mask 255.255.255.0 action source-nat easy-ip这里的easy-ip表示直接使用出接口的IP作为NAT转换后的地址也就是NAPT内网所有主机共用203.0.113.1这个公网地址访问外网。如果有多个公网地址可以把easy-ip换成address-group并定义地址池。需要注意的是源NAT策略里一般不写destination-address除非你有特殊需求比如只对访问某个特定服务器的流量做NAT其他流量不转换。在HCIA-SEC考试里最常见的错误就是有人给源NAT加上了目的地址限制导致部分流量没被转换回包找不到路由结果就是“能ping通网关但上不了网”。再看目的NAT。假设内网有一台Web服务器192.168.1.100需要把公网地址203.0.113.1的80端口映射到它的80端口配置如下nat policy name dnat_web destination-address 203.0.113.1 32 service tcp 80 action destination-nat redirect-to 192.168.1.100这里的关键点是destination-address要写公网IPredirect-to写服务器私网IP。如果没有限制服务类型外部访问任意端口都会映射到服务器上这显然不安全所以生产环境一定要写service。另外如果你的服务器跑的是HTTPS还得再加一条映射443端口的策略或者用service-any加安全策略来控制。3.3 NAT回流的典型场景与配置NAT回流这个名字RFC里并没有标准定义但实际工作中这个词出镜率极高。它的场景是内网PC通过域名或公网IP访问公司内部服务器时流量不会先绕到外网再回来而是在防火墙上直接完成“目的地址转换”并且把回程流量正确送回到内网客户端。举个例子内网有一台Web服务器192.168.1.100公网映射为203.0.113.1:80。外网用户访问203.0.113.1:80防火墙做目的NAT流量到达服务器没问题。但是内网PC访问203.0.113.1:80的时候如果不做特殊处理报文会直接发到防火墙防火墙看到目的地址是自己接口的公网IP很可能会把它当成访问自身的流量而丢进local区域而不是转发给内网服务器。即使某些型号能转发回程报文的目的地址是内网PC的私网地址服务器回应后PC看到源地址是私网地址跟它访问的公网地址不一致也会丢弃。华为USG解决这个问题的思路是配置双向NAT或者开启NAT hairpin。双向NAT的意思是在做目的NAT的同时也把源地址做一次NAT让服务器看到的源地址是防火墙的私网接口地址这样服务器回包就直接回到防火墙再由防火墙根据会话表送回PC。配置片段如下nat policy name nat_hairpin_web source-address 192.168.1.0 mask 255.255.255.0 destination-address 203.0.113.1 32 service tcp 80 action destination-nat redirect-to 192.168.1.100 source-nat easy-ip注意这里的action同时带了destination-nat和source-nat意思是在转换目的地址的同时把内网PC的源地址也转换成防火墙的出接口地址。这么做的核心目的就是保证服务器回包路径和请求路径一致都在防火墙上完成交叉。如果你用的是USG6500系列要确认型号支持的软件版本是否启用“NAT hairpin”开关有些版本还需要在接口下开启hairpin enable。3.4 常用命令与查验方法配置完成后不会查状态等于没配。HCIA-SEC实操考试一般会要求你验证配置结果常用的命令就是下面这几个display nat policy all display nat session table display firewall session table display ip routing-table前两个是看NAT策略和NAT会话的第三个是看防火墙全量会话表包括不做NAT的会话第四个是检查路由。实际排查的时候顺序很重要先确认路由能通再确认NAT策略命中了最后看会话表有没有建立。display nat session table的输出里你会看到类似下面的信息slot 1 : session info NAT Session Info: Protocol: TCP(6) SrcAddr: 192.168.1.10:30000 - 203.0.113.1:30000 DstAddr: 198.51.100.2:80 - 198.51.100.2:80这里“SrcAddr”那一行箭头左边是转换前右边是转换后。如果看到转换后源地址没有变成接口IP说明源NAT策略没有生效如果看到会话表根本不存在说明第一个报文没有触发NAT或安全策略被丢了。另外还可以用debugging nat packet在诊断视图下实时打印NAT日志不过生产环境谨慎开启容易刷屏。4. NAT常见问题与排查思路4.1 NAT回流不通的快速定位NAT回流的问题是群聊里问得最多的一类。现象通常是外网访问服务器没问题内网PC通过公网IP访问服务器就是不通抓包发现PC一直在发SYN但收不到SYN-ACK。遇到这种情况我建议按下面顺序排查先确认服务器和PC之间的基础路由内网PC访问防火墙私网接口IP是否通。如果通问题大概率在NAT策略或安全策略。检查防火墙的NAT策略是否包含了内网源地址访问公网目的地址的条目。很多配置只给外网访问服务器做了目的NAT忽略了内网源这个维度导致流量走了local区域。确认是否配置了双向NAT或hairpin。如果防火墙型号老、软件版本不支持hairpin可以考虑在DNS侧做分域解析内网用户访问服务器用私网域名解析成私网IP外网用户用公网域名解析成公网IP。这是很多企业在不支持NAT回流时采用的变通方案。别忘了安全策略。即使NAT转换正确如果trust到untrust的域间策略只放行了源NAT的私网到公网方向的流量而没有放行内网PC到映射后的目的公网IP或服务器私网IP照样不通。华为防火墙的安全策略和NAT策略是两个独立组件很多“回流不通”其实是安全策略没放行不是NAT问题。4.2 会话表异常与端口冲突NAT环境下第二个高频问题是端口冲突。NAPT依赖端口号区分不同内网主机如果某个公网IP和端口已被一个会话占用新的会话尝试使用相同公网端口时就会出现冲突。正常的会话老化后端口会被释放但在高并发场景下比如内网有大量P2P下载或视频会议很容易出现端口被占满的情况新用户上不了网。排查端口耗尽的方法是用display nat session table看当前NAT会话数量华为USG有NAT会话上限型号不同容量不同。如果发现NAT会话数量接近上限优先考虑增加公网地址池把easy-ip换成多地址的address-group让NAT可以分配多个公网IP端口空间成倍扩展。另外可以调整会话老化时间或开启NAT端口扩展但这类优化需要结合业务实际不建议盲目缩短UDP老化时间否则语音视频容易卡顿。还有一种情况是防火墙回程时找不到会话表。比如外部访问内部服务器服务器的网关没有指向防火墙或者交换机上做了策略路由导致回包路径不一致防火墙作为状态检测设备如果看不到回程报文会话无法建立通信失败。排查方法很简单在防火墙上display firewall session table看有没有对应会话如果没有就去查服务器侧的路由和网关。4.3 虚拟化环境里的NAT与防火墙NAT的差异学HCIA-SEC的人多半会用到eNSP模拟器也可能会在VMware、VirtualBox或WSL里做网络实验。这些虚拟化环境的NAT和华为USG防火墙的NAT不是一个物种但理解它们的差异反而能帮你把HCIA-SEC里的NAT概念看得更透。VMware或VirtualBox的“NAT模式”核心作用是让虚拟机通过宿主机的真实网卡访问外网它本质上也是一种NAPT。虚拟机里的IP地址是私网的宿主机作为网关做地址转换区别在于你没法在这些虚拟化软件里像防火墙一样自定义NAT策略转换规则完全由虚拟网卡驱动封装好了。你在实验时如果访问不到NAT网络里的虚拟机往往是端口转发规则没配而不是NAT本身坏了。WSL的NAT模式也有自己的特点它和Windows宿主机之间天然隔了一层网络地址转换所以你在WSL里启动服务后Windows侧直接访问localhost经常失败。解决思路是把WSL里的服务监听地址改成然后从Windows侧访问WSL的NAT网段IP或者配置端口转发。这个场景你不需要掌握太深但建议了解一下NAT会改变报文的源目地址所有基于“本机回环”的假设在穿越NAT后都不成立理解这一条能解释很多虚拟化环境里的怪问题。另外Linux服务器上常用的iptables NAT属于Linux内核网络栈的netfilter框架。如果你在Linux机器上用iptables配置过NAT会发现它跟华为USG的思路惊人相似iptables把NAT分成PREROUTING、POSTROUTING、OUTPUT等链分别对应目的NAT和源NAT五元组匹配规则和动作也跟华为NAT策略一一对应。只是iptables配置起来用命令行的方式更直接而华为USG通过策略结构想让人看得更明白。熟悉其中一种迁移到另一种不会太难。网上偶尔会看到类似“iptables v1.8.9 (legacy): cant initialize iptables table nat: table does”的报错这通常是内核没有加载nat表模块或容器环境权限不足导致的不是配置语法问题换到有权限的真实环境自然就好。这种问题不属于HCIA-SEC考试范围但能遇到顺带提一句。4.4 几个能直接“抄作业”的避坑经验最后说几个我从实战里总结的“本地经验”不一定写在哪本教材上但真的能救命。第一在华为USG上配置NAT之前先给你的接口划分好安全区域并至少确认各个区域之间已经有了初步连通性。如果区域就没配对NAT配得再漂亮流量也过不去。我见过太多人一上来就写NAT策略结果发现trust和untrust两个区域压根没建接口策略根本无的放矢。第二写NAT策略时如果源地址和目的地址都涉及私网到公网的大范围场景不要滥用“any”。至少要把源地址网段限定好否则防火墙会把从其他区域进来的流量也做NAT轻则地址转换混乱重则造成环路。第三调整NAT回流时改完配置一定要看一下NAT策略匹配顺序。华为USG的NAT策略按照policy name的配置顺序匹配默认先匹配配置顺序靠前的策略如果你配置了多条NAT策略旧的策略把流量先截走了你新加的回流策略可能永远不生效。用display nat policy all查看策略顺序必要时通过move命令调整排序。第四别把所有问题都怪到NAT头上。内网PC能访问公网IP但域名解析不了那是DNS的问题外网能ping通防火墙接口IP但访问不了服务器那可能是安全策略或服务器本身的问题。NAT排障的起点永远是会话表没有会话表一切都是空谈。我个人在学习NAT时最大的体会是不要孤立地记命令要把“路由-安全区域-NAT-安全策略-会话表”这一整条链路串起来理解。HCIA-SEC考试里NAT占比再高它也只是一个环节真正拉开差距的是你对整条转发链路的直觉。刚接触的时候我也曾为了一个NAT回流折腾到半夜后来发现恰恰是那次折腾让我把防火墙的处理流程彻底搞明白了。如果你也在备考HCIA-SEC建议把eNSP打开自己配一个trust区域PC、untrust区域服务器、DMZ区域Web服务器的实验环境然后逐一验证源NAT、目的NAT、NAT回流和策略匹配顺序。把这些场景亲手复现一遍比你抱着题库刷一百道题都有用。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进