☰
华为设备IS-IS路由控制实战:从L1/L2规划到渗透过滤与选路优化
2026/10/16 2:42:51 网站建设 项目流程

1. 为什么现在还要折腾IS-IS路由控制

说实话,IS-IS这个协议在很多数通人眼里属于“老古董”了。它比OSPF还早几年定型,平时在企业网里见得少,网上教程也远不如OSPF多。但真到运营商骨干网、大型数据中心内部互联、电力/交通这类专用网络里,IS-IS反而是绝对主力。某运营商项目里,核心层跑的就是IS-IS,整整两年没重启过,稳得一匹。

我最初接触IS-IS也是赶鸭子上架——项目要求核心设备必须跑IS-IS,我对着文档啃了几天,又搭实验环境反复验证,才把路由控制的逻辑理顺。这个协议表面上配置命令没几条,但真要实现精细的路由控制,坑一个接一个。今天这篇文章就把我实际做过的华为设备IS-IS路由控制实验完整拆开来讲,包括设计思路、配置过程、踩坑记录,全部是能直接复现的东西。

如果你正准备考数通高阶认证,或者要在现网里部署IS-IS,这篇文章应该能帮你省下不少瞎折腾的时间。

2. 项目拆解:IS-IS路由控制到底在控制什么

2.1 先弄懂IS-IS的工作模型

IS-IS和OSPF一样,都是链路状态协议,核心思路都是“全网同步链路状态数据库,然后各自算路”。但两者的组织方式差别很大。OSPF按区域划分,区域之间靠ABR连接;IS-IS则按Level划分——Level-1相当于OSPF的普通区域,Level-2相当于骨干区域,一台路由器可以同时属于Level-1和Level-2。

这个差异带来一个关键影响:OSPF的区域边界在路由器上(ABR),而IS-IS的区域边界在链路上。换句话说,一条IS-IS链路只能属于一个区域,路由器可以横跨多个区域,但接口必须明确归属。设计区域拓扑时,这一点必须想清楚。

华为设备上启用IS-IS很简单,但默认行为往往不是你想要的行为。举个例子,默认情况下路由器会同时建立Level-1和Level-2邻居,也就意味着所有路由都会在两层里传递。小规模实验无所谓,但生产环境里这会造成路由表膨胀、收敛变慢。所以“路由控制”的第一步,就是严格控制Level的启用范围。

2.2 路由控制的四个维度

做IS-IS路由控制实验,核心是掌握四个控制维度:

  • Level控制:决定路由在哪个层级传递,L1只关心本区域,L2关心整个路由域。合理规划L1/L2的边界,能把路由震荡限制在局部。
  • 开销控制:IS-IS的cost是接口级的,可以通过修改接口开销影响路由选路。比起OSPF在接口上配cost,IS-IS还需要注意开销类型是narrow还是wide,这直接决定cost的取值范围。
  • 路由渗透控制:L1路由器默认看不到L2的路由,需要L1/L2路由器做路由渗透(leaking)。渗透策略做得好,既能保证连通性,又能避免L1路由器承载过多路由。
  • 路由过滤与优先级:通过filter-policy、路由优先级调整等手段,控制路由的发布和接收。这部分和OSPF的route-policy思路类似,但命令细节不同。

我在实验里把这四个维度全部过了两遍,接下来就按实际实验顺序一一说明。

3. 实验环境搭建与基础配置

3.1 拓扑设计与地址规划

实验我用了三台华为AR系列路由器,型号不同也没关系,只要版本支持IS-IS就行。拓扑是最经典的三角链:

  • R1和R2互联,网段10.1.12.0/24
  • R2和R3互联,网段10.1.23.0/24
  • R1和R3之间没有直连,强制让流量经过R2,方便观察路由控制和选路行为

区域规划采用了双区域设计:R1在区域49.0001,R3在区域49.0002,R2同时连接两个区域,作为L1/L2路由器。这样设计的好处是能完整演示L1/L2路由交互、路由渗透这些关键点。

Loopback地址按设备编号规划:R1用1.1.1.1/32,R2用2.2.2.2/32,R3用3.3.3.3/32。所有Loopback都宣告进IS-IS,方便测试路由可达性。

3.2 NET地址配置与注意事项

