华为防火墙基于用户的策略路由配置实战:实现精细化网络流量管理

1. 项目背景与核心价值

最近在帮一个朋友的公司做网络架构优化,他们内部有几个业务部门,比如研发、市场和行政,每个部门对网络访问的需求差异很大。研发需要稳定访问代码仓库和测试服务器,市场部则希望访问社交媒体和客户网站时能走更快的线路,而行政只需要能流畅使用办公软件就行。他们之前用的是一台华为USG6000系列防火墙,所有流量都走同一个出口,结果就是高峰期研发拉代码慢,市场刷网页卡,互相影响,体验很差。朋友找到我,问有没有办法让不同的人走不同的网络出口。我一听,这不就是典型的基于用户的策略路由需求吗?

基于用户的策略路由,说白了,就是让防火墙能“认人”。传统的策略路由是基于源IP地址、目的IP地址或者协议端口来选路的,但在办公网里,用户用的是DHCP获取IP,IP地址是动态变化的,今天坐这个工位,明天可能就换到另一个,用IP来绑定策略就非常麻烦且不准确。而基于用户,则是将网络访问权限和路径与具体的用户账号绑定。用户无论从哪里、用什么设备接入网络,只要用他的账号登录了认证系统,他的流量就会被施加预设好的路由策略。这就像给每个员工发了一张“交通卡”,研发的卡只能坐“专线地铁”去机房,市场的卡可以坐“高速公交”去公网,互不干扰。

这个功能在华为防火墙上实现起来非常顺畅,尤其是USG6000V及后续的系列。它不仅仅是解决了多出口负载和选路的问题,更深层的价值在于实现了网络访问的精细化管理。结合用户身份,你不仅能控制“他从哪条路走”,还能在策略里集成“他能去哪”、“他能用什么服务”,实现安全与效率的统一。接下来,我就结合这次实际的配置过程,把从规划到上线的完整步骤、背后的原理,以及我踩过的几个坑,给大家详细拆解一遍。

2. 前期规划与逻辑拓扑设计

在动手敲命令之前,花点时间把规划做好,能省掉后面一大半的麻烦。基于用户的策略路由不是一个孤立的功能,它牵扯到用户认证、安全策略和路由策略三个核心模块的联动。

2.1 核心组件与工作流程

整个方案的运转依赖于以下几个关键组件:

  1. 用户与用户组:在防火墙上创建用户账号,或者对接外部认证服务器(如AD域、Radius)。为了管理方便,通常将具有相同访问需求的用户归类到同一个用户组,比如developersmarketing
  2. 认证策略:定义用户如何被识别。常见的是Portal认证(网页弹窗登录)和802.1X认证(接入网络时登录)。对于有线办公环境,Portal认证部署更灵活。
  3. 安全策略:这是防火墙的看家本领,控制“谁”能访问“哪里”的“什么服务”。在基于用户的策略路由中,安全策略的源不再是IP地址,而是“用户”或“用户组”。
  4. 策略路由(PBR):这才是实现流量分流的引擎。策略路由的匹配条件中,可以包含“用户”或“用户组”。当流量匹配了策略路由后,就会被引导到指定的出接口或下一跳。

其工作流程可以简单概括为:用户上网 → 触发认证 → 认证成功,用户身份与IP绑定 → 流量到达防火墙 → 先匹配策略路由(如果配置了基于用户的条件)→ 策略路由根据用户身份指示出口 → 再匹配安全策略进行放行或拒绝检查 → 最后从指定出口转发。

2.2 网络拓扑与地址规划

我朋友的网络拓扑相对典型。防火墙作为网关,部署在公司内部网络和外部网络之间。

  • 内网接口GigabitEthernet 1/0/1, 属于trust安全区域, IP:192.168.1.1/24。内网用户网关指向此地址。
  • 外网接口1(研发专线)GigabitEthernet 1/0/2, 属于untrust区域, IP:202.100.1.2/30, 下一跳为运营商网关202.100.1.1。这条线路带宽小但延迟低、质量稳定,适合访问代码托管站(如GitLab)、云服务器等。
  • 外网接口2(普通宽带)GigabitEthernet 1/0/3, 属于untrust区域, IP:101.200.2.2/30, 下一跳为101.200.2.1。这条线路带宽大,适合普通网页浏览、视频会议等。

