1. 策略路由到底解决的是什么问题很多人第一次接触策略路由,是在一个很具体的场景里:公司有两条出口链路,一条贵但快,一条便宜但慢,老板要求"财务系统走快的,其他走便宜的"。这时候如果你只会配静态路由或者OSPF,会发现根本做不到——因为传统路由协议只看目的地址,谁先算出路由谁说了算,你没法按"谁发的包"或者"什么类型的包"来决定走哪条路。策略路由(Policy-Based Routing,PBR)就是干这个的。它的核心思想一句话就能说清楚:路由决策不再只看目的IP,而是可以基于源IP、协议类型、端口号、报文长度、甚至时间段来选路。你可以把它理解成"路由界的VIP通道"——普通流量排队走默认路径,特定流量凭"身份"走专属通道。在eNSP这个华为网络模拟器里做策略路由实验,最大的好处是你不用真买设备就能把整套逻辑跑通。但坑也在这里:模拟器毕竟不是真机,有些行为跟实际设备有细微差异,如果不注意,实验做通了到真机上照样翻车。我下面会把这些差异点都标出来。先明确一下这篇文章适合谁看:如果你已经会配静态路由和OSPF,但对策略路由的概念还比较模糊,或者做过实验但没搞明白"为什么包没按我想的走",那这篇就是写给你的。如果你完全没碰过eNSP,建议先把基础拓扑搭建和接口配置过一遍再来看。策略路由在eNSP里主要涉及三个工具:Traffic-Filter(流分类)、Traffic-Behavior(流行为)、Traffic-Policy(流策略)。这三个东西的关系是:流分类负责"抓谁",流行为负责"抓到之后干什么",流策略负责"把前两者绑在一起应用到某个接口上"。这个"分类-行为-策略"的三段式结构是华为设备做策略路由的标准范式,记不住这个框架,后面配命令就是瞎配。还有一个容易混淆的点:策略路由和路由策略(Route-Policy)是两码事。路由策略是控制路由信息怎么传播和选优的,影响的是路由表;策略路由是控制数据包怎么转发,影响的是转发表。名字很像,作用层次完全不同。我在实验课上见过不止一个同学把这两个搞混,配了半天Route-Policy发现数据包根本不按预期走,原因就是搞错了对象。2. 实验拓扑设计与地址规划的实际考量2.1 为什么我建议用这个四路由器拓扑做策略路由实验,拓扑不能太简单也不能太复杂。太简单了体现不出策略路由的价值——比如只有一条路,你策略个啥?太复杂了排查困难,一个包没走对,你都不知道是哪台设备的问题。我推荐的拓扑是这样的:两台PC分别代表不同部门的终端,一台接入交换机(eNSP里用S5700就行),一台核心路由器R1作为策略执行点,R1上联两台出口路由器R2和R3,R2和R3各自连一个"外网"路由器R4来模拟互联网。PC1代表财务部门(网段192.168.10.0/24),PC2代表普通部门(网段192.168.20.0/24)。R1到R2的链路代表"快速链路",R1到R3的链路代表"备用链路"。这个拓扑的好处是:R1是唯一的策略执行点,你只需要在一台设备上配置策略,排查范围可控。同时两条路径完全分离,你能清楚地看到流量到底走了哪边。R4的作用是让两条路径都有"目的地",否则你ping不通外网地址,没法验证。地址规划我习惯这样分:互联链路用10.0.x.x/30的网段,x从0开始递增。比如R1-R2用10.0.0.0/30,R1的接口是10.0.0.1,R2的接口是10.0.0.2。R1-R3用10.0.0.4/30,R1是10.0.0.5,R3是10.0.0.6。R2-R4用10.0.0.8/30,R3-R4用10.0.0.12/30。R4上配一个Loopback0地址4.4.4.4/32来模拟外网目标。注意:eNSP里配/30掩码的时候,接口地址要写全,比如ip address 10.0.0.1 30,不要写成ip address 10.0.0.1 255.255.255.252,虽然效果一样,但前者更符合华为设备的习惯写法。2.2 基础路由打通是策略路由的前提这一步很多人会跳过,直接去配策略路由,结果发现策略配了但流量还是不通。原因很简单:策略路由只是"选路",它不负责"让路通"。你得先把基础路由打通,确保每条路径单独拿出来都是通的,然后再用策略去控制"走哪条"。具体操作:R1上配两条静态路由,分别指向R2和R3作为下一跳,目的网段是4.4.4.0/24。R2和R3上各配一条默认路由指向R4。R4上配两条回程路由,分别指向R2和R3,目的网段是192.168.10.0/24和192.168.20.0/24。这样整个网络全互通。验证方法:在R1上用ping -a 192.168.10.1 4.4.4.4和ping -a 192.168.20.1 4.4.4.4分别测试,确保两个网段都能通。如果这时候不通,先别急着配策略路由,先把基础路由排查清楚。排查命令用display ip routing-table看路由表里有没有4.4.4.4的路由,用display ip interface brief看接口状态是不是Up。我见过一个典型问题:有人在R1上配了ip route-static 4.4.4.0 24 10.0.0.2和ip route-static 4.4.4.0 24 10.0.0.6两条等价路由,然后发现流量只走其中一条。这是因为华为设备默认开启等价路由负载分担,但如果你只想要一条主用一条备用,需要配preference或者用策略路由来强制指定。这个细节后面会展开讲。2.3 在eNSP里搭拓扑的三个实操细节第一个细节:eNSP的Cloud设备有时候会抽风,如果你需要连真实网络或者抓包,建议用Cloud绑定本地回环网卡,但做纯路由实验不需要Cloud,直接路由器互联就行。第二个细节:接口编号在eNSP里是固定的,比如AR2220路由器默认有GE0/0/0到GE0/0/2三个接口,你加扩展卡才能有更多接口。如果你拓扑里需要四个接口,记得在路由器上右键添加扩展卡,否则接口不够用。第三个细节:启动设备的时候不要一次性全启动,尤其是电脑配置一般的情况下。先启动R1和R2,等它们完全起来再启动R3和R4。全部启动后等一两分钟再开始配置,否则可能出现接口状态没刷新导致配置不生效的情况。3. 策略路由的核心配置逻辑拆解3.1 流分类:怎么精准地"抓"到你想要的流量流分类(Traffic Classifier)是整个策略路由的第一步,也是最关键的一步。你抓错了流量,后面配得再对也没用。华为设备上用acl或者traffic classifier来定义流分类,我习惯用ACL先定义感兴趣流,然后在traffic classifier里引用ACL。比如要抓财务部门(192.168.10.0/24)去往外网(4.4.4.0/24)的流量,ACL这样写:acl number 3000 rule 5 permit ip source 192.168.10.0 0.0.0.255 destination 4.4.4.0 0.0.0.255这里有个细节:ACL编号3000-3999是高级ACL,可以匹配源IP、目的IP、协议类型、端口号等。如果你只需要匹配源IP,用基本ACL(2000-2999)也行,但高级ACL更灵活,建议养成用高级ACL的习惯。然后定义流分类:traffic classifier caiwu operator or if-match acl 3000operator or表示匹配ACL 3000里的任意一条规则就命中。如果你有多条规则想用and逻辑,改成operator and,但实际场景里or更常用。实操心得:ACL规则里的rule 5这个编号不是随便写的,华为设备默认步长是5,意味着你可以在rule 5和rule 10之间插入新规则。如果你写rule 1,后面想插规则就得重新编号。我习惯从5开始,留出插入空间。还有一个容易踩的坑:ACL匹配的是"源地址到目的地址"的流量,但策略路由通常只关心源地址(因为目的地址是外网,你没法预知用户访问哪个外网IP)。所以更常见的写法是只匹配源IP:acl number 3000 rule 5 permit ip source 192.168.10.0 0.0.0.255这样所有从财务网段发出的流量都会被命中,然后你在流行为里指定下一跳,就实现了"财务流量走快速链路"。3.2 流行为:指定下一跳的三种方式及适用场景流行为(Traffic Behavior)定义的是"抓到流量之后怎么处理"。策略路由场景下,最常用的动作是redirect ip-nexthop,也就是强制指定下一跳。但具体怎么写,有三种方式,适用场景不同。第一种:直接指定下一跳IP。traffic behavior caiwu-behavior redirect ip-nexthop 10.0.0.2这是最简单的写法,意思是"命中流分类的包,下一跳改成10.0.0.2"。优点是配置简单,缺点是如果10.0.0.2不可达,流量就断了,没有备份。第二种:指定出接口。traffic behavior caiwu-behavior redirect interface GigabitEthernet0/0/0这种写法在点到点链路上没问题,但在以太网链路上不推荐,因为以太网是多路访问的,你指定出接口但不知道下一跳是谁,设备还得查ARP,效率低且容易出问题。第三种:指定下一跳+备份下一跳。traffic behavior caiwu-behavior redirect ip-nexthop 10.0.0.2 secondary 10.0.0.6这种写法最实用:主下一跳是10.0.0.2(快速链路),如果它挂了,自动切到10.0.0.6(备用链路)。但要注意,eNSP对secondary的支持有时候不太稳定,真机上没问题,模拟器上可能需要多测试几次。注意:redirect ip-nexthop和redirect interface不能同时配在同一个流行为里,会冲突。你只能选一种。另外还有一个动作叫permit,意思是"命中流分类的包正常转发,不做特殊处理"。这个动作通常用在你想让某些流量走默认路由,但又不想让它们被其他策略影响的时候。比如你配了一条"财务走快速链路"的策略,又配了一条"其他流量permit"的策略,后者要放在前面还是后面,取决于你的匹配逻辑。3.3 流策略:把分类和行为绑在一起并应用到接口流策略(Traffic Policy)是最后一步,把流分类和流行为关联起来:traffic policy pbr-policy classifier caiwu behavior caiwu-behavior然后在接口上应用:interface GigabitEthernet0/0/1 traffic-policy pbr-policy inbound这里的方向很关键:inbound表示对进入接口的流量生效,outbound表示对从接口发出的流量生效。策略路由通常配在入接口上,因为你要在流量进入设备的第一时间就决定它走哪条路。如果你配在出接口上,流量已经经过路由表查过一次了,再改下一跳逻辑上很别扭。但这里有个例外:如果你想让策略路由影响设备自己产生的流量(比如设备自己ping出去的包),你需要配traffic-policy pbr-policy outbound在出接口上,或者用local-policy。这个细节很多人不知道,导致实验里"PC的流量走了策略路由,但路由器自己ping不走",然后怀疑是模拟器bug。还有一个坑:一个接口的同一个方向只能应用一个流策略。如果你已经应用了一个,再应用另一个会覆盖掉前一个。所以如果你有多条策略要应用在同一个接口的同一个方向,需要把它们合并到一个流策略里,用多个classifier-behavior对来实现。4. 验证与排错:怎么确认流量真的走了你指定的路4.1 用tracert和display命令做第一轮验证配完策略路由,第一件事是在PC上做tracert。比如在PC1(财务)上tracert 4.4.4.4,如果第一跳是10.0.0.2(R2),说明策略生效了;如果第一跳是10.0.0.6(R3),说明策略没生效或者被其他路由覆盖了。但tracert有个问题:它依赖ICMP超时报文,如果中间设备禁了ICMP或者策略路由影响了ICMP的处理,tracert结果可能不准。所以更可靠的方法是在R1上看:display traffic-policy applied-record这个命令会显示所有已应用的流策略及其统计信息。你可以看到每个classifier匹配了多少包,如果匹配数为0,说明ACL没抓对流量。还有一个命令:display acl 3000看ACL的匹配计数。如果计数为0,说明没有流量命中这条ACL,问题出在流分类之前——可能是接口没配策略,或者流量根本没到R1。4.2 策略路由不生效的五个常见原因我总结了一下,策略路由配了不生效,90%的情况是下面五个原因之一:原因一:ACL写错了。最常见的是源地址掩码写反了,比如192.168.10.0 0.0.0.255写成了192.168.10.0 255.255.255.0。华为ACL用的是通配符掩码(反掩码),0表示匹配,1表示忽略。这个跟思科一样,但跟日常习惯相反,容易搞混。原因二:策略应用的方向错了。配在outbound上但流量是从另一个接口进来的,或者配在了错误的接口上。检查方法:display current-configuration interface GigabitEthernet0/0/1看接口下有没有traffic-policy配置。原因三:路由表里有更优的路由。策略路由的优先级高于路由表,但前提是策略路由真的命中了。如果ACL没命中,流量还是走路由表。所以你要确保ACL能抓到流量。原因四:下一跳不可达。你指定的下一跳IP,设备在路由表里查不到或者ARP解析不了。检查方法:display ip routing-table 10.0.0.2看有没有这条路由,display arp | include 10.0.0.2看ARP有没有解析。原因五:eNSP的bug。说实话,eNSP在策略路由这块确实有一些已知问题,比如有时候策略应用了但统计不刷新,或者secondary下一跳不生效。遇到这种情况,我的经验是:保存配置,重启设备,重新应用策略。如果还不行,换个路由器型号试试,AR2220和AR2240的行为有时候不一样。4.3 用抓包做终极验证如果上面的方法都确认了但你还是不放心,那就抓包。eNSP支持在接口上抓包,右键接口选择"开始抓包",然后用Wireshark打开。抓包的位置很关键:你要在R1的入接口抓,确认流量进来了;在R1的两个出接口分别抓,确认流量从哪个接口出去了。如果入接口有包但出接口没包,说明策略路由把包丢了(可能是下一跳不可达);如果两个出接口都有包,说明策略路由没生效,流量走了默认路由或者负载分担。抓包的时候注意过滤:ip.src == 192.168.10.1 && ip.dst == 4.4.4.4,这样只看财务PC去外网的流量,避免被其他流量干扰。实操心得:eNSP的抓包有时候会丢包,尤其是流量比较大的时候。如果你发现抓包结果和display命令的统计对不上,以display命令为准。抓包只用来做定性分析,不用来做精确计数。5. 进阶玩法:策略路由与其他技术的联动5.1 策略路由+NQA实现链路自动切换基础版的策略路由是"死"的——你指定了下一跳,它就永远走那条路,哪怕那条路断了。要实现自动切换,需要配合NQA(Network Quality Analysis)来做链路检测。配置逻辑是这样的:先配一个NQA测试例,定期ping目标地址;然后配一个Track项关联NQA;最后在流行为里用redirect ip-nexthop 10.0.0.2 track 1,当Track状态为Down时,策略路由自动失效,流量回退到路由表。nqa test-instance admin test1 test-type icmp destination-address ipv4 10.0.0.2 frequency 5 probe-count 2 start now track 1 nqa admin test1然后在流行为里引用:traffic behavior caiwu-behavior redirect ip-nexthop 10.0.0.2 track 1这样当10.0.0.2不可达时,Track 1变为Down,策略路由失效,流量走路由表里的备用路径。这个方案比secondary下一跳更可靠,因为NQA是主动检测,而secondary只是被动等待主下一跳失效。但要注意:NQA会定期发探测包,增加一点网络开销。frequency设成5秒比较合适,太频繁浪费带宽,太慢切换不及时。5.2 策略路由与VRRP的配合如果你的网络里有VRRP(虚拟路由器冗余协议),策略路由的配置位置需要特别注意。VRRP的虚拟IP是浮动在Master设备上的,如果你在Master上配了策略路由,切换后策略路由不会自动跟着走。解决方案有两种:一是在两台设备上都配相同的策略路由,这样无论谁是Master,策略都生效;二是用VRRP的Track功能,当设备降级为Backup时自动撤销策略路由。第一种方案简单但浪费资源,第二种方案优雅但配置复杂。我个人的建议是:如果策略路由的下一跳是固定的(比如都指向同一个出口路由器),用第一种方案;如果下一跳跟VRRP状态相关,用第二种方案。5.3 策略路由在eNSP里的性能边界最后说一下eNSP的性能问题。eNSP是模拟器,不是真机,它的转发性能有限。如果你在实验里配了大量的ACL规则和策略路由,可能会发现转发延迟明显增加,甚至丢包。我的经验是:eNSP里做策略路由实验,ACL规则不要超过20条,流策略不要超过5个。如果确实需要更多规则,建议分多个流策略,应用在不同接口上,而不是堆在一个策略里。另外,eNSP对redirect ip-nexthop的处理有时候会有延迟,你配完策略后ping一下可能不通,等几秒钟再ping就通了。这不是配置问题,是模拟器的处理延迟。遇到这种情况不要急着改配置,先等一等。还有一个真机上有但eNSP里没有的功能:策略路由的statistics统计。真机上你可以用display traffic policy statistics看每个策略的详细统计,eNSP里这个命令的输出可能不全。所以做实验的时候,多用display acl和display traffic-policy applied-record来交叉验证。6. 我在这个实验里踩过的三个坑第一个坑:ACL匹配了但策略不生效。排查了半天发现是ACL的rule编号写成了rule 1,然后我在它前面又加了一条rule 0,结果rule 0的优先级更高,把流量全匹配走了。华为ACL是按编号从小到大匹配的,编号越小优先级越高。所以如果你要插入规则,要么留足步长,要么用rule命令重新编号。第二个坑:策略路由配在了错误的接口上。我把策略配在了R1连接R2的接口上,方向是outbound,结果发现只有去R2的流量走策略,去R3的流量不受影响。后来才想明白:策略路由应该配在流量的入接口上,而不是出接口。入接口是GE0/0/1(连接PC的接口),出接口是GE0/0/0和GE0/0/2(连接R2和R3的接口)。配在入接口上,所有从PC进来的流量都会经过策略处理。第三个坑:eNSP重启后策略路由失效。这个坑最坑,我配好策略路由,验证通过,保存配置,重启eNSP,再打开发现策略路由没了。后来发现是eNSP的配置保存机制问题:如果你在设备启动过程中保存配置,可能保存不完整。正确的做法是等设备完全启动后,再save,然后display saved-configuration确认配置真的写进去了。这三个坑我在不同的实验里反复踩过,每次都是排查半天才找到原因。写出来是希望你能跳过这些坑,把时间花在理解策略路由的逻辑上,而不是跟模拟器较劲。策略路由这个技术,说到底就是"按需选路"四个字。你理解了"谁发的包、去哪个方向、走哪条路"这个三段式逻辑,剩下的就是命令的熟练度问题。eNSP是个很好的练习工具,但别把它当真理,真机上的行为可能跟模拟器有差异。多做实验,多抓包,多对比,慢慢就有感觉了。
1. 策略路由到底解决的是什么问题很多人第一次接触策略路由,是在一个很具体的场景里:公司有两条出口链路,一条贵但快,一条便宜但慢,老板要求"财务系统走快的,其他走便宜的"。这时候如果你只会配静态路由或者OSPF,会发现根本做不到——因为传统路由协议只看目的地址,谁先算出路由谁说了算,你没法按"谁发的包"或者"什么类型的包"来决定走哪条路。策略路由(Policy-Based Routing,PBR)就是干这个的。它的核心思想一句话就能说清楚:路由决策不再只看目的IP,而是可以基于源IP、协议类型、端口号、报文长度、甚至时间段来选路。你可以把它理解成"路由界的VIP通道"——普通流量排队走默认路径,特定流量凭"身份"走专属通道。在eNSP这个华为网络模拟器里做策略路由实验,最大的好处是你不用真买设备就能把整套逻辑跑通。但坑也在这里:模拟器毕竟不是真机,有些行为跟实际设备有细微差异,如果不注意,实验做通了到真机上照样翻车。我下面会把这些差异点都标出来。先明确一下这篇文章适合谁看:如果你已经会配静态路由和OSPF,但对策略路由的概念还比较模糊,或者做过实验但没搞明白"为什么包没按我想的走",那这篇就是写给你的。如果你完全没碰过eNSP,建议先把基础拓扑搭建和接口配置过一遍再来看。策略路由在eNSP里主要涉及三个工具:Traffic-Filter(流分类)、Traffic-Behavior(流行为)、Traffic-Policy(流策略)。这三个东西的关系是:流分类负责"抓谁",流行为负责"抓到之后干什么",流策略负责"把前两者绑在一起应用到某个接口上"。这个"分类-行为-策略"的三段式结构是华为设备做策略路由的标准范式,记不住这个框架,后面配命令就是瞎配。还有一个容易混淆的点:策略路由和路由策略(Route-Policy)是两码事。路由策略是控制路由信息怎么传播和选优的,影响的是路由表;策略路由是控制数据包怎么转发,影响的是转发表。名字很像,作用层次完全不同。我在实验课上见过不止一个同学把这两个搞混,配了半天Route-Policy发现数据包根本不按预期走,原因就是搞错了对象。2. 实验拓扑设计与地址规划的实际考量2.1 为什么我建议用这个四路由器拓扑做策略路由实验,拓扑不能太简单也不能太复杂。太简单了体现不出策略路由的价值——比如只有一条路,你策略个啥?太复杂了排查困难,一个包没走对,你都不知道是哪台设备的问题。我推荐的拓扑是这样的:两台PC分别代表不同部门的终端,一台接入交换机(eNSP里用S5700就行),一台核心路由器R1作为策略执行点,R1上联两台出口路由器R2和R3,R2和R3各自连一个"外网"路由器R4来模拟互联网。PC1代表财务部门(网段192.168.10.0/24),PC2代表普通部门(网段192.168.20.0/24)。R1到R2的链路代表"快速链路",R1到R3的链路代表"备用链路"。这个拓扑的好处是:R1是唯一的策略执行点,你只需要在一台设备上配置策略,排查范围可控。同时两条路径完全分离,你能清楚地看到流量到底走了哪边。R4的作用是让两条路径都有"目的地",否则你ping不通外网地址,没法验证。地址规划我习惯这样分:互联链路用10.0.x.x/30的网段,x从0开始递增。比如R1-R2用10.0.0.0/30,R1的接口是10.0.0.1,R2的接口是10.0.0.2。R1-R3用10.0.0.4/30,R1是10.0.0.5,R3是10.0.0.6。R2-R4用10.0.0.8/30,R3-R4用10.0.0.12/30。R4上配一个Loopback0地址4.4.4.4/32来模拟外网目标。注意:eNSP里配/30掩码的时候,接口地址要写全,比如ip address 10.0.0.1 30,不要写成ip address 10.0.0.1 255.255.255.252,虽然效果一样,但前者更符合华为设备的习惯写法。2.2 基础路由打通是策略路由的前提这一步很多人会跳过,直接去配策略路由,结果发现策略配了但流量还是不通。原因很简单:策略路由只是"选路",它不负责"让路通"。你得先把基础路由打通,确保每条路径单独拿出来都是通的,然后再用策略去控制"走哪条"。具体操作:R1上配两条静态路由,分别指向R2和R3作为下一跳,目的网段是4.4.4.0/24。R2和R3上各配一条默认路由指向R4。R4上配两条回程路由,分别指向R2和R3,目的网段是192.168.10.0/24和192.168.20.0/24。这样整个网络全互通。验证方法:在R1上用ping -a 192.168.10.1 4.4.4.4和ping -a 192.168.20.1 4.4.4.4分别测试,确保两个网段都能通。如果这时候不通,先别急着配策略路由,先把基础路由排查清楚。排查命令用display ip routing-table看路由表里有没有4.4.4.4的路由,用display ip interface brief看接口状态是不是Up。我见过一个典型问题:有人在R1上配了ip route-static 4.4.4.0 24 10.0.0.2和ip route-static 4.4.4.0 24 10.0.0.6两条等价路由,然后发现流量只走其中一条。这是因为华为设备默认开启等价路由负载分担,但如果你只想要一条主用一条备用,需要配preference或者用策略路由来强制指定。这个细节后面会展开讲。2.3 在eNSP里搭拓扑的三个实操细节第一个细节:eNSP的Cloud设备有时候会抽风,如果你需要连真实网络或者抓包,建议用Cloud绑定本地回环网卡,但做纯路由实验不需要Cloud,直接路由器互联就行。第二个细节:接口编号在eNSP里是固定的,比如AR2220路由器默认有GE0/0/0到GE0/0/2三个接口,你加扩展卡才能有更多接口。如果你拓扑里需要四个接口,记得在路由器上右键添加扩展卡,否则接口不够用。第三个细节:启动设备的时候不要一次性全启动,尤其是电脑配置一般的情况下。先启动R1和R2,等它们完全起来再启动R3和R4。全部启动后等一两分钟再开始配置,否则可能出现接口状态没刷新导致配置不生效的情况。3. 策略路由的核心配置逻辑拆解3.1 流分类:怎么精准地"抓"到你想要的流量流分类(Traffic Classifier)是整个策略路由的第一步,也是最关键的一步。你抓错了流量,后面配得再对也没用。华为设备上用acl或者traffic classifier来定义流分类,我习惯用ACL先定义感兴趣流,然后在traffic classifier里引用ACL。比如要抓财务部门(192.168.10.0/24)去往外网(4.4.4.0/24)的流量,ACL这样写:acl number 3000 rule 5 permit ip source 192.168.10.0 0.0.0.255 destination 4.4.4.0 0.0.0.255这里有个细节:ACL编号3000-3999是高级ACL,可以匹配源IP、目的IP、协议类型、端口号等。如果你只需要匹配源IP,用基本ACL(2000-2999)也行,但高级ACL更灵活,建议养成用高级ACL的习惯。然后定义流分类:traffic classifier caiwu operator or if-match acl 3000operator or表示匹配ACL 3000里的任意一条规则就命中。如果你有多条规则想用and逻辑,改成operator and,但实际场景里or更常用。实操心得:ACL规则里的rule 5这个编号不是随便写的,华为设备默认步长是5,意味着你可以在rule 5和rule 10之间插入新规则。如果你写rule 1,后面想插规则就得重新编号。我习惯从5开始,留出插入空间。还有一个容易踩的坑:ACL匹配的是"源地址到目的地址"的流量,但策略路由通常只关心源地址(因为目的地址是外网,你没法预知用户访问哪个外网IP)。所以更常见的写法是只匹配源IP:acl number 3000 rule 5 permit ip source 192.168.10.0 0.0.0.255这样所有从财务网段发出的流量都会被命中,然后你在流行为里指定下一跳,就实现了"财务流量走快速链路"。3.2 流行为:指定下一跳的三种方式及适用场景流行为(Traffic Behavior)定义的是"抓到流量之后怎么处理"。策略路由场景下,最常用的动作是redirect ip-nexthop,也就是强制指定下一跳。但具体怎么写,有三种方式,适用场景不同。第一种:直接指定下一跳IP。traffic behavior caiwu-behavior redirect ip-nexthop 10.0.0.2这是最简单的写法,意思是"命中流分类的包,下一跳改成10.0.0.2"。优点是配置简单,缺点是如果10.0.0.2不可达,流量就断了,没有备份。第二种:指定出接口。traffic behavior caiwu-behavior redirect interface GigabitEthernet0/0/0这种写法在点到点链路上没问题,但在以太网链路上不推荐,因为以太网是多路访问的,你指定出接口但不知道下一跳是谁,设备还得查ARP,效率低且容易出问题。第三种:指定下一跳+备份下一跳。traffic behavior caiwu-behavior redirect ip-nexthop 10.0.0.2 secondary 10.0.0.6这种写法最实用:主下一跳是10.0.0.2(快速链路),如果它挂了,自动切到10.0.0.6(备用链路)。但要注意,eNSP对secondary的支持有时候不太稳定,真机上没问题,模拟器上可能需要多测试几次。注意:redirect ip-nexthop和redirect interface不能同时配在同一个流行为里,会冲突。你只能选一种。另外还有一个动作叫permit,意思是"命中流分类的包正常转发,不做特殊处理"。这个动作通常用在你想让某些流量走默认路由,但又不想让它们被其他策略影响的时候。比如你配了一条"财务走快速链路"的策略,又配了一条"其他流量permit"的策略,后者要放在前面还是后面,取决于你的匹配逻辑。3.3 流策略:把分类和行为绑在一起并应用到接口流策略(Traffic Policy)是最后一步,把流分类和流行为关联起来:traffic policy pbr-policy classifier caiwu behavior caiwu-behavior然后在接口上应用:interface GigabitEthernet0/0/1 traffic-policy pbr-policy inbound这里的方向很关键:inbound表示对进入接口的流量生效,outbound表示对从接口发出的流量生效。策略路由通常配在入接口上,因为你要在流量进入设备的第一时间就决定它走哪条路。如果你配在出接口上,流量已经经过路由表查过一次了,再改下一跳逻辑上很别扭。但这里有个例外:如果你想让策略路由影响设备自己产生的流量(比如设备自己ping出去的包),你需要配traffic-policy pbr-policy outbound在出接口上,或者用local-policy。这个细节很多人不知道,导致实验里"PC的流量走了策略路由,但路由器自己ping不走",然后怀疑是模拟器bug。还有一个坑:一个接口的同一个方向只能应用一个流策略。如果你已经应用了一个,再应用另一个会覆盖掉前一个。所以如果你有多条策略要应用在同一个接口的同一个方向,需要把它们合并到一个流策略里,用多个classifier-behavior对来实现。4. 验证与排错:怎么确认流量真的走了你指定的路4.1 用tracert和display命令做第一轮验证配完策略路由,第一件事是在PC上做tracert。比如在PC1(财务)上tracert 4.4.4.4,如果第一跳是10.0.0.2(R2),说明策略生效了;如果第一跳是10.0.0.6(R3),说明策略没生效或者被其他路由覆盖了。但tracert有个问题:它依赖ICMP超时报文,如果中间设备禁了ICMP或者策略路由影响了ICMP的处理,tracert结果可能不准。所以更可靠的方法是在R1上看:display traffic-policy applied-record这个命令会显示所有已应用的流策略及其统计信息。你可以看到每个classifier匹配了多少包,如果匹配数为0,说明ACL没抓对流量。还有一个命令:display acl 3000看ACL的匹配计数。如果计数为0,说明没有流量命中这条ACL,问题出在流分类之前——可能是接口没配策略,或者流量根本没到R1。4.2 策略路由不生效的五个常见原因我总结了一下,策略路由配了不生效,90%的情况是下面五个原因之一:原因一:ACL写错了。最常见的是源地址掩码写反了,比如192.168.10.0 0.0.0.255写成了192.168.10.0 255.255.255.0。华为ACL用的是通配符掩码(反掩码),0表示匹配,1表示忽略。这个跟思科一样,但跟日常习惯相反,容易搞混。原因二:策略应用的方向错了。配在outbound上但流量是从另一个接口进来的,或者配在了错误的接口上。检查方法:display current-configuration interface GigabitEthernet0/0/1看接口下有没有traffic-policy配置。原因三:路由表里有更优的路由。策略路由的优先级高于路由表,但前提是策略路由真的命中了。如果ACL没命中,流量还是走路由表。所以你要确保ACL能抓到流量。原因四:下一跳不可达。你指定的下一跳IP,设备在路由表里查不到或者ARP解析不了。检查方法:display ip routing-table 10.0.0.2看有没有这条路由,display arp | include 10.0.0.2看ARP有没有解析。原因五:eNSP的bug。说实话,eNSP在策略路由这块确实有一些已知问题,比如有时候策略应用了但统计不刷新,或者secondary下一跳不生效。遇到这种情况,我的经验是:保存配置,重启设备,重新应用策略。如果还不行,换个路由器型号试试,AR2220和AR2240的行为有时候不一样。4.3 用抓包做终极验证如果上面的方法都确认了但你还是不放心,那就抓包。eNSP支持在接口上抓包,右键接口选择"开始抓包",然后用Wireshark打开。抓包的位置很关键:你要在R1的入接口抓,确认流量进来了;在R1的两个出接口分别抓,确认流量从哪个接口出去了。如果入接口有包但出接口没包,说明策略路由把包丢了(可能是下一跳不可达);如果两个出接口都有包,说明策略路由没生效,流量走了默认路由或者负载分担。抓包的时候注意过滤:ip.src == 192.168.10.1 && ip.dst == 4.4.4.4,这样只看财务PC去外网的流量,避免被其他流量干扰。实操心得:eNSP的抓包有时候会丢包,尤其是流量比较大的时候。如果你发现抓包结果和display命令的统计对不上,以display命令为准。抓包只用来做定性分析,不用来做精确计数。5. 进阶玩法:策略路由与其他技术的联动5.1 策略路由+NQA实现链路自动切换基础版的策略路由是"死"的——你指定了下一跳,它就永远走那条路,哪怕那条路断了。要实现自动切换,需要配合NQA(Network Quality Analysis)来做链路检测。配置逻辑是这样的:先配一个NQA测试例,定期ping目标地址;然后配一个Track项关联NQA;最后在流行为里用redirect ip-nexthop 10.0.0.2 track 1,当Track状态为Down时,策略路由自动失效,流量回退到路由表。nqa test-instance admin test1 test-type icmp destination-address ipv4 10.0.0.2 frequency 5 probe-count 2 start now track 1 nqa admin test1然后在流行为里引用:traffic behavior caiwu-behavior redirect ip-nexthop 10.0.0.2 track 1这样当10.0.0.2不可达时,Track 1变为Down,策略路由失效,流量走路由表里的备用路径。这个方案比secondary下一跳更可靠,因为NQA是主动检测,而secondary只是被动等待主下一跳失效。但要注意:NQA会定期发探测包,增加一点网络开销。frequency设成5秒比较合适,太频繁浪费带宽,太慢切换不及时。5.2 策略路由与VRRP的配合如果你的网络里有VRRP(虚拟路由器冗余协议),策略路由的配置位置需要特别注意。VRRP的虚拟IP是浮动在Master设备上的,如果你在Master上配了策略路由,切换后策略路由不会自动跟着走。解决方案有两种:一是在两台设备上都配相同的策略路由,这样无论谁是Master,策略都生效;二是用VRRP的Track功能,当设备降级为Backup时自动撤销策略路由。第一种方案简单但浪费资源,第二种方案优雅但配置复杂。我个人的建议是:如果策略路由的下一跳是固定的(比如都指向同一个出口路由器),用第一种方案;如果下一跳跟VRRP状态相关,用第二种方案。5.3 策略路由在eNSP里的性能边界最后说一下eNSP的性能问题。eNSP是模拟器,不是真机,它的转发性能有限。如果你在实验里配了大量的ACL规则和策略路由,可能会发现转发延迟明显增加,甚至丢包。我的经验是:eNSP里做策略路由实验,ACL规则不要超过20条,流策略不要超过5个。如果确实需要更多规则,建议分多个流策略,应用在不同接口上,而不是堆在一个策略里。另外,eNSP对redirect ip-nexthop的处理有时候会有延迟,你配完策略后ping一下可能不通,等几秒钟再ping就通了。这不是配置问题,是模拟器的处理延迟。遇到这种情况不要急着改配置,先等一等。还有一个真机上有但eNSP里没有的功能:策略路由的statistics统计。真机上你可以用display traffic policy statistics看每个策略的详细统计,eNSP里这个命令的输出可能不全。所以做实验的时候,多用display acl和display traffic-policy applied-record来交叉验证。6. 我在这个实验里踩过的三个坑第一个坑:ACL匹配了但策略不生效。排查了半天发现是ACL的rule编号写成了rule 1,然后我在它前面又加了一条rule 0,结果rule 0的优先级更高,把流量全匹配走了。华为ACL是按编号从小到大匹配的,编号越小优先级越高。所以如果你要插入规则,要么留足步长,要么用rule命令重新编号。第二个坑:策略路由配在了错误的接口上。我把策略配在了R1连接R2的接口上,方向是outbound,结果发现只有去R2的流量走策略,去R3的流量不受影响。后来才想明白:策略路由应该配在流量的入接口上,而不是出接口。入接口是GE0/0/1(连接PC的接口),出接口是GE0/0/0和GE0/0/2(连接R2和R3的接口)。配在入接口上,所有从PC进来的流量都会经过策略处理。第三个坑:eNSP重启后策略路由失效。这个坑最坑,我配好策略路由,验证通过,保存配置,重启eNSP,再打开发现策略路由没了。后来发现是eNSP的配置保存机制问题:如果你在设备启动过程中保存配置,可能保存不完整。正确的做法是等设备完全启动后,再save,然后display saved-configuration确认配置真的写进去了。这三个坑我在不同的实验里反复踩过,每次都是排查半天才找到原因。写出来是希望你能跳过这些坑,把时间花在理解策略路由的逻辑上,而不是跟模拟器较劲。策略路由这个技术,说到底就是"按需选路"四个字。你理解了"谁发的包、去哪个方向、走哪条路"这个三段式逻辑,剩下的就是命令的熟练度问题。eNSP是个很好的练习工具,但别把它当真理,真机上的行为可能跟模拟器有差异。多做实验,多抓包,多对比,慢慢就有感觉了。