IS-IS配置里最容易翻车的就是NET地址。NET是NSAP地址的一种,格式是一长串十六进制数,比如49.0001.0010.0100.1001.00。很多人第一次配置时被这个格式搞晕,其实拆开看就三部分:

  • 区域地址:49.0001,前面的49是私有地址段标识,后面是区域号
  • 系统ID:0010.0100.1001,总共6字节,用来唯一标识设备
  • 选择符:00,固定值,表示这是NET地址

华为设备上配置NET地址的命令如下:

isis 1 is-name R1 network-entity 49.0001.0010.0100.1001.00

这里有个实操技巧:系统ID建议用设备Loopback地址的IPv4形式改写。比如R1的Loopback是1.1.1.1,写成系统ID就是0010.0100.1001(每段补足4位)。这样一眼就能看出NET对应的设备,排障时不用翻文档。

配置完NET后,在接口下启用IS-IS即可:

interface GigabitEthernet0/0/0 isis enable 1 isis circuit-level level-2

注意看这条circuit-level配置。R1在区域49.0001内,但它连接的是R2,而R2同时是L1/L2。如果不限制接口的circuit-level,R1和R2之间会同时建立L1和L2邻居,这在小实验里无所谓,但在真实场景中会导致L1区域内的路由和L2的路由混在一起。所以我在R1的接口上设了level-2,让R1只参与L2路由,R2作为L1/L2边界,专门处理渗透。

3.3 配置区域间互联与Level规划

R2的配置是重点。它一头连着R1(区域49.0001),另一头连着R3(区域49.0002),属于典型的区域间路由器。

isis 1 is-name R2 network-entity 49.0001.0020.0200.2002.00

R2的NET区域地址我用了49.0001,但这不是必须的。L1/L2路由器可以属于某个区域,也可以配置多个区域地址。为了让R2既能和R1建立L2邻居,又能和R3建立L2邻居,我在两个接口上都启用了IS-IS。关键点在接口下的level配置:

interface GigabitEthernet0/0/0 isis enable 1 isis circuit-level level-2 interface GigabitEthernet0/0/1 isis enable 1 isis circuit-level level-2

R3同样配置为纯L2设备:

interface GigabitEthernet0/0/0 isis enable 1 isis circuit-level level-2 isis 1 is-name R3 network-entity 49.0002.0030.0300.3003.00

这样配置起来,整个IS-IS路由域就全部跑在L2上,L1仅保留默认创建。这是最稳妥的实验起点:先把L2的底层邻居关系打通,再逐步加入L1和渗透控制。如果你一上来就搞L1/L2混合,排错时容易顾此失彼。

3.4 验证基础连通性

配置完成后,先做基础验证。

display isis lsdb

查看链路状态数据库,确认三台设备的LSP都已同步。LSP(Link State PDU)是IS-IS的链路状态通告,类似于OSPF的LSA。正常情况下三台设备的LSP会在每台设备上都看到。

display isis route

查看IS-IS路由表。如果基础配置没问题,R1应该能看到2.2.2.2/32和3.3.3.3/32的路由,R3同理。

这里我遇到一个经典问题:R1能看到R3的Loopback路由,但ping不通。排查后发现是接口下忘了配circuit-level限制,R1和R2之间建立了L1邻居,而R1的L1路由表里没有R3的L2路由。这就是Level控制没做好的典型症状。配置里加上circuit-level level-2后,问题立刻消失。

4. 核心实验一:L1/L2路由交互与路由渗透

4.1 为什么L1区域看不到L2路由

IS-IS的设计原则是L1路由器只需要知道本区域的路由,访问区域外一律走默认路由指向最近的L1/L2边界路由器。这个设计初衷是为了减少L1设备的路由表规模,但代价是可能产生次优路径。

具体来说,R1如果只是L1路由器,它不会收到R3所在区域49.0002的任何L2路由,只有一条默认路由指向R2。如果R1要访问R3的Loopback,流量会从R2转发,R2再查自己的L2路由表找到R3。这个路径是合理的,因为R1和R3不在同一个区域,默认路由是最优解。

但是有一个场景必须做路由渗透:当R1所在区域内部存在多个L1/L2边界路由器时,L1路由器只靠默认路由可能无法选择最优出口。我在实验里模拟了一个更复杂的场景:在R1区域里再加一台边界路由器R4,这样R1就有两个默认路由出口,如果不做渗透,R1只能随机选一个出口,可能绕路。

4.2 路由渗透配置实战