用户IP段为192.168.1.0/24,通过DHCP分配。我们的目标是将“研发部”用户组的流量导向GE1/0/2(专线),将“市场部”用户组的流量导向GE1/0/3(宽带),其他用户走默认路由(通常也指向宽带)。

注意:策略路由的优先级高于普通的路由表。也就是说,系统会先检查流量是否匹配某条策略路由,如果匹配,就按策略路由走;如果不匹配,才去查普通的路由表。这个顺序一定要搞清楚。

3. 防火墙基础与用户认证配置

配置的第一步,是让防火墙能识别“用户”。我们选择在防火墙上本地创建用户,并进行Portal认证,这种方式对于中小型环境来说最简单直接。

3.1 创建本地用户与用户组

首先,我们创建两个用户组,并添加示例用户。

# 进入系统视图 system-view # 创建用户组“developers”和“marketing” user-group developers user-group marketing # 创建用户“dev_zhang”并加入“developers”组 local-user dev_zhang class network password cipher Huawei@123 # 使用密文密码 service-type http # 允许用于HTTP/Portal认证 level 3 # 用户等级,根据管理需要设置 user-group developers quit # 创建用户“mkt_li”并加入“marketing”组 local-user mkt_li class network password cipher Huawei@123 service-type http level 3 user-group marketing quit

这里service-type http是关键,它允许该用户通过网页Portal方式进行认证。level是用户权限等级,用于命令分级,与网络访问权限无关。

3.2 配置Portal认证服务器与认证策略

接下来,配置Portal认证,让用户在打开浏览器时跳转到登录页面。

# 配置Portal认证服务器模板,采用本地认证 portal-server local server-type http quit # 配置免认证规则(可选但重要)。让认证页面本身、DNS查询等流量不被拦截,否则用户无法弹出登录页。 free-rule-template name default_free_rule free-rule 0 destination ip 192.168.1.1 mask 255.255.255.255 # 允许访问防火墙自身 free-rule 1 destination ip any udp destination-port 53 # 允许DNS free-rule 2 destination ip any tcp destination-port 80 # 允许HTTP(用于拉取登录页) free-rule 3 destination ip any tcp destination-port 443 # 允许HTTPS quit # 在用户接入的接口(内网口)上启用Portal认证 interface GigabitEthernet 1/0/1 portal free-rule default_free_rule portal local-server enable quit

配置完成后,内网用户首次打开网页,就会被重定向到防火墙提供的登录页面,输入刚才创建的用户名密码即可上网。

3.3 验证认证状态

配置完成后,可以让测试用户登录,然后在防火墙上查看认证状态。

display portal-user all

如果配置正确,你会看到类似下面的输出,显示了在线用户、IP地址、所属用户组等信息。这是后续策略路由能生效的基础。

User Name IP Address MAC Address Status User Group dev_zhang 192.168.1.101 00-11-22-33-44-55 Online developers mkt_li 192.168.1.102 00-11-22-AA-BB-CC Online marketing

4. 策略路由(PBR)的详细配置与原理

用户能识别了,现在我们来配置最核心的策略路由,告诉防火墙不同用户的流量该往哪走。

4.1 创建策略路由节点

策略路由的配置分为几个“节点”,每个节点包含匹配条件和执行动作。我们可以为研发部和市场部分别创建。

# 创建名为“PBR_Developers”的策略路由,优先级设为10(数字越小优先级越高) policy-based-route PBR_Developers enable policy-based-route PBR_Developers node 10 if-match user-group developers # 匹配条件:用户组为“developers” apply next-hop 202.100.1.1 # 执行动作:下一跳指向专线网关 quit quit # 创建名为“PBR_Marketing”的策略路由,优先级设为20 policy-based-route PBR_Marketing enable policy-based-route PBR_Marketing node 10 if-match user-group marketing # 匹配条件:用户组为“marketing” apply output-interface GigabitEthernet 1/0/3 # 执行动作:出接口设为宽带接口 quit quit

