ARTICLE DETAIL

资讯详情

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

华为USG6000V防火墙NAT配置实战:源NAT与NAT Server详解

华为USG6000V防火墙NAT配置实战:源NAT与NAT Server详解 1. 从实际需求说起USG6000V这个实验到底解决什么问题做企业网络这块的兄弟应该都有共鸣以前搞防火墙配置多数是在真机上操作碰坏了配置就得跑机房有时候为了测一个NAT策略还得申请变更窗口。现在好了ensp里集成USG6000V已经很成熟我们可以在模拟器里把华为下一代防火墙的主要功能玩明白其中最容易上手、也最实用的一块就是NAT的配置。但说句实在话我在带新人或者帮网友远程看配置的时候发现很多人对USG6000V上的NAT理解存在误区。最常见的困惑就是为什么我配了NAT策略内网还是ping不通外网为什么我明明做了服务器映射外网就是访问不了内网web页面这些问题的根源往往不是某一条策略写错了而是对USG6000V上NAT的工作流程、安全策略方向、NAT策略和接口域名的关系没有建立起一个整体的认知框架。这篇文章就用一个最典型的组网需求来做示例内网PC访问外网源NAT外网用户访问内网服务器目的NAT也就是通常说的服务器映射。整套配置下来你会清楚看到USG6000V上从接口划分、安全区域、安全策略到NAT策略的一条完整链路。我把在实际配置过程中容易踩的坑、容易漏掉的步骤、以及验证思路一并写出来希望能帮你少走弯路。2. 组网拓扑与地址规划先画清楚图再动手配置防火墙和写代码一个道理得先有设计图。别嫌这一步啰嗦我见过太多人上来就敲命令敲完了才发现网段对不上、接口区域划分不合理然后返工。2.1 最简单的实验拓扑我们用ensp搭一个最小化拓扑USG6000V防火墙两台或者一台也行实际组网中防火墙一般部署在网络出口位置上联运营商下联内网核心交换机。实验环境里简化一点防火墙下面直接接PC和服务器。内网PC模拟企业内网用户网关指向防火墙内网接口。内网服务器跑一个HTTP服务模拟企业门户网站需要通过公网地址被外网访问。外网PC模拟互联网用户网关指向外网侧路由器或者防火墙外网接口的对端设备。具体接口和地址规划如下设备接口IP地址所属区域说明USG6000VGigabitEthernet1/0/0内网口192.168.1.1/24trust内网PC和服务器网关USG6000VGigabitEthernet1/0/1外网口200.1.1.1/24untrust连接运营商或公网内网PC-192.168.1.10/24trust网关192.168.1.1内网服务器-192.168.1.100/24trust网关192.168.1.1对外提供HTTP服务外网PC-200.1.1.100/24untrust网关200.1.1.1对应防火墙外网口实验环境里模拟公网可以用一台路由器或直接用外网PC的网关指到防火墙外网口。但更真实的做法是中间加一台路由器模拟运营商把防火墙外网口和路由器的一个接口划在同一个网段这样更贴合实际组网。不过为了聚焦NAT配置本身我这里直接让外网PC和防火墙外网口互联少一个层级思路更清晰。2.2 明确我们的NAT目标配置之前把需求量化成下面两条内网到外网源NAT192.168.1.0/24网段的PC访问外网时防火墙把源地址转换成外网接口的公网IP 200.1.1.1。这是典型的出接口地址转换PAT也是绝大多数企业上网的默认形态。外网到内网服务器目的NAT外网用户访问200.1.1.1的80端口时防火墙把目的地址和端口转换成192.168.1.100的80端口。这是典型的NAT Server服务器映射也有人叫端口映射、端口转发。这两个需求看似简单但在USG6000V上配置时涉及的概念和步骤不少。做好拓扑规划之后我们进入环境准备环节然后逐步配置。3. 模拟环境准备USG6000V导入与初始化避坑指南很多人在配置NAT之前就倒在了环境搭建上。毕竟USG6000V设备包不像ensp自带的路由器交换机那么省心导入和使用过程中有几个地方特别容易出问题。3.1 设备包导入的正确姿势从网上或者华为官方渠道下载USG6000V的镜像包之后在ensp里添加设备时会提示选择设备包或镜像文件。这里注意USG6000V的镜像包后缀通常是.zip格式不要解压直接以压缩包形式导入。第一次导入时建议关闭ensp重新以管理员身份运行否则有些电脑会因权限不足导致导入失败。导入完成后添加设备到拓扑中启动设备时会自动加载镜像。这一步有个常见的报错错误代码40。这个错误基本可以归为两类原因——一类是VirtualBox版本兼容性问题另一类是设备包与ensp版本的匹配问题。解决办法我试过比较稳的是先卸载旧版本VirtualBox安装ensp要求的指定版本然后重启电脑再启动设备。如果还是报40检查一下电脑的CPU虚拟化是否开启Windows功能里Hyper-V是否与VirtualBox冲突。实验机器上如果开着Hyper-V建议在BIOS里关闭虚拟化嵌套或者在Windows功能里关掉Hyper-V和Windows虚拟机监控程序否则VirtualBox和Hyper-V打架是必然的。3.2 防火墙的初始化配置设备启动起来之后控制台登录默认用户名和密码都是admin首次登录会提示修改密码。我习惯在初始化阶段就把下面三件事做掉开启Web管理功能方便后面用图形界面查看配置和状态。USG6000V默认可能只开放了console管理需要使用命令行开启HTTP/HTTPS管理服务。配置接口IP和区域这是后面所有策略的基础。确认路由特别是默认路由这决定了防火墙怎么把内网流量转发到外网。初始化配置可以通过Web界面也可以完全使用命令行。个人经验是纯命令行操作效率更高而且ensp里的USG6000V命令行和真实设备高度一致练熟了直接能迁移到现网设备上。后面我的配置示例就用命令行来写Web界面的操作思路我会在关键节点提一下。4. 内网访问外网的源NAT配置从接口区域到安全策略这一节是很多人配置NAT时的第一道坎。因为USG6000V上的NAT生效不是简单加一条nat命令就完了它依赖底层的接口、区域、路由、安全策略全部就位。缺一个环节流量就出不去。4.1 接口IP与安全区域的基础配置华为防火墙的接口必须划入安全区域这个区域概念很重要trust代表内网可信区域untrust代表外网不可信区域dmz代表隔离区。我们这里内网PC和服务器都划入trust外网口划入untrust。# 进入内网口配置IP并划入trust区域 system-view interface GigabitEthernet1/0/0 ip address 192.168.1.1 255.255.255.0 quit firewall zone trust add interface GigabitEthernet1/0/0 quit # 进入外网口配置IP并划入untrust区域 interface GigabitEthernet1/0/1 ip address 200.1.1.1 255.255.255.0 quit firewall zone untrust add interface GigabitEthernet1/0/1 quit这段配置看起来简单但有几个细节要留意USG6000V的接口默认是路由模式如果没有特殊需求保持默认即可。不需要额外配置vlan模拟器环境下直接使用三层接口最省事。内网PC和服务器必须能ping通网关192.168.1.1如果不能通问题不出在防火墙要先查接口和PC的IP配置。配置完接口之后建议用display ip interface brief查看接口状态确保up。4.2 配置默认路由让防火墙知道去哪里找外网防火墙和外网PC互联的网段是200.1.1.0/24防火墙想要把内网流量送到外网至少需要一条默认路由指向这个方向。比如下一跳是运营商的网关地址实验环境里可以写成200.1.1.2外网PC的网关或者直接指向外网接口对端设备的接口地址。如果外网侧用的是路由器模拟运营商下一跳就填写路由器与防火墙互联接口的IP。ip route-static 0.0.0.0 0.0.0.0 200.1.1.2这里的下一跳地址根据你的实际拓扑填写。要特别注意在实验环境中如果外网PC的网关直接是防火墙外网口200.1.1.1那么防火墙的默认路由下一跳甚至可以不填因为200.1.1.0/24是直连网段。但在更真实的组网里中间隔了运营商设备下一跳必须指定。配置完路由后可以用display ip routing-table查看。这里有个容易被忽略的点源NAT本身不产生路由但它依赖路由让流量能从正确的出接口出去。路由错了NAT即使配了也不会生效。4.3 创建源NAT策略两条命令的核心逻辑USG6000V上的源NAT策略配置有两种常见方式一种是在接口下直接配置NAT Outbound这种方式比较传统另一种是配置NAT策略NAT Policy通过匹配源地址和目的地址来指定转换行为。我推荐后者因为NAT策略的灵活度更高也更接近新版华为防火墙的主流配置方式。下面是使用NAT策略实现内网访问外网的配置# 创建ACL匹配需要做NAT的内网地址段 acl number 2000 rule 5 permit source 192.168.1.0 0.0.0.255 quit # 创建NAT策略 nat policy rule name nat_to_internet source-zone trust destination-zone untrust source-address 192.168.1.0 24 action source-nat easy-ip quit注意这里easy-ip的含义直接将源IP转换成出接口即外网接口的主IP地址也就是200.1.1.1。这是最简化的方式适合只有一个公网IP的小型网络。如果企业有多个公网地址可以使用address-group方式配置一组公网IP来做地址池转换。4.4 安全策略NAT生效前的最后一道关卡这是新手最容易忽略的环节。很多人在华为防火墙上配了NAT策略但内网还是无法访问外网原因就是安全策略没有放行。华为防火墙默认情况下不同安全区域之间的流量是被拒绝的。trust到untrust的流量即使NAT转换了没有安全策略允许也是被丢弃的。注意在我们这个NAT策略示例中内网流量是从trust区域进入防火墙从untrust区域出去所以安全策略的方向是trust到untrust。在这个方向上需要放行目的地址为任意地址的流量。配置命令如下security-policy rule name policy_trust_to_untrust source-zone trust destination-zone untrust action permit quit这里我给的是最宽泛的放行策略实际企业中一般会限制源地址和目的地址。但是作为基础配置示例先放通是最直接的验证方式。安全策略的本质是控制跨越安全区域的流量NAT只负责地址转换两者职责不同但是相互配合少一个都不行。4.5 验证源NATping通不代表NAT一定做对了配置完成后从内网PC ping外网PC的地址200.1.1.100如果能通说明基础链路和安全策略都正确。但是ping通并不能完全证明NAT生效了因为防火墙还有一种情况是快速转发Fast Forward直接放行了已有会话不经过NAT检查。为了确认NAT真的把地址转换了有两个排查指令很实用display firewall session table这条命令会显示出防火墙当前的会话表在会话里能看到源地址、目的地址以及转换后的源地址。如果转换后的源地址显示为200.1.1.1说明NAT策略生效了。display nat session table这条命令专门查看NAT会话能看到更详细的转换信息包括地址转换前后的一一对应关系。我在实际排查中还有一个习惯在防火墙的诊断视图下抓包。不过对于普通入门者先把以上两条指令用好就足够了。5. 外网访问内网服务器的NAT Server配置方向反过来的NAT内网访问外网是源地址转换外网访问内网服务器则是目的地址转换。这一步的配置逻辑和前面类似但是方向和关注点完全不同。很多人在这里会犯错把安全策略的zone方向搞反导致外网一直连不上服务器。5.1 理解目的NAT的本质外网用户访问公网IP 200.1.1.1的80端口这个公网IP是防火墙外网口上的地址。防火墙收到这个流量后发现目的地址和端口命中了NAT Server规则就把目的地址改写成内网服务器的192.168.1.100:80然后根据路由把流量送到内网。整个过程是外网用户 → 防火墙外网口200.1.1.1:80→ NAT Server转换 → 内网服务器192.168.1.100:80这里要注意对于外网用户来说他根本不知道内网服务器的真实IP他看到的只是你对外发布的公网地址。这就是服务器映射的核心价值。5.2 配置NAT Server在USG6000V上配置NAT Server非常简洁nat server name web_server protocol tcp global-address 200.1.1.1 global-port 80 inside-address 192.168.1.100 inside-port 80这条命令的含义是外网访问200.1.1.1的80端口时转换成192.168.1.100的80端口。如果你希望外网用别的端口访问比如用8888对外内网映射到80只需要把global-port 8888就行这种端口转换能力在实际部署中很常用可以一定程度上隐藏真实端口。5.3 安全策略的放行方向untrust到trustNAT Server是目的NAT流量从外网进入内网方向是untrust到trust。所以安全策略需要放行这个方向的流量并且只放行允许访问的端口。security-policy rule name policy_untrust_to_trust_web source-zone untrust destination-zone trust destination-address 192.168.1.100 32 service tcp 80 action permit quit这里有个非常关键的理解点安全策略匹配的是NAT转换之后的地址还是转换之前的地址答案是默认匹配NAT转换后的地址。也就是说在untrust到trust这条安全策略中目的地址要写内网服务器转换后的真实地址192.168.1.100而不是公网地址200.1.1.1。这跟很多人的直觉相反但这是华为防火墙默认的检查顺序先做NAT转换再做安全策略检查。所以安全策略里的目的地址一定要是内网IP。如果不确定这个逻辑可以在配置安全策略时不做目的地址限制只放行service tcp 80端口然后再根据实际需求收紧。生产环境中建议精确控制到目的地址和端口避免其他内网资源被外部探到。5.4 服务器的网关和防火墙的响应流量处理外网访问内网服务器的流量经过NAT Server转换后进入内网服务器回包的路径是怎么走的服务器收到请求后目的地址是192.168.1.100它自己的IP回包的源地址是192.168.1.100目的地址是外网用户的IP 200.1.1.100。服务器会把回包发给网关192.168.1.1也就是防火墙的内网口。防火墙发现这个回包属于之前NAT Server会话会自动做反向地址转换把源IP从192.168.1.100转换成200.1.1.1然后交给外网用户。整个过程防火墙会自动完成不需要额外配置。但有一个前提服务器必须配置正确的网关否则回包发不出去。这也是我排查此类问题时最先检查的地方。6. 高频故障配置完了还是不通的排查链路很多人在USG6000V上做NAT实验配置步骤看着都对但结果就是不理想。我在实际排错中形成了一套排查链路按顺序走下来基本能定位问题所在。6.1 从基础连通性开始查不管多复杂的NAT问题第一步永远是验证基础连通性。这个要点看起来基础但很多人跳过它直接看NAT配置导致南辕北辙。内网PC能ping通192.168.1.1吗不通就先查内网接口和PC的IP配置。防火墙能ping通外网PC吗在防火墙诊断视图下执行ping 200.1.1.100。如果通说明路由没问题。外网PC能ping通防火墙外网口200.1.1.1吗如果连这个都不通那问题出在接口或者外网侧路由跟NAT无关。基础连通性排查完成之后再进入NAT专项排查。6.2 NAT策略和路由是否匹配在源NAT场景下如果内网能访问外网但是源地址没变最常见的原因是NAT策略里的源地址匹配条件不对或者ACL规则没有包住实际源地址段。比如PC实际地址是192.168.1.10但是NAT策略里写的是192.168.1.0/24这个没问题如果PC的网段是192.168.2.0/24而策略里写192.168.1.0/24那流量就会绕过NAT策略直接以原始源IP发出导致回包无法正确送达。在NAT Server场景下路由问题也很常见。防火墙从外网口收到目的为200.1.1.1的流量做完目的NAT转换后需要根据路由表找到192.168.1.100在哪。如果内网接口不在路由表里或者接口是down的状态流量就在一个黑洞里消失了。用display ip routing-table 192.168.1.100可以看到去往服务器的路由。6.3 会话表与NAT会话表的对比这是定位问题最直接的手段。display firewall session table display nat session table如果流量从外网PC发起后display nat session table里压根没有记录说明流量没有触发NAT策略。这时候要检查NAT策略是否使能NAT策略的zone条件是否匹配外网PC所在zone是untrust目的zone是否识别为untrustNAT策略的源地址和目的地址条件是否匹配如果display nat session table里有记录但是display firewall session table里看不到流量或者看到流量被丢弃那问题大概率出在安全策略上。6.4 安全策略的命中率检查当流量经过NAT转换后防火墙会继续做安全策略检查。如果安全策略的条件不匹配流量会被丢弃。USG6000V支持查看安全策略命中次数这个功能非常实用display security-policy rule all这条命令会显示所有安全策略的命中次数。如果策略的命中数是0说明流量根本没有匹配到这条策略需要检查源区域、目的区域、地址和服务条件。如果命中数一直在增加但业务还是不通那就是策略内部的下一条规则把它拦截了此时需要从上到下逐条策略检查。6.5 别忘了检查服务器自身有时候防火墙配置完全正确但外网就是访问不了内网服务器问题出在服务器本身。常见的情况有服务器的防火墙没放行80端口。Windows Server默认防火墙会拦截外部连接请求需要在服务器上放行HTTP服务。服务器没有配置正确网关或者服务器配置了多个网卡导致回包走了错误的路径。服务器的HTTP服务实际监听的是127.0.0.1或者特定端口不是80端口。在ensp模拟环境下没有真实服务器所以这个问题不常见但在真实环境中服务器自身的防火墙策略是排查这类问题的必备环节务必留意。7. 进阶思考NAT回流、hairpin NAT与生产环境扩展配置到上面这一步基础的NAT需求已经完成了。但在实际生产环境中还有一个更加隐蔽、更容易引发困惑的问题NAT回流也称hairpin NAT、NAT回环、NAT反射。7.1 什么是NAT回流假如你在浏览器里输入公司映射的公网地址比如200.1.1.1想访问内网服务器。你在公司内网环境下执行这个操作会发现页面经常打不开或者打开了但不稳定。原因在于你的源IP是192.168.1.x内网地址。你访问的目的地址是200.1.1.1公网地址。流量到达防火墙后防火墙匹配到NAT Server规则把目的IP改造成192.168.1.100。但是防火墙没有对源地址做转换所以服务器收到的请求源IP是192.168.1.x。服务器回包时目的地址是192.168.1.x它当然会把回包直接发给内网PC不会经过防火墙的NAT会话。但是PC发出去的报文目的IP却是200.1.1.1回包源IP是192.168.1.100PC就会因为源目不匹配而丢弃回包连接失败。这就是NAT回流问题内网用户通过公网地址访问内网服务器时由于回包路径不经过防火墙导致NAT会话不完整连接中断。7.2 USG6000V上如何解决NAT回流在USG6000V上要解决内网用户通过公网地址访问内网服务器的问题需要额外配置NAT策略让内网 → 防火墙 → 内网服务器的流量也做一次源NAT确保回包回到防火墙。简单说就是要让内网PC访问公网IP的流量在防火墙处做双向NAT既转换目的地址NAT Server已做也转换源地址源NAT补充。这样服务器发出的回包目的地址就是防火墙上转换后的地址回包会回到防火墙再经过反向NAT送回内网PC。这种机制在华为防火墙上称为NAT Hairpin或者NAT Reflection。不同版本的USG6000V配置方式略有差异关键在于开启hairpin功能并确保安全策略配合。配置思路大致如下# 在接口下开启hairpin旧版本 interface GigabitEthernet1/0/1 nat hairpin enable或者在NAT策略中同时指定源NAT和目的NAT动作。具体命令根据软件版本有所区别。7.3 为什么生产环境往往不会直接用easy-ip在模拟器实验中我们用easy-ip做源NAT很简单方便但真实企业环境中一般不会这么干原因是easy-ip只能使用接口的主IP作为转换后的地址如果外网接口有多个从属IP你可能希望使用特定地址段作为出口地址。当企业有多个公网IP时会配置地址池address-group灵活维度的挂载到NAT策略上实现更精细的流量调度。某些业务对公网源地址有白名单要求如果使用接口主IP不方便做区分。所以到了生产环境要把easy-ip换成address-group核心配置逻辑一样只是把转换方式换成公网地址池。下面是一个简化的地址池配置示例nat address-group 1 address 200.1.1.10 200.1.1.20 quit然后NAT策略中action source-nat换成address-group 1。注意使用地址池方式时安全策略的匹配逻辑不变重点是确保地址池里的IP地址和出接口在同一网段否则路由会出问题。7.4 双出口NAT和策略路由的场景延伸如果你的企业是双运营商出口电信联通NAT策略会变得复杂很多。常见做法是配置多条NAT策略结合策略路由让不同目的地址的流量走不同出口、使用不同的公网地址池。这类场景在USG6000V上完全可以模拟但前提是把单出口的NAT配置吃透。此外做双出口时经常给客户配置不同区域的DNS映射让内网用户解析到比较近的运营商出口不过这个和NAT本身的关系不大属于DNS策略的范畴这里不展开。8. 实战配置汇总与个人踩坑心得把上面的配置整理成一份完整的命令行脚本便于复盘# 接口IP和安全区域 system-view interface GigabitEthernet1/0/0 ip address 192.168.1.1 255.255.255.0 quit interface GigabitEthernet1/0/1 ip address 200.1.1.1 255.255.255.0 quit firewall zone trust add interface GigabitEthernet1/0/0 quit firewall zone untrust add interface GigabitEthernet1/0/1 quit # 默认路由 ip route-static 0.0.0.0 0.0.0.0 200.1.1.2 # 源NAT策略 acl number 2000 rule 5 permit source 192.168.1.0 0.0.0.255 quit nat policy rule name nat_to_internet source-zone trust destination-zone untrust source-address 192.168.1.0 24 action source-nat easy-ip quit # NAT Server映射 nat server name web_server protocol tcp global-address 200.1.1.1 global-port 80 inside-address 192.168.1.100 inside-port 80 # 安全策略 security-policy rule name policy_trust_to_untrust source-zone trust destination-zone untrust action permit quit rule name policy_untrust_to_trust_web source-zone untrust destination-zone trust destination-address 192.168.1.100 32 service tcp 80 action permit quit最后说几点我自己的体会。第一华为防火墙的NAT和安全策略是两个相互独立的维度但两者必须配合才能工作。很多配置问题出在只改了一个维度另一个维度忘了。尤其要注意安全策略中地址匹配的是NAT转换后的地址还是转换前的地址这个底层逻辑如果不清楚配置起来会很痛苦。第二在模拟器里做实验时建议刻意练习通过命令行排查问题的能力。USG6000V的Web界面确实好用但是真实生产环境中很多网络设备管理员还是习惯在SSH终端里逐条查看配置。把display系列的排查命令练熟了到真机上心里不慌。第三实验结束后记得保存配置。USG6000V在ensp里如果不保存配置关闭拓扑再打开就全丢了。执行save命令保存配置并检查一下配置保存是否成功。在模拟器里反复配置同一套环境是浪费时间保存好实验配置能让你随时回到当前进度。如果你在配置过程中遇到了具体问题建议把display current-configuration里跟NAT和安全策略相关的部分贴出来圈出你的拓扑图和预期效果这样别人帮你排查时效率会高很多。配置NAT这件事本质上就是理清流量走向、地址转换关系和安全策略检查顺序这三点都想明白了USG6000V上的相关功能基本就掌握了大半。
返回列表