华为设备上做L1到L2的路由渗透很简单,只需要在L1/L2路由器上配置import-isis level-1 into level-2,反之亦然。但家用实验环境里,我们一般只需要L2到L1的渗透。

在R2上配置:

isis 1 import-isis level-2 into level-1

这条命令让R2把L2的路由(包括R3的Loopback、其他区域的明细路由)注入到L1。配置完成后,R1的IS-IS路由表立刻多出几条L1路由:

display isis route IS-IS routing table ---------------- (All Routes) Tag 1 : Level-1 Destination Cost Type NextHop Interface 10.1.12.0/24 10 IP 10.1.12.2 GE0/0/0 3.3.3.3/32 20 IP 10.1.12.2 GE0/0/0 2.2.2.2/32 10 IP 10.1.12.2 GE0/0/0

注意看3.3.3.3/32这条:下一跳指向R2,开销是20。这个开销是R1到R2的接口开销10,加上R2到R3的接口开销10,正好是路径累加。如果R2把L2的路由渗透到L1时做成默认路由,那么R1去R3的路径开销会变成10(到R2)+10(R2到R3)=20,仍然正确。但如果不做渗透,R1只有默认路由指向R2,开销也是10,最终路径一样。差别在于:渗透后R1能看到明细路由,可以做更精细的选路策略。

4.3 渗透策略的隐患与优化

渗透配置看起来简单,真放到生产环境里要小心一个问题:L2路由全部灌进L1,可能导致L1设备路由表爆炸。我在另一个实验里模拟了3000条L2路由渗透到L1,R1的路由表直接多了3000条IS-IS路由,内存占用明显上涨。

解决办法是用route-policy过滤渗透的路由。比如只让R1学习到R3的Loopback路由:

route-policy leak-permit permit node 10 if-match ip-prefix local-loopback isis 1 import-isis level-2 into level-1 route-policy leak-permit

ip-prefix local-loopback里只匹配3.3.3.3/32。这样R1的路由表就只包含必要的外部路由,而不是全量。这个思路在现网规划里非常实用:路由渗透不是全量放行,而是只放行“值得让L1知道”的明细路由。

我实际做项目时,L1区域边界设备通常只渗透两类路由:

  • 本区域需要访问的关键业务网段
  • 需要做MPLS TE或其他特殊控制的明细路由

其余都靠默认路由兜底。

5. 核心实验二:IS-IS开销控制与选路策略

5.1 开销类型的选择:narrow还是wide

IS-IS的开销有两种类型:narrow(窄)和wide(宽)。narrow模式下开销范围是1到63,wide模式下是1到16777215。华为设备默认兼容两种模式(narrow兼容),但默认接口开销都是10。如果使用narrow,以后想精确控制路径开销时会很吃力,因为63的上限太低。所以我在实验环境里直接切到了wide模式:

isis 1 cost-style wide

这个命令会改变IS-IS开销的编码方式。注意,如果网络里既有老设备只支持narrow,又有新设备支持wide,会出现路由无法互通的情况。实际规划时要统一所有设备的cost-style,或者在边界设备上做兼容模式。这个问题在现网中经常遇到,升级老设备时尤其要小心。

切换wide后,接口开销可以配到很大。我在R1连接R2的接口上把cost从10改成50:

interface GigabitEthernet0/0/0 isis cost 50

这样R1去往R3的路径开销变为50(R1-R2)+10(R2-R3)=60。如果我同时在R1和R3之间加了直连链路,并把那条链路的cost设成20,R1去R3就会优选新链路,因为20+20=40小于60。

5.2 选路实验:人为制造次优路径

为了让选路实验更有说服力,我调整了拓扑:R1和R3之间加一根直连链路,同时保留R1-R2-R3的路径。在R1上执行display isis route,你会发现IS-IS选择了直连路径。

这就引出IS-IS选路的一个重要原则:IS-IS只算链路状态,不会像BGP那样考虑AS路径长度。只要开销小,它就走那条路。这个特性在MPLS网络中尤其关键,因为MPLS的隧道选路往往依赖IS-IS的开销值。

但这里有个大坑:IS-IS默认只会把L1的明细路由和L2的明细路由分开算路,当同一个目的地址同时存在于L1和L2时,L1路由优先。我在R1上看到3.3.3.3/32同时有L1路由(从R2渗透来,开销50)和L2路由(从直连来,开销20),最终路由表里选择的是L2那条。如果两条都是L2,则比较开销。