这里展示了两种指定出口的方式:apply next-hopapply output-interface。在点对点链路(如PPPoE、专线)上,两者效果一样。但在有多条路径的复杂环境中,指定下一跳更精确。我个人的习惯是,如果出口网关地址固定,优先用next-hop;如果出口是拨号或地址不固定,则用output-interface

4.2 在安全域间应用策略路由

创建好的策略路由需要被调用才能生效。在华为防火墙上,策略路由通常应用在安全区域之间(Interzone)的流向上。

# 假设流量从信任区域(trust)去往非信任区域(untrust)时,需要应用策略路由 policy interzone trust untrust outbound # 进入域间策略视图(trust -> untrust方向) policy-based-route PBR_Developers # 应用研发部的策略路由 policy-based-route PBR_Marketing # 应用市场部的策略路由 quit

这个配置的意思是:所有从trust区域到untrust区域的流量,在出方向(outbound)上,都需要依次去匹配PBR_DevelopersPBR_Marketing这两条策略路由。匹配上了就按策略走,都匹配不上则查找普通路由表。

重要心得:策略路由的匹配是“首次匹配”原则。一旦流量匹配了某个节点,就会执行该节点的动作,并停止继续匹配其他节点。因此,把更精确、范围更小的策略(如访问特定服务器的策略)放在前面(优先级数字更小),把范围更大的策略(如整个用户组的默认出口)放在后面。

5. 安全策略的协同配置与深度调优

策略路由只管“怎么走”,而“让不让走”则由安全策略控制。两者必须协同工作。基于用户的策略路由一个巨大优势就是,安全策略的源也可以设置为“用户”,实现真正的身份化访问控制。

5.1 创建基于用户的安全策略

我们配置两条安全策略,在放行流量的同时,也限定了只有对应部门的用户才能访问外网。

# 创建允许研发组访问外网的安全策略 security-policy rule name Permit_Developers_To_Internet source-user user-group developers # 源:研发用户组 destination-zone untrust action permit quit # 创建允许市场组访问外网的安全策略 rule name Permit_Marketing_To_Internet source-user user-group marketing # 源:市场用户组 destination-zone untrust action permit quit # 切记!默认情况下防火墙拒绝所有流量。如果你有其他默认放行策略,要注意顺序,基于用户的策略通常需要放在更前面。 quit

这样配置后,只有属于developersmarketing组的已认证用户,其访问互联网的流量才会被安全策略放行。其他未认证或不属于这两个组的用户,即使IP地址在内网,流量也会被安全策略拒绝。这就把网络权限和用户身份牢牢绑定了。

5.2 策略路由与安全策略的联动逻辑

这里有一个必须理解的细节:数据包的处理顺序。对于华为防火墙(以USG6000 V500R系列为例),一个会话的首包处理流程大致如下:

  1. 会话建立(首包到达)。
  2. 匹配策略路由(PBR):系统检查是否有应用于该流向的策略路由,并基于源IP地址五元组等信息进行匹配。注意,此时用户身份信息(如果已认证)也是可用的匹配条件之一。如果匹配了基于用户的PBR,则确定出口。
  3. 检测会话状态(ASPF)。
  4. 匹配安全策略:检查安全策略规则。如果安全策略的源条件配置的是“用户/用户组”,则防火墙会查找该会话源IP对应的已认证用户身份。如果匹配则放行。
  5. 执行NAT(地址转换)。
  6. 转发报文。

关键在于第2步和第4步。策略路由先利用用户身份决定了出口,安全策略再基于用户身份决定是否放行。两者都依赖于同一个“IP-用户”绑定表。这确保了策略的一致性:一个被策略路由指定走专线的研发用户,其流量也必然能被匹配developers用户组的安全策略所放行。

5.3 配置验证与会话查看

配置完成后,最有效的验证方法就是看会话表。

display firewall session table verbose

在输出结果中,你需要重点关注以下几列:

  • Source/Dest: 源目的IP和端口。
  • Zone: 流量所属的安全区域及方向(如trust->untrust)。
  • TTL: 会话剩余存活时间。
  • Left: 该会话剩余的字节数。
  • Policy:这一列至关重要!它会显示该会话匹配了哪一条安全策略(如Permit_Developers_To_Internet)。这是验证你的安全策略是否正确生效的直接证据。
  • Route: 这一列会显示PBR或具体的路由表(如RIB)。如果显示PBR,则说明该会话的选路是由策略路由决定的,这是验证策略路由生效的直接证据。

