IS-IS区域迁移与路由汇总实战:从NET地址到LSP收敛

发布时间:2026/10/20 11:04:59
IS-IS区域迁移与路由汇总实战:从NET地址到LSP收敛
我第一次正经做IS-IS区域迁移和路由汇总是在一个把两个城域网合并成一张骨干网的改造项目里。当时接入侧一个区域用了老的地址规划核心侧已经换了新的区域地址两边的IS-IS进程虽然都通但LSP互相看不到路由表里全是缺胳膊少腿的条目。折腾到半夜才想明白根子不在BGP也不在接口而在IS-IS的区域边界和路由汇总方式上。从那以后我就意识到IS-IS这块内容看着不起眼真正动手做迁移和汇总时处处都是细节少想一步就会断网。这篇文章就把我这些年碰过的IS-IS区域迁移与路由汇总问题整个捋一遍。适合正在做网络割接、区域合并、路由优化的朋友参考也适合刚接触IS-IS的读者当一份实操笔记看。先说明白IS-IS不是OSPF那种“区域接口集合”的模型L1、L2、NET地址、区域地址这些概念如果没完全吃透迁移时一定会踩坑。1. 区域迁移与路由汇总的基本前提很多人一上来就问“IS-IS区域迁移怎么配”但忽略了IS-IS的区域模型和OSPF很不一样。IS-IS里没有Area 0、Area 1这样的编号区域是靠NET地址中的Area Address字段来识别的路由器的级别又分成Level-1、Level-2和Level-1-2。区域迁移说白了就是修改NET地址里的Area Address部分但牵一发动全身邻接关系、路由泄漏、默认路由、汇总边界全都跟着变。1.1 先搞清Area、Level和NET的对应关系IS-IS路由器的身份由NETNetwork Entity Title决定常见格式是49.0001.1920.0010.1001.00。其中49是私网地址标识0001就是区域地址中间的1920.0010.1001是System ID最后两位是SEL固定为00。两台路由器能不能建立Level-1邻接看的就是Area Address是否一致Level-2邻接不依赖区域地址只要都在骨干区域就能建。这就引出了Level角色的意义。Level-1路由器相当于OSPF里的非骨干区域内部路由器只维护本区域的LSDB默认通过最近一台Level-1-2路由器产生的默认路由访问区域外。Level-2路由器维护整个L2骨干的LSDB负责跨区域路由。Level-1-2路由器则是区域出口同时参与L1和L2的SPF计算并负责在L1和L2之间传递必要信息。区域迁移要改的就是NET里的Area Address。比如要把一台路由器从49.0001迁到49.0002本质上是让它的L1邻接关系从“和49.0001区域的路由器建”变成“和49.0002区域的路由器建”。但L2部分几乎不受影响只要链路两端都是L2或L1-2L2邻接照常起来。这个特性是IS-IS区域迁移比OSPF改区域配置要温和的根本原因。1.2 哪些场景会逼着你做区域迁移和路由汇总第一个典型场景是网络合并。两套独立运营的网络要互通原来分别是49.0001和49.0002合并后不可能让核心区域继续裂成两块否则L2路由明细全要互相传递LSDB和路由表大到不可接受。这时候不是给边界加个汇总就完事最好直接把区域边界重新划齐。第二个场景是地址重新规划。老区域地址和新地址规划不匹配或者为了后续扩展空出连续地址段需要把一批设备整体挪到新区域。这类迁移往往伴随着路由汇总一起做因为新区域地址通常规划成有规律的聚合块方便在L1/L2边界汇总。第三个场景是故障域收敛和性能调优。某个区域的L1路由器太多LSDB同步频繁SPF计算开销大把一部分设备拆到新区域同时在边界做汇总能显著压缩LSP洪泛范围和路由表规模。路由汇总解决的是另一个维度的痛点。IS-IS的L1区域内部跑明细路由没问题但到了L2骨干如果每个区域都把几千条明细通告上来骨干网所有路由器都得维护全量明细。通过Level-1到Level-2的汇总可以把一个区域的一组连续前缀聚合成一条或几条路由骨干只需要维护聚合路由收敛速度和设备性能都能得到明显改善。1.3 迁移前必须画清楚的三张图动手之前别急着敲命令至少先把现状摸清楚。第一张图是区域拓扑图标清楚每台路由器当前的Area Address、System ID、Level类型以及哪些设备是L1/L2边界。第二张图是地址规划图把每个区域的接口地址段、Loopback地址、以及未来要作为汇总块的连续网段标出来。第三张图是邻接关系图哪些链路是广播网哪些是点对点DIS在哪台设备上这些在迁移后都可能变化。尤其是System ID它在一个IS-IS域内必须全局唯一。很多迁移事故不是区域地址改错而是两台设备的System ID设计重复改完NET后LSP被互相覆盖路由表直接混乱。迁移前把System ID规划好用设备编号、上联位置等信息设计一套易读的编码规则比事后排查重复省太多时间。另一个要提前确认的点是每条链路的网络类型。IS-IS在广播链路上会选举DIS迁移后如果DIS变了整个链路所有路由器的LSP序列号、伪节点相关状态都会重建同步流量会瞬间放大。如果链路是P2P类型这方面的影响就小很多。所以迁移窗口尽量挑在业务低峰而且要按照“先加新区域地址再删旧区域地址”的节奏走避免全网同时重启IS-IS进程。2. 区域迁移的实操步骤与平滑过渡方案IS-IS的NET配置支持在同一台设备上最多配置多个区域地址这是平滑迁移的关键。理论上可以让设备同时属于旧区域和新区域一段时间让邻接关系逐步切换而不是在所有链路同时断开。2.1 用多区域地址过渡替代“改完重启”最保险的区域迁移方式是“加法优先”。假设现在全网都是49.0001目标是把A、B两台L1路由器迁到49.0002。先在A、B的IS-IS进程下新增一个NET49.0002.1920.0010.1001.00保留原来的49.0001。这样A、B和旧区域设备的L1邻接仍然存在同时它们开始尝试与配置了49.0002区域地址的设备建立L1邻接。这里有个细节多NET配置下路由器会通告多个区域地址邻居是否建L1邻接取决于两端是否有交集。如果链路对端还是49.0001L1邻接还能维持如果对端已经迁到49.0002则两端交集49.0002L1邻接照建。这样就能做到一台一台、一条链路一条链路地切换而不是全网同时断。等到所有涉及设备和链路都加上了49.0002再进入“减法阶段”逐个删除旧的49.0001 NET。每删除一个区域地址旧区域的L1邻接会随之断开LSP重新洪泛。整个过程可以精细控制。需要额外留意的是多区域地址阶段L1路由器会认为本区域同时有多个区域地址某些实现在计算L1到L2的默认路由和汇总时行为不完全一样最好在过渡窗口内多观察路由表确认无异常后再删旧地址。2.2 单台设备修改NET的完整配置过程单台设备的迁移过程并不复杂但顺序有讲究。拿一台L1/L2路由器为例实际操作我一般按下面这个顺序来。第一步准备好新NET地址。System ID保持原值不动只改Area Address段。比如原来System ID是1920.0010.1001新区域是49.0002那么新NET就是49.0002.1920.0010.1001.00。System ID如果不小心改了邻居会把这台设备当成全新路由器所有LSP要全量重传。第二步进入IS-IS配置视图执行类似下面这样的配置router isis 1 net 49.0001.1920.0010.1001.00 net 49.0002.1920.0010.1001.00某些设备上net命令可以多次执行来增加区域地址。加入新地址后不需要重启进程邻接关系按上面说的逻辑自然变化。第三步观察邻接状态和LSDB。用show命令确认新区域方向的L1邻接已经建立LSP同步完成再准备删除旧地址。典型验证命令是show isis neighbors show isis database重点看老区域方向的L1邻居是否还在、新区域方向的L1邻居是否出现、LSP中通告的区域地址是否同时包含49.0001和49.0002。第四步删除旧NETno net 49.0001.1920.0010.1001.00删除后旧区域邻接断开路由重新收敛。此时在设备上再执行show isis route确认所有通过旧区域学到的路由已经切换到新路径或者通过默认路由指向新的L1/L2边界。这里要记住一点虽然IS-IS支持动态增删NET但并不是所有设备在修改NET后都能完美保持邻居状态。我遇到过部分老版本软件删除旧NET后邻接会卡在Init状态必须手动clear isis或者重启进程。所以迁移窗口内要准备好中断操作的时间预算不能假设“动态修改永远不断流”。2.3 迁移期间邻接、DIS和路由收敛的变化区域迁移不只是改一个数字它牵扯到整个广播域内的DIS重选和伪节点更新。如果一条广播链路上原来DIS是A设备迁移后A的区域地址变了LSP重新生成DIS可能会重新选举到B设备导致该链路上所有设备重新同步LSP瞬时网络流量呈倍数上涨。P2P链路没有DIS影响要小得多。另一个容易被忽视的是ATT位。L1/L2路由器在Level-1 LSP里设置ATT位向L1区域宣告“我这里有出口”。当区域边界移动后ATT位置可能改变L1路由器算出来的默认路由下一跳可能指向另一台L1/L2路由器。如果这台设备在迁移后没有及时通告新LSPL1区域可能出现一段时间的“无默认路由”状态。所以在实际割接时我会先迁移L1/L2边界设备让新区域的出口先就位再迁移纯L1设备。迁移一台L1/L2路由器确认它在L1区域里已经通告了ATT位并且L2侧已经能看到新区域路由后再动下一台。如果反着迁移纯L1设备会出现“旧出口已消失、新出口还没起来”的尴尬窗口。3. 路由汇总的设计与配置路由汇总是区域迁移最好的搭档。尤其是把区域边界重新划分后原来的明细路由如果想直接扔到L2骨干整个网络的路由表会爆炸。IS-IS汇总分几个方向对应的配置位置和含义完全不同。3.1 IS-IS汇总的三种方向第一种是Level-1到Level-2的汇总在L1/L2边界路由器上做。它把本区域L1学到的明细路由聚合后通告进L2骨干。这样骨干网看到的是一个区域的聚合前缀而不是几十上百条明细。第二种是Level-2到Level-1的汇总。场景通常是L1路由器需要访问外部区域但L1不允许保留大量外部明细路由。L1/L2路由器把来自L2的组播或外部路由汇总后以明细或默认路由的形式下发给L1。注意IS-IS的L1路由器默认通过ATT位产生的默认路由访问区域外不会拿到L2明细路由。如果业务需要L1看到部分外部明细需要开启路由泄漏此时汇总要结合泄漏规则一起做否则泄漏进来的还是明细。第三种是在L2区域内做汇总。如果整个网络本身就是平坦的L2区域边界不涉及L1/L2也可以直接对某些连续前缀做聚合减小L2 LSDB中的IP前缀数量和SPF计算量。这三种方向里第一种最常用也是区域合并时最优先要做的。第二种要谨慎因为把外部路由汇总后泄漏进L1可能让L1设备选择次优路径。第三种适用于纯L2骨干场景配置相对直接。3.2 边界汇总配置示例以一台L1/L2路由器为例假设本区域现在有10.1.0.0/24、10.1.1.0/24、10.1.2.0/24三条明细需要汇总成10.1.0.0/16通告到L2。IS-IS进程下配置如下router isis 1 summary-address 10.1.0.0 255.255.0.0 level-1-2level-1-2表示这条汇总既影响L1到L2的通告也影响L2到L1的通告。如果只想在L1到L2方向生效就写level-1只想在L2到L1方向生效就写level-2。汇总地址可以配多个但要保证掩码比明细路由的掩码短否则不会产生聚合效果。配置后边界路由器会抑制更具体的路由向外通告同时生成一条聚合路由。验证方式直接看对端设备路由表show isis route show ip route如果对端L2路由器看到的明细条目仍然很多说明汇总没有生效。常见原因是汇总块内部至少有一条路由没有进入IS-IS路由表或者配置的汇总前缀与实际明细之间还有间隙。还有一点汇总命令只在IS-IS进程内生效不会影响直连接口路由和引入的外部静态路由。如果要汇总重发布进来的外部路由得看协议实现是否支持。3.3 汇总掩码怎么定才不产生黑洞和次优路径汇总最怕的是“盲汇总”。你汇了一条10.0.0.0/8但内部实际只有10.1.0.0/16这一段有路径其他段全是空。流量到了汇总点要么被转发到空接口要么在设备上找不到明细而丢包。所以汇总前必须确认聚合块内的所有地址空间都有真实的转发路径。举个例子。两个区域合并后A区域地址是10.1.0.0/16B区域地址是10.2.0.0/16。如果只汇总成10.0.0.0/8那么10.3.0.0这段没有对应区域流量进来就是黑洞。正确做法是分成两条汇总10.1.0.0/16和10.2.0.0/16或者10.0.0.0/9。千万别贪图一条汇总好看把一个不存在的网段也聚进来。另一个问题是最长掩码优先带来的次优路径。IS-IS和IP路由一样收到汇总路由和明细路由并存时明细优先。如果某个区域汇总后外部同时还能通过其他方式学到更具体的路由会出现流量绕路。迁移和汇总完成后要对比全网路由表确认所有更优的明细路径都在预期位置。路由黑洞还有一层原因是汇总后没有黑洞路由兜底。某些实现中summary-address会自动生成一条指向Null0的聚合路由防止环路但不是所有实现都默认这样做。如果设备不支持自动黑洞路由需要在IP路由表手动配置一条指向Null0的汇总黑洞路由否则当明细路由全部失效时聚合路由可能造成环路。3.4 汇总后的验证与回退操作验证汇总生效不能只看边界路由器本身要在远离汇总点的设备上确认。一般我会在L2核心和另一个L1区域各选一台路由器分别看它们收到的前缀数量。核心设备看到的应该是聚合后的条目而不是一堆明细。还要确认聚合路由的下一跳是L1/L2边界路由器而不是某个普通L1路由器。如果发现汇总结果不符合预期回退也简单删掉summary-address命令即可明细路由会在下一个LSP周期恢复通告。不过要注意删除汇总后LSP会重新生成对端设备立刻开始处理大量新前缀短时间内CPU和内存占用会上升。所以回退动作尽量在业务低峰做。汇总和区域迁移经常一起操作我个人的建议是先做迁移等全网所有区域都在新拓扑下稳定运行再逐台加汇总。迁移过程中加汇总会让问题叠加比如某个区域的地址还没有完全切换到新NET但汇总已经把这些地址聚成了一个大块流量直接指向了错误的边界排查起来非常痛苦。先迁移后汇总每一步验证清楚才是稳妥的节奏。4. 区域迁移与汇总的高频故障速查这部分是实战里踩过最多的坑。我把它整理成一张速查风格的经验清单方便各位直接对照。4.1 改完NET后邻接无法建立这是区域迁移第一天最常遇到的问题。改了新NET后L1邻接一直InitL2也起不来。排查顺序我固定这么走。先看两端System ID和区域地址是否匹配用show isis neighbors看错误状态。再查认证配置如果IS-IS配置了hello认证、LSP认证区域地址变化后所有LSP都会重新生成认证密钥不匹配会把邻居直接卡死。还有一个容易忽略的原因是链路两端的Level类型不匹配。一端是Level-1一端是Level-1-2但中间区域地址交集为空L1邻接就建不起来而L2邻接又因为对端没有使能Level-2而失败。最常见的现象是一台设备改了NET但忘了改is-type保持level-1对端新区域已经是level-1-2于是两边只能建L1邻接L2路由全部缺失。4.2 汇总后路由出现黑洞但又ping不通黑洞地址这个现象很经典。边界路由器汇总后核心路由表出现了一条完美的大网段汇总路由但业务访问该网段内某些地址时丢包日志里没有ICMP不可达ping黑洞地址也通。问题往往出在摘要路由的下一跳是某个已经失效的边界设备。IS-IS虽然会随着拓扑变化重新计算SPF但如果区域内有多个L1/L2边界汇总路由可能同时从多个边界泄漏进L2形成等价路由。其中一个边界的明细路径已经断裂但聚合路由还存在流量就可能被负载分担到已经不可达的边界上。解决思路是检查所有L1/L2边界的汇总配置是否一致让聚合路由只能由确定存活的边界通告必要时调整度量值保证汇总路由下一跳收敛到正确设备。另外summary-address如果带了tag或者没有匹配到任何明细时不会生效某些实现会静默不生成汇总。遇到这种情况先在边界路由器上执行show isis route确认明细路由确实在IS-IS路由表里再确认汇总命令没有被其他的策略路由或filter覆盖。4.3 迁移后L1区域默认路由漂移迁移前L1区域的默认路由指向边界路由器A迁移后突然指向了边界路由器B但B到外部区域的路径质量更差。这是ATT位和LSP洪泛时序导致的。区域边界移动后每台L1/L2路由器都会在自己的L1 LSP中重新设置ATT位L1路由器根据收到的所有ATT位置重新计算默认路由选择最近的Level-1-2路由器。如果不想让默认路由漂移可以对汇总和默认路由做策略控制比如在某些边界设备上关闭ATT位置让L1区域只有一个出口或者在L1/L2边界配置inter-route leaking和汇总时通过调整metric来优先选择特定出口。这个动作必须在迁移前设计好迁移后再临时改策略邻居之间的LSP重新同步窗口内默认路由会消失几秒钟。4.4 System ID冲突与LSP分片问题区域迁移中最隐蔽的坑是不同区域的设备提前规划了相同的System ID。合并前两套网络互不感知各用各的System ID看起来没事合并后系统ID冲突LSP会被错误地认为是同一台路由器发出的LSDB里出现大量重复校验和路由表乱成一片。排查方法很简单在网络里任意一台路由器上show isis database看是否有相同System ID但不同片段编号的LSP。正常情况一台路由器只有一个System ID它的LSP片段编号从00开始递增。如果两个完全不同的设备System ID一致会在各自片段中出现内容冲突。LSP分片问题主要发生在汇总和迁移触发了大量路由变更时。IS-IS单条LSP有容量上限超限后需要分片扩展。如果网络本身没有配置分片扩展而迁移后某个区域的路由明细猛增LSP可能无法承载全部TLV导致部分路由没有通告出去。迁移和汇总完成后记得检查每个区域的LSP分片数量必要时调整分片扩展配置。5. 最后一次踩坑后的经验沉淀区域迁移这件事看着就是改个NET地址实际做起来牵涉到LSP洪泛范围、DIS重选、ATT位置、汇总边界、认证等等一堆东西。我自己经历过的两次割接一次顺利得让我以为IS-IS迁移很简单另一次把整个核心网的IS-IS进程全重启了。差别就只在于迁移顺序和是否在迁移前做了汇总设计。现在我做任何IS-IS区域调整都会先拉一遍全网IS-IS邻居关系把L1/L2边界、DIS、System ID全列出来然后按“先边界后L1、先新增后删除”的顺序操作。每动一台设备至少等两个LSP刷新周期确认邻接稳定、路由表无异常再继续下一台。路由汇总一定放在区域迁移全部结束、网络拓扑稳定之后并严格控制汇总块内部的空路由。还要补一句经验IS-IS的排错思路和OSPF不同别一上来就查OSPF那样的area配置。IS-IS不看你接口属于哪个区域只看NET里的区域地址是否匹配、LSP是否洪泛到正确的设备。把这个模型刻在脑子里迁移和汇总就成功了一大半。