所以做选路控制时,不仅要关注开销大小,还要搞清楚路由来自哪个Level。很多现网故障就是“L1路由优先”这个规则导致流量走了设计之外的老路。

5.3 自动开销与手动开销的配合

华为设备支持auto-cost,可以让接口根据带宽自动计算开销。默认参考带宽是100M,也就是说100M接口开销为10,GE接口开销为1。如果全局开了auto-cost,手动在接口下配isis cost就不生效。这个细节我一开始没注意,导致想在某个接口上调大cost时怎么都不生效。

后来才发现原因是R2上全局配置了auto-cost,接口手动cost被忽略。解决办法是:

isis 1 auto-cost bandwidth-reference 10000

带宽参考值改成10000Mbps后,GE接口开销自动变成1,10GE接口开销也会按比例计算。但生产环境中我一般更倾向手动cost,因为自动cost的结果不够直观,也不方便统一规划路径。只在链路带宽差异极大的场景下,auto-cost才能体现优势。

6. 核心实验三:路由过滤与路由优先级控制

6.1 filter-policy控制路由发布与接收

IS-IS的过滤有两个层面:发布过滤和接收过滤。发布过滤在源设备上做,控制哪些路由进IS-IS;接收过滤在入方向做,控制哪些路由进路由表。

我实验里在R1上配了接收过滤,只允许R3的Loopback进入路由表:

acl number 2000 rule 5 permit source 3.3.3.3 0 isis 1 filter-policy 2000 import

这里用的是ACL,也可以直接用ip-prefix。如果我想控制R1不能收到10.1.23.0/24这条路由,只要ACL里不匹配就行。这个实验做完,R1的路由表里就没有10.1.23.0/24了,但IS-IS邻接关系不受影响。

注意一点:filter-policy import只影响本机路由表的加入,不影响LSP的同步和转发。也就是说R1仍然知道R3的拓扑,只是不把它放进路由表。这点和OSPF的filter-policy作用类似,千万别和“过滤LSP”混淆。

如果要彻底阻止某条路由在IS-IS域内传播,需要在源头做export过滤,比如在R3上配置:

acl number 2001 rule 5 deny source 4.4.4.4 0 rule 10 permit source 0.0.0.0 0 isis 1 filter-policy 2001 export

这样R3的4.4.4.0/24这条路由根本不会进入IS-IS的LSP,全网都看不到。这两个过滤方向配合使用,就能实现“源头不发布,入方向不接收”的完整控制。

6.2 路由优先级调整

华为设备上,IS-IS路由的默认优先级是15,OSPF是10,静态路由是60,直连路由是0。如果同一目的地址同时从IS-IS和OSPF学到,OSPF的优先级更高,会优先被选入路由表。但在某些特殊场景,我们希望IS-IS的路由优先于OSPF,这时可以调整IS-IS的优先级:

isis 1 preference 20

这样IS-IS的优先级变成20,比OSPF低,选路时OSPF优先。如果想让IS-IS的优先级高于OSPF,就设成5。注意这个命令只影响IS-IS路由的优先级,不影响其他协议。

我在实验里模拟了双协议场景:R2同时跑IS-IS和OSPF,同一网段从两个协议学到。默认情况下OSPF优先,流量走OSPF路径。我通过preference把IS-IS优先级调高后,流量切到了IS-IS路径。这个控制在双协议迁移阶段非常实用,可以平滑切换流量优先级,避免割接瞬间的中断。

6.3 路由聚合的隐藏价值

华为设备IS-IS支持在区域边界做路由聚合,把多个明细路由聚合成一条通告出去。我在R2上配置:

isis 1 summary 10.1.0.0 255.255.0.0 level-2

这样R2会把区域内的10.1.12.0/24、10.1.13.0/24等明细聚合为10.1.0.0/16通告给L2。聚合后L2的路由表只剩一条,外区域设备的路由规模大大缩小。

但聚合有个副作用:如果明细路由出现震荡,聚合路由不会跟着震荡,这在某些场景是优点,但也掩盖了真实的故障。我在现网遇到过聚合后的黑洞:明细路由已经没了,聚合路由还在通告,流量发过去直接丢弃。所以做聚合一定要配合合理的明细路由监控手段,不能只看聚合路由“还在”。