例如,当你看到dev_zhang的某个访问公网的会话,其Policy列是Permit_Developers_To_InternetRoute列是PBR,并且出接口是GigabitEthernet1/0/2,那就说明从认证、到策略路由、再到安全策略,整个链条都完美运行了。

6. 实战排错与常见“坑点”解析

理论配置看起来清晰,但实际部署中总会遇到各种问题。下面我分享几个这次实施中遇到的和常见的坑,以及排查思路。

6.1 坑点一:用户已在线,但策略路由不生效

  • 现象:用户dev_zhang成功Portal认证,能正常上网,但流量没有走预设的专线(GE1/0/2),而是走了默认路由的宽带(GE1/0/3)。查看会话表,Route列显示为RIB(路由表),而非PBR
  • 排查思路
    1. 检查策略路由匹配条件:确认policy-based-route PBR_Developers node 10下的if-match语句是否正确写为user-group developers,并且没有笔误。
    2. 检查策略路由应用位置:执行display current-configuration | include “policy interzone”display current-configuration | include “policy-based-route (PBR_Developers|PBR_Marketing)”,确认策略路由确实被应用在了正确的域间(interzone trust untrust outbound)和正确的方向上。一个常见错误是应用在了inbound方向。
    3. 检查用户组归属:执行display portal-user alldisplay access-user online,确认在线用户dev_zhangUser Group字段确实是developers。有时在用户创建时,user-group命令没有成功执行。
    4. 检查策略路由优先级与匹配顺序:如果配置了多条策略路由,用display policy-based-route [policy-name]查看节点顺序。确保没有更高优先级(节点号更小)的、匹配范围更广的策略(例如一条匹配所有源IP的策略)在之前被匹配了。
  • 我的踩坑记录:有一次,我把策略路由应用在了interzone trust local outbound(访问防火墙本身)的方向上,而不是访问互联网的trust untrust,导致对互联网的流量根本不会去匹配策略路由。这个错误很隐蔽,因为访问防火墙管理页面的流量是正常的,但上网流量不对。

6.2 坑点二:流量匹配了PBR,但安全策略拒绝导致不通

  • 现象:用户流量按策略路由走了指定接口(会话表Route显示PBR),但连接无法建立,网页打不开。查看会话表,该会话可能很快消失,或者根本不存在。
  • 排查思路
    1. 检查安全策略规则:执行display security-policy rule all,仔细检查Permit_Developers_To_Internet等规则的配置。重点确认:
      • source-usersource-address是否正确。
      • destination-zone是否为untrust(或更精确的目的地址/区域)。
      • action是否为permit
      • 规则是否处于enable状态。
    2. 检查安全策略顺序:安全策略是按配置顺序从上到下匹配的。如果在这条允许规则前面,有一条拒绝所有(或拒绝该用户/IP)的规则,那么流量就会被提前拒绝。使用display security-policy rule all查看规则ID,确认你的允许规则排在拒绝规则之前。可以临时在规则最前面插入一条permit规则进行测试。
    3. 开启日志功能:在安全策略规则后面加上logging参数,然后在防火墙上执行display logbuffer或通过Web界面查看实时日志,看是否有该条流量的拒绝日志,并查看拒绝原因。
      rule name Permit_Developers_To_Internet ... action permit logging # 启用日志记录
  • 我的踩坑记录:早期配置时,我习惯先配一条rule name deny_all放在最后作为兜底。但在配置基于用户的策略时,我把允许规则加在了这条deny_all规则之后,结果就是所有流量都被最后的deny_all拒绝了。切记:基于用户的精细规则必须放在通用的、范围大的拒绝规则之前。

6.3 坑点三:NAT配置冲突导致选路异常

