ARTICLE DETAIL

资讯详情

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

华为USG防火墙NAT配置实战:源NAT与NAT Server详解及排障

华为USG防火墙NAT配置实战:源NAT与NAT Server详解及排障 USG6000V 这个型号在 eNSP 模拟器里算是最常见的出口设备了但很多朋友一打开模拟器就开始配 NAT配完却发现内网能出去、外网死活访问不了内网服务器或者反过来。其实这类问题十有八九不是 NAT 写错而是安全策略没放行或者 NAT 转换顺序没搞明白。这篇就以一个典型的企业出口场景为例子把内网访问外网、外网访问内网服务器这两条链路的 NAT 配置完整走一遍结合我在模拟器和真实设备上踩过的坑给一份可以直接照着敲的配置思路。这套示例不挑环境只要你在 eNSP 里拖出一台 USG6000V再配两台 PC 或服务器就能复现。就算你手头是真实硬件USG6300、USG6500 甚至其他版本命令和思路也完全通用。适合刚接触华为防火墙的网工、准备 HCIP 安全方向考试的兄弟以及所有被“NAT Server 配了还是不通”折磨过的人。1. 场景与需求拆解先搞清楚这一单要做什么1.1 网络拓扑与地址规划做配置前我习惯先把拓扑和地址画清楚很多人在防火墙上越配越乱就是因为没把“哪个接口属于哪个区域”“哪个地址是哪个角色”提前固定下来。这次示例我按最常见的组网方式来搭防火墙 USG6000V 作为企业出口网关连接内网和运营商线路。内网办公网段 192.168.1.0/24用户网关在防火墙上地址 192.168.1.1。服务器单独放在 DMZ 区网段 192.168.2.0/24服务器地址 192.168.2.10网关 192.168.2.1。运营商侧给了一个公网接口地址 203.0.113.1/24网关 203.0.113.254另外分配了一个公网 IP 203.0.113.10 专门用来映射内网服务器。接口规划可以这样对应防火墙接口IP 地址安全区域连接对象GE1/0/0192.168.1.1/24Trust内网办公网段GE1/0/1192.168.2.1/24DMZ服务器网段GE1/0/2203.0.113.1/24Untrust运营商网关很多初学的人喜欢把服务器也丢在 Trust 区跟办公网混在一起图省事。我的建议是哪怕只有一个服务器也单独划一个 DMZ 区。原因后面讲安全策略的时候你会意识到区域隔离是防火墙做精细化管控的基础Trust 到 DMZ、Untrust 到 DMZ 的策略完全可以分开控制比全部揉在一起清晰得多。1.2 两条核心需求背后的本质这个场景看起来是两件事但本质上是两种完全不同的 NAT 类型内网访问外网方向是 Trust → Untrust源地址是私有 IP目标地址是公网 IP。私网地址不能在公网上路由所以防火墙必须在出接口上把内网 PC 的源地址转换成公网地址这叫源 NATSource NAT也就是我们常说的 SNAT。外网访问内网服务器方向是 Untrust → DMZ源地址是公网上的任意地址目标地址是公网 IP 203.0.113.10。但真正提供服务器的地址是 192.168.2.10所以防火墙必须把目标地址从公网 IP 转换回私网 IP这叫目的 NATDestination NAT华为设备上直接叫 NAT Server。搞清楚这两条链路的本质区别之后后面配置就不会含糊。源 NAT 改的是报文的源地址目的 NAT 改的是报文的目标地址两者可以同时存在、互不干扰这也是为什么内网用户既可以访问外网又能通过公网 IP 访问自己内网服务器的原因。2. 防火墙基础配置先把底子打好再谈 NAT2.1 接口 IP 与安全区域配置拿到一台新防火墙第一步不是配 NAT而是把接口地址配上然后把接口加入对应的安全区域。华为 USG 防火墙默认把所有接口都放在一个叫 Local 的区域之外接口默认不属于任何区域如果你不把接口加进区域报文根本没法转发。接口配置命令如下system-view interface GigabitEthernet1/0/0 ip address 192.168.1.1 255.255.255.0 quit interface GigabitEthernet1/0/1 ip address 192.168.2.1 255.255.255.0 quit interface GigabitEthernet1/0/2 ip address 203.0.113.1 255.255.255.0 quit然后划分安全区域。华为防火墙默认就存在 Trust、DMZ、Untrust 三个区域Local 区域是设备自身的报文比如 SSH 登录、ping 防火墙接口所在区域。把接口分别加进去firewall zone trust add interface GigabitEthernet1/0/0 quit firewall zone dmz add interface GigabitEthernet1/0/1 quit firewall zone untrust add interface GigabitEthernet1/0/2 quit这里有个细节容易忽略防火墙接口配置完 IP 之后默认是 up 的但如果你用的是 eNSP要确保对端设备比如云、路由器、PC也已经配置好并启动。模拟器里经常出现接口物理 up 但协议 down 的情况多半是对端设备没开或者中间链路没连好。2.2 默认路由与基础连通性防火墙作为出口网关必须有一条默认路由把流量指向运营商侧否则即使 NAT 配得再完美报文也不知道该往哪扔。配置命令很简单ip route-static 0.0.0.0 0.0.0.0 203.0.113.254这条路由的意思是所有目的地址不在直连网段的数据包全部交给 203.0.113.254 处理。对内网 PC 来说它们的网关是 192.168.1.1也就是防火墙所以 PC 先把包丢给防火墙防火墙查路由表发现目的地址是公网地址匹配默认路由于是从 GE1/0/2 转出去给运营商网关。很多人在模拟器里的第一个坑就出在这里——防火墙接口地址配好了PC 也能 ping 通网关但 PC 访问外网就是不通。先别急着查 NAT用display ip routing-table看一眼有没有默认路由没有的话 NAT 和安全策略全对也无济于事因为防火墙根本不知道怎么把包送出去。2.3 理解防火墙的“默认拒绝”机制华为 USG 防火墙默认的安全策略是拒绝所有跨区域流量只有 Local 区域内自己产生的流量默认放行。这意味着你在配置 NAT 之前其实已经把“访问通路”给断了。很多新手不理解为什么 NAT 配完了还不通就是因为忘了放行安全策略。所以在这个示例里配置完基础接口和路由之后先不要急着测通因为大概率是不通的。下一步要把两条链路的 NAT 和安全策略一起配完再统一验证。我习惯把“NAT 负责改地址安全策略负责放行”这两件事当成一条流水线来看缺一个环节整个链路就是断的。3. 内网访问外网源 NAT 配置全流程3.1 源 NAT 的两种方式怎么选内网 PC 访问外网时源地址是 192.168.1.x 这种私网地址运营商路由器看到私网源地址直接丢弃所以防火墙必须在报文离开 GE1/0/2 之前把源地址改成公网地址。华为防火墙提供了两种常见的源 NAT 方式第一种是出接口地址方式也叫 Easy IP。它的原理是把报文源地址直接转换成防火墙出接口的公网地址也就是 203.0.113.1。这种方式不需要额外申请公网 IP 池适合 SOHO 和模拟器测试环境配置简单但缺点也很明显所有内网用户都共享同一个公网 IP对应的是 PAT端口地址转换通过不同端口区分不同用户。第二种是地址池方式。你向运营商申请一段公网地址在防火墙上创建 NAT 地址池然后从地址池里选一个地址做转换。适合需要保留较多并发连接、或需要对某些用户做固定公网地址映射的场景。这个示例里我直接用 Easy IP因为内网网段只有一个模拟器环境也犯不上搞地址池逻辑最清晰。如果你在生产环境中用户数上千建议还是规划地址池或者让运营商多给几个地址。3.2 配 NAT 策略的完整命令华为 USG 防火墙配置源 NAT 分两步先在内网接口上配置 NAT 策略再在安全策略里放行。NAT 策略配置如下nat-policy rule name snat_to_internet source-zone trust destination-zone untrust action source-nat easy-ip quit这条规则的含义是凡是从 Trust 区域进来、目的区域是 Untrust 区域的报文都在出接口上做源 NAT转换成出接口的公网地址。这个写法很形象你不需要指定具体接口因为出接口是防火墙根据路由表决定的反正目的区域是 Untrust流量必然从 GE1/0/2 出去NAT 就跟到哪里。再补充说明一下eNSP 里有些版本命令提示符可能不完全一致但只要你的设备版本支持nat-policy这个框架规则名称和动作基本都一样。配置完可以用display nat-policy查看已生效的策略确认规则顺序和内容没有写错。3.3 安全策略放行trust 到 untrustNAT 策略管的是“地址怎么变”安全策略管的是“这个流量允不允许过”。给内网用户放行上网的安全策略比 NAT 配置更简单但也更容易写错方向。security-policy rule name permit_trust_to_untrust source-zone trust destination-zone untrust action permit quit这条策略的含义允许 Trust 区域内所有用户访问 Untrust 区域的所有目的地址。因为内网 PC 访问外网源地址是 192.168.1.x目的地址可能是任意公网地址所以源地址和目的地址都留空表示全部匹配。配置完这一步内网 PC 理论上就能正常访问外网了。我在模拟器里验证的时候喜欢用 PC1 去 ping 一个运营商侧的地址比如 203.0.113.254或者直接 ping 公网 DNS 的地址。如果通了说明路由、NAT、安全策略都没问题如果不通排查顺序应该是先display ip routing-table看路由再display security-policy看策略接着display nat-policy看 NAT最后看会话表display firewall session table基本上能定位到问题。3.4 验证连接并理解会话表所有配置做完之后先在 PC 上持续 ping 外网地址然后在防火墙上执行display firewall session table这条命令会显示经过防火墙的所有会话找到内网 PC 访问外网的那条会话重点看转换前后的地址。正常情况下应该能看到这样的信息原始报文192.168.1.10:xxxx → 203.0.113.254:icmpNAT 转换后203.0.113.1:yyyy → 203.0.113.254:icmp看到源地址从私网变成 203.0.113.1就说明 Easy IP 生效了。如果只有原始报文信息、没有转换后的信息说明 NAT 策略没匹配上如果根本查不到会话说明报文压根没到防火墙可能是路由或者链路问题。这里提醒一个细节ping 的通和网页打不开是两回事。ping 使用 ICMP 协议网页使用 TCP 80/443 端口如果你放行的安全策略把协议或端口限制得太多很可能出现“能 ping 通但上不了网”的情况。生产环境的策略我一般建议先测试阶段放全验证通了以后再按最小权限收紧千万别一上来就又是限端口又是限协议否则排查起来会怀疑人生。4. 外网访问内网服务器NAT Server 配置全流程4.1 NAT Server 和源 NAT 的差异外网用户要访问内网服务器这个方向和内网访问外网正好相反。内网访问外网改的是源地址外网访问内网服务器改的是目的地址。运营商分配的公网 IP 203.0.113.10 是一个“虚拟地址”它并不真实存在于防火墙或服务器上防火墙收到目的地址为 203.0.113.10 的报文时必须把这个地址翻译成服务器真正的地址 192.168.2.10然后转发到 DMZ 区。这个翻译动作就是目的 NAT华为防火墙用nat server一条命令就解决了。很多人刚开始会把nat server和安全策略里的地址搞混这里一定要记清楚nat server里的 global 地址是公网地址inside 地址是私网地址而安全策略里匹配的目的地址在华为 USG 上是私网地址因为华为防火墙的流程是先做 NAT 转换再做安全策略匹配。这个和思科、飞塔的顺序不同是华为的一个特点也是网站排障的重点。4.2 端口映射和一对一映射的配置命令假设我们内网有一台 Web 服务器地址 192.168.2.10需要在公网通过 203.0.113.10 的 80 端口访问。配置命令非常简洁nat server web_server global 203.0.113.10 80 inside 192.168.2.10 80 quit这条命令的意思防火墙收到目的地址为 203.0.113.10、目的端口为 80 的报文时将目的地址转换成 192.168.2.10端口不变还是 80然后转发到 DMZ 区。如果服务器上 Web、SSH、FTP 都在一起你可以配多条 NAT Server用不同公网端口映射到不同私网端口。比如用公网 8080 端口映射到内网 80 端口nat server web8080 global 203.0.113.10 8080 inside 192.168.2.10 80 quit还有一种情况是某台服务器需要整机映射公网 IP 的任意端口都转到内网服务器做法也简单不写端口即可nat server ftp_server global 203.0.113.11 inside 192.168.2.11 quit我通常不建议整机映射暴露面太大。除非这台服务器就是要做全端口映射的特殊业务否则能用端口映射解决问题就别把整台机器所有端口都敞到公网上。4.3 安全策略untrust 到 dmz 的放行规则NAT Server 配置完外网报文到达防火墙时会做地址转换但如果安全策略不放行报文还是会丢。有人在这里卡了很久就是因为安全策略里目的地址写成了公网地址 203.0.113.10结果一直不通。原因前面说过华为是先做 NAT 再匹配安全策略所以这里目的地址要写转换后的私网地址。正确写法security-policy rule name permit_untrust_to_dmz source-zone untrust destination-zone dmz destination-address 192.168.2.10 24 action permit quit这条策略的含义允许 Untrust 区域的所有用户访问 DMZ 区域内地址为 192.168.2.10 的服务器。如果你希望限制外网只能访问服务器的 80 端口可以再加上服务维度的匹配这里为了演示清晰先不写端口限制生产环境建议按需收紧。这里有一个关键的排查逻辑外网用户访问 203.0.113.10:80防火墙上先匹配 NAT Server把目的地址改成 192.168.2.10匹配安全策略destination-address 192.168.2.10允许通过然后按照路由表把报文从 GE1/0/1DMZ 接口转发给服务器。你如果在防火墙上抓包可能会看到报文的目的地址是公网 IP也可能已经是私网 IP这取决于你在哪个接口抓的别被搞晕。4.4 服务器主动访问外网时的双向 NAT 问题这个坑特别隐蔽。假设服务器 192.168.2.10 映射到公网 203.0.113.10 之后有外网用户通过 NAT Server 访问了服务器服务器正常返回响应报文防火墙看到这是一个已经建立的会话会自动做反向转换所以服务没有问题。但要是服务器自己主动发起访问外网的请求它的源地址是 192.168.2.10。如果防火墙给服务器所在的 DMZ 区配了源 NAT把源地址转换成公网地址那没问题如果没配服务器出去的报文源地址是私网地址运营商那边直接丢包外网服务器根本收不到请求。更麻烦的是如果这台服务器同时还被 NAT Server 映射了而防火墙没有正确关联就可能造成会话混乱。解决思路有两个要么给 DMZ 区域配一条独立的源 NAT 策略让服务器访问外网时源地址也转换成防火墙上可用的公网地址要么使用华为防火墙的双向 NAT 功能把 NAT Server 的报文在回程时正确解码。对于这个示例我建议直接给 DMZ 区单独加一条源 NAT最省心nat-policy rule name snat_dmz_to_untrust source-zone dmz destination-zone untrust action source-nat easy-ip quit配完之后服务器主动访问外网时会走这条源 NAT把源地址转换成 GE1/0/2 的公网地址外网访问服务器时会走 NAT Server 做目的映射两条链路互不干扰。这也是为什么我一开始就建议把服务器放在 DMZ 区因为可以单独给这个区域配策略不用影响办公网。5. 真实场景常见问题与排查方法5.1 外网访问不通三层检查定位法NAT Server 配完外网访问不通这是出现频率最高的问题没有之一。我整理了一个自己的排查顺序从头到尾过一遍基本能定位第一步确认运营商线路和公网 IP 是通的。方法很简单在外网一台设备上 ping 203.0.113.1也就是防火墙的 Untrust 接口地址。如果这个都不通说明链路或接口配置有问题先解决这个再说。第二步确认 NAT Server 配置没问题。display nat server看映射关系是否生效重点看 global 地址和端口有没有写错。我自己就犯过把端口写成 8080 映射到 80 的时候写反方向导致调试了半小时的蠢事。第三步也是最容易被忽略的检查安全策略。用display security-policy看规则内容重点确认destination-address是私网地址而不是公网地址。好多人在这一层卡住就是因为把目的地址写成了 NAT Server 里的 global 地址等你把这条策略动作从 deny 改成 permit 甚至直接删掉重新加故障马上就好。第四步如果前三步都没问题那十有八九是会话表异常或路由回程问题。display firewall session table看有没有会话如果只看到入方向的会话、没有出方向的回程会话那可能是服务器回包路由不对或者防火墙安全策略只放行了一个方向。华为防火墙是状态化防火墙只要入方向允许回程报文它会自动放行这点和路由器的 ACL 不一样别把两个概念混在一起排查。5.2 eNSP 加载 USG6000V 时的典型问题说到模拟器就绕不开 USG6000V 这个设备。很多人第一次在 eNSP 里拖出 USG6000V直接开机报错甚至设备根本起不来。这种问题一般不是配置问题而是设备包没装好或版本不兼容。常见的报错包括“错误代码 40”或者启动到一半就卡住。我的处理经验是确认 eNSP 的版本和 USG6000V 设备包版本是否兼容然后把防火墙设备包重新导入。导入路径通常在 eNSP 的“工具-注册设备”里先把原有设备删除重新选择设备包文件注册完成后再添加设备。注意 eNSP 对 VirtualBox 版本有要求如果版本太新或太旧都可能导致 USG6000V 进程起不来建议使用 eNSP 官方配套的 VirtualBox 版本不要随便升级。另外USG6000V 启动起来之后还要等待几分钟防火墙镜像加载比普通路由器慢很多。很多人看着启动页卡住就以为死机了其实只是还没加载完多等一会儿就好了。在模拟器里测试 NAT 时建议等系统启动完全稳定、出现命令行提示符后再开始配置避免配置写入一半设备重启。5.3 内网能出去但外网访问服务器不通查这几处内网能访问外网说明源 NAT 和基础链路没问题问题大概率出在 NAT Server 转发链路或安全策略上。我用横表把几个高频故障点列出来方便对照自查现象可能原因排查方法外网 ping 不通 203.0.113.10NAT Server 未配置或接口区域错误核对 nat server 配置和 Untrust 区域接口ping 通但打不开网页安全策略限制了端口或服务器自身服务异常检查安全策略中的服务匹配项和服务器防火墙只有内网能访问外网不行安全策略目的地址写错把安全策略 destination-address 改成私网地址服务器能出去但回不来DMZ 区缺少源 NAT给 DMZ 区补配 source-nat easy-ip访问一会通一会不通公网 IP 被运营商封禁端口或并发超限联系运营商确认端口策略检查会话数另外还有一个很容易被忽略的点就是你从外网访问 203.0.113.10 时如果自己就在内网里很多防火墙默认是不让内网用户通过公网 IP 访问自己映射的服务器。这是回流 NAT 的问题部分场景需要单独配置 hairpin NAT。如果你发现“从外网访问正常但内网用户用公网 IP 访问服务器不通”基本就是这个原因。模拟器里要测试的话最好用一台真正放在 Untrust 侧的路由器去访问不要拿内网 PC 去验证外网访问效果。5.4 常用验证命令速查最后把我做这套配置时高频使用的命令整理一下方便你调试时快速上手display ip routing-table display interface brief display zone display nat-policy display nat server display security-policy display firewall session tabledisplay firewall session table是判断 NAT 是否生效的终极手段。防火墙是状态化转发的任何跨区域流量经过时都会建立会话会话里能看到转换前和转换后的五元组。只要你看到转换后的源地址或目的地址符合预期说明 NAT 策略生效了如果根本没会话那问题一定出在路由或安全策略上。我在模拟器和真实设备上都反复验证过这套配置唯一的区别是真实设备上运营商会给你一个可用的公网 IP模拟器里则需要自己造一个公网网段。思路和命令完全一致你把 IP 替换成自己环境的地址就行。按照先接口、再区域、然后路由、接着 NAT、最后安全策略这个顺序来不要跳步基本一次就能通。
返回列表