7. 常见问题与排错经验速查

7.1 邻居状态无法Up的问题

IS-IS的邻居建立过程比OSPF简单,没有DR/BDR选举那种复杂机制,只有三次握手。所以邻居起不来,问题基本集中在几个点:

  • NET地址区域ID不一致,导致区域不匹配
  • 接口下没启用isis enable
  • circuit-level配置不匹配,比如一端是level-1,另一端是level-2-only
  • MTU不一致导致LSP过大无法传输

排查时我用得最多的命令是:

display isis interface display isis peer

display isis interface可以查看接口的level状态和开销,display isis peer查看邻居状态。如果peer状态显示Up,说明二层链路和IS-IS握手正常。如果一直卡在Initializing,多半是区域ID或circuit-level不匹配。

7.2 路由表里没有对方路由

邻居虽然Up了,但路由不通,这种问题我遇到很多次。先看display isis route,确认IS-IS路由表里有没有目标路由。如果有,但全局路由表里没有,就是filter-policy import误伤。如果IS-IS路由表里也没有,那就要看LSP里是否携带了这条路由。

还有一个容易被忽略的点:L1区域的路由不会自动出现在L2区域。如果R1和R2是L1邻居,R3在L2,R2没做import-isis level-1 into level-2,那么R3永远看不到R1的Loopback。反过来,L2的路由也没法进L1,除非配置渗透。这个问题我在实验里复现过,很多新手不知道IS-IS默认不做区域间路由泄露,所以认为“邻居起来了路由自然通”,结果被坑。

7.3 路由震荡和DIS选举

IS-IS没有DR/BDR,但L1/L2广播链路上有DIS(指定中间系统)。DIS负责在广播网络上周期发送CSNP(Complete Sequence Number PDU),相当于OSPF的DR。DIS选举优先级默认64,数值越大越优先。我在实验里用命令调整了DIS优先级:

interface GigabitEthernet0/0/0 isis dis-priority 100

DIS发生变化会导致广播链路上所有路由器重新同步LSDB,引起短暂路由震荡。现网中如果发现IS-IS周期性震荡,排查思路之一就是看DIS是否频繁切换。通过把核心设备设为高优先级,可以稳定DIS角色。

7.4 开销类型不匹配导致的路由不通

这个问题在混合组网中最棘手。一台设备配了cost-style wide,另一台还是narrow,两者虽然能建立邻居,但LSP里携带的开销信息可能会被错误解析。华为设备默认是narrow-compatible,既发送narrow也接收narrow和wide。但如果一端强制wide,另一端兼容模式,还是可能出现路由不通。

遇到这类问题,我一般先把所有设备统一成同一种cost-style,再逐一恢复。这不是偷懒,而是排障时减少变量。统一后再排查其他问题就简单多了。

8. 实验心得与生产环境落地建议

整个实验做下来,我对IS-IS的控制逻辑有了更深的体会。相比OSPF,IS-IS的配置命令确实更朴素,但它把路由控制的主动权交到了网络工程师手里。无论是Level规划、路由渗透、开销调整,还是过滤策略,每一步都直接影响全网的行为。

生产环境里我见过不少网络工程师因为不熟悉IS-IS,遇到问题只会重启进程或者把Level全部放开,这其实是把控制权扔掉了。IS-IS的精细控制并不难,关键是要理解L1/L2的特性和默认行为。我最后再分享几个实打实的建议:

  • 区域规划先行,IS-IS的区域边界在链路上,一旦部署后期调整成本极高,设计阶段就要把Level边界画清楚
  • 用wide cost-style,除非有老设备兼容性约束,否则别用narrow
  • 路由渗透要配合route-policy做过滤,别全量灌入L1,否则路由表迟早爆炸
  • 做过滤时一定要区分import和export方向,很多“路由丢了”的故障其实是过滤方向配反了
  • 遇到路由选路不符合预期,先看是L1还是L2路由,再看开销,别一上来就改全局配置

实验做完后,我又把整套配置套到了一个模拟的双区域汇聚组网里,验证了路由渗透、过滤和选路控制,稳定跑了两周没有出现异常。这套方法论放到真实项目中基本可以直接平移,只是接口数量更多、链路复杂一些,核心思路完全一致。希望这篇记录能帮你少踩几个坑,尤其是在搞懂“为什么”之后再动手配置,远比背命令有收获。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询