策略路由决定了出口,但出接口的NAT(网络地址转换)配置也必须正确。

  • 现象:策略路由生效,会话显示走GE1/0/2,但实际不通。抓包发现从GE1/0/2出去的包源IP没有转换,或者转换成了错误的公网IP。
  • 排查思路
    1. 检查NAT策略:策略路由不负责NAT。你需要为每个出口单独配置NAT策略。确保有类似如下配置,并且匹配从trustuntrust,且出接口为GE1/0/2的流量。
      nat-policy rule name NAT_For_Line1 source-zone trust destination-zone untrust out-interface GigabitEthernet 1/0/2 action source-nat easy-ip GigabitEthernet 1/0/2 # 使用接口地址做NAT quit
    2. 检查NAT地址池:如果不使用easy-ip,而是使用地址池,确保地址池里的IP地址与出口接口GE1/0/2的IP在同一网段,并且路由可达。
    3. 注意NAT策略顺序:和安全策略一样,NAT策略也是顺序匹配。确保匹配专线出口的NAT规则,没有被前面一条匹配所有出口的NAT规则覆盖。
  • 我的踩坑记录:曾经有一条默认的NAT策略rule name nat_outbound,匹配所有trust->untrust的流量并做easy-ip。当我新增了专线接口GE1/0/2后,没有为它配置独立的NAT规则。结果就是,即使策略路由把流量引到了GE1/0/2,但匹配的NAT规则仍然是那条默认的,它执行easy-ip时使用了默认路由的出接口(GE1/0/3)的IP,导致从专线出去的包源IP是宽带IP,对端无法回包。教训:NAT策略必须与策略路由出口严格对应。

7. 高级应用与扩展思考

基础配置跑通后,可以基于这个框架做很多扩展,让网络管理更加智能。

7.1 基于应用与用户的组合策略

策略路由的if-match条件非常强大,除了用户,还可以匹配应用服务。例如,你可以实现:“所有用户访问‘视频流媒体’类应用时,都走宽带出口;但研发用户访问‘代码管理’(如Git)应用时,走专线出口。”

policy-based-route PBR_Developer_Git node 5 if-match user-group developers if-match application app-git # 假设已定义名为‘app-git’的应用 apply next-hop 202.100.1.1 quit

这需要对防火墙的应用识别特征库有较好的了解,并正确定义应用。这实现了更细粒度的、基于业务内容的流量调度。

7.2 与外部认证服务器(如AD域)对接

对于已有Active Directory域环境的企业,将防火墙与AD域集成是更佳选择。这样员工可以直接使用域账号密码进行网络认证,无需在防火墙上单独维护一套账号。

  1. 在防火墙配置aaa认证方案,服务器类型选择RADIUSLDAP
  2. 配置认证服务器地址、共享密钥、端口等。
  3. portal-server配置中,引用该认证方案。
  4. 防火墙会从AD服务器获取用户信息,并可以通过属性映射(如将AD的“部门”属性映射为防火墙的“用户组”),自动将用户划分到对应的组(如developers)。后续的策略路由和安全策略配置保持不变。

这种方式实现了账号体系的统一,减少了管理开销。但初次对接时,服务器配置、属性映射和证书问题可能需要一些时间调试。

7.3 故障切换与负载均衡考虑

当前的配置是静态绑定:研发走专线,市场走宽带。如果专线故障怎么办?可以在策略路由中配置多个apply动作来实现主备。

policy-based-route PBR_Developers node 10 if-match user-group developers apply next-hop 202.100.1.1 apply next-hop 101.200.2.1 quit

这样配置后,当首选下一跳202.100.1.1不可达时,流量会自动切换到备用下一跳101.200.2.1。但这是一种故障切换,不是负载均衡。华为防火墙也支持基于链路质量(如带宽比例)的负载均衡,但配置更为复杂,需要结合链路健康检查和路由策略来实现。

经过这一整套从规划、配置到排错的流程下来,华为防火墙基于用户的策略路由功能给我的感觉是既强大又严谨。它成功地将网络路径从冰冷的IP地址解放出来,赋予了“身份”这个维度,让网络策略真正做到了以人为本。对于任何需要区分员工上网行为、优化多出口链路利用率的场景,这都是一项值得投入精力去部署的功能。最关键的是,理解其数据包处理流程(认证→PBR→安全策略→NAT)和掌握通过会话表(display firewall session table verbose)进行排查的方法,能让你在遇到问题时快速定位,而不是盲目尝试。