IPv6多路径路由选择:从等价多路径到策略路由的实战指南
1. 为什么多路径路由在IPv6时代变得不可回避IPv6规模部署之后很多做网络运维的朋友都有一个直观感受地址空间大了配置方式变了但路由这件事反而更复杂了。原因不复杂——IPv6从设计之初就把多宿主、多链路、多前缀共存当作常态来考虑而不是像IPv4时代那样把多路径当成一种“高级玩法”。这就意味着一个终端或者一台边缘设备同时拥有多条可达路径不再是异常情况而是日常状态。多路径路由选择要解决的问题很具体当同一个目的地址存在两条甚至更多条转发路径时流量该走哪一条。这个问题在IPv4里也存在但IPv6把它推到了台前。一方面运营商和企业在接入侧普遍采用双上行甚至多上行另一方面终端设备可能同时具备有线、无线、蜂窝等多种接口每个接口都能拿到全局可路由的IPv6地址。路径多了选择策略如果没设计好轻则流量绕远、时延抖动重则出现非对称转发导致连接被中间设备丢弃。这篇文章面向的是有一定网络基础的运维人员、网络架构设计者以及正在做IPv6改造的工程技术人员。我会从整体设计思路讲起把多路径路由选择的核心机制、实操配置、参数计算和排查技巧一层层拆开。读完之后你应该能独立设计一套适合自己网络环境的多路径选路方案并且知道在出问题时从哪里下手排查。2. 多路径路由选择的整体设计与思路拆解2.1 先搞清楚“多路径”到底指哪几种情况很多人一提到多路径就想到等价多路径其实这个理解太窄了。在实际的IPv6网络里多路径至少包含三种不同的形态每种形态对应的选路逻辑完全不一样。第一种是等价多路径也就是到达同一目的地有多条开销相同的路径。这种情况下设备通常做逐流负载分担同一条流走同一条路径避免乱序。第二种是非等价多路径路径开销不同设备按优先级或者按权重分配流量主路径优先备路径兜底。第三种是策略多路径路径开销可能一样也可能不一样但选路依据不是开销而是源地址、目的地址、流量类型、接口状态等策略条件。这三种形态在IPv6环境里经常同时存在。比如一个企业出口有两条上行链路一条主用一条备用同时内部还有基于源地址的策略路由这就同时涉及非等价多路径和策略多路径。设计的时候如果只考虑其中一种上线后大概率会出问题。2.2 选路依据的优先级是怎么定的设备做路由选择时不是随便挑一条路就走而是有一套严格的优先级顺序。这个顺序在IPv6里和IPv4有相似之处但也有明显差异。最优先的是最长前缀匹配。目的地址是2001:db8:1::1路由表里有2001:db8::/32和2001:db8:1::/48两条路由设备一定选/48那条因为前缀更长、更精确。这一步和路径数量无关纯粹是看谁更具体。前缀长度相同的情况下才进入多路径比较环节。这时候看的是路由协议的管理距离。直连路由最优先然后是静态路由再然后是各种动态路由协议。管理距离小的协议产生的路由优先被选中。如果管理距离也相同才比较度量值。度量值相同就是等价多路径度量值不同就是非等价多路径。这里有一个容易被忽略的点IPv6的直连路由和IPv4一样管理距离通常设为0静态路由默认是1。但不同厂商对IPv6静态路由的默认管理距离可能有细微差别配置前最好确认一下设备文档。我见过有人直接把IPv4的配置模板套到IPv6上结果静态路由的管理距离和预期不一致导致选路结果和设计不符。2.3 为什么不能只靠动态路由协议自动选路有些朋友会想既然OSPFv3、IS-IS这些动态路由协议能自动计算路径那多路径选择交给协议不就行了。这个想法在纯动态环境里部分成立但在实际网络中往往不够。动态路由协议确实能发现多条路径并计算度量值但它不知道你的业务意图。比如你有两条上行链路一条带宽大但时延高一条带宽小但时延低。动态路由协议可能因为带宽参数把流量都引到带宽大的那条结果对时延敏感的业务体验很差。协议算的是“最优”不是“最合适”。所以实际设计中通常是动态路由协议负责发现路径和提供备份策略路由或者路由策略负责按业务意图做最终选择。两者配合才能既保证可达性又满足业务需求。这个思路在IPv6多路径场景里尤其重要因为IPv6的地址规划往往和业务绑定更紧密基于源地址做策略选路的可操作性比IPv4更强。2.4 方案选型的几个关键权衡设计多路径选路方案时有几个权衡点必须提前想清楚否则后期改造成本很高。第一个权衡是负载分担还是主备。负载分担能充分利用带宽但配置复杂且对路径质量一致性要求高。主备模式配置简单但备用路径平时闲置带宽浪费。我的经验是如果两条路径的质量差异不大优先考虑负载分担如果质量差异明显或者备用路径是按流量计费的主备模式更稳妥。第二个权衡是逐流分担还是逐包分担。逐包分担能把流量打得更散但会导致严重的乱序问题TCP性能反而下降。逐流分担对单条大流的利用率不如逐包但整体稳定性好得多。IPv6环境下由于流标签字段的存在理论上可以基于流标签做更精细的区分但实际设备支持程度参差不齐配置前要确认。第三个权衡是状态检测还是无状态。有些多路径方案依赖状态检测机制比如根据链路质量动态调整选路。这种方案适应性强但状态同步本身会带来开销和复杂性。无状态方案配置简单但无法感知链路质量的实时变化。选择哪种取决于你的网络规模和对故障切换速度的要求。3. 核心机制解析与实操配置要点3.1 等价多路径的哈希算法与流量分布等价多路径的核心是哈希算法。设备把报文的某些字段提取出来算出一个哈希值然后根据哈希值选择出口。哈希字段的选择直接决定了流量分布的均匀程度。常见的哈希字段组合包括源IPv6地址、目的IPv6地址、源端口、目的端口、协议号、流标签。字段越多哈希结果越分散流量分布越均匀。但字段越多计算开销也越大而且对于某些特定流量增加字段未必能改善分布。这里有一个实操中经常踩的坑如果只拿源IPv6地址和目的IPv6地址做哈希当网络里存在大量源和目的都相同的流时所有流量都会走同一条路径等价多路径形同虚设。比如一个数据中心内部很多服务器访问同一个存储节点源和目的地址组合有限哈希结果就会集中。这时候必须把四层端口加进去才能把不同连接分散开。配置等价多路径时不同厂商的命令差异较大。以常见的网络操作系统为例通常需要在路由协议进程下开启多路径支持并指定最大路径数。比如在OSPFv3里需要确认最大等价路径数是否足够默认值可能只有1或者4如果实际路径数超过默认值多出来的路径不会被使用。注意开启等价多路径后一定要验证流量是否真的分散了。光看路由表里有多个下一跳不够要用流量测试工具或者查看接口计数器确认每条路径都有流量经过。3.2 非等价多路径的权重计算与配置非等价多路径允许路径开销不同但都参与转发只是分配的流量比例不同。这个比例通常由度量值决定。假设到达同一目的地有两条路径路径A的度量值是20路径B的度量值是60。总度量值是80路径A承担20/80即25%的流量路径B承担60/80即75%的流量。这个计算逻辑看起来简单但实际配置时要注意不同协议对度量值的定义不一样OSPFv3用的是接口开销累加IS-IS用的是窄度量或宽度量BGP用的是各种路径属性。跨协议比较度量值没有意义非等价多路径通常只在同一协议内部生效。配置非等价多路径时需要显式开启相关功能。很多设备默认只支持等价多路径非等价需要额外配置。配置完成后路由表里会显示多条路径及其权重但转发层面是否真的按权重分配还需要实际验证。我个人的经验是非等价多路径在路径质量差异较大时效果最好。如果两条路径质量差不多不如直接做等价多路径配置更简单效果也更可预测。非等价多路径的权重调整比较敏感稍微改一下度量值流量分布可能变化很大调优时需要耐心。3.3 策略路由在IPv6里的落地方式策略路由是多路径选择里最灵活的工具。它不依赖路由协议的度量值而是根据人为定义的策略来决定流量走向。IPv6策略路由的匹配条件通常包括源IPv6地址或前缀、目的IPv6地址或前缀、入接口、协议类型、DSCP值、流标签等。动作通常是设置下一跳、设置出接口、设置优先级等。一个典型的应用场景是企业有两条上行链路一条走运营商A一条走运营商B。希望访问特定业务系统的流量走运营商A其余流量走运营商B。这时候可以配置一条策略路由匹配目的地址为特定业务系统前缀的流量下一跳设为运营商A的网关再配置一条默认策略其余流量走运营商B。配置策略路由时匹配顺序非常关键。策略是按顺序匹配的一旦匹配成功就执行对应动作不再继续往下匹配。所以要把最具体的策略放在前面最宽泛的放在后面。如果顺序搞反了具体策略永远不会被命中。提示策略路由的匹配条件里源地址匹配在IPv6环境下特别有用。因为IPv6地址规划通常和业务区域绑定比如某个前缀专门给办公区某个前缀专门给服务器区。基于源地址做策略比基于目的地址做策略更稳定因为目的地址可能经常变化源地址相对固定。3.4 链路质量探测与动态切换静态配置的多路径方案有一个天然缺陷它不知道链路当前的质量。如果主路径虽然路由可达但实际丢包严重或者时延飙升流量还是会继续走主路径直到路由协议感知到故障并重新计算。这个感知时间可能长达几十秒对业务影响很大。链路质量探测机制就是为了解决这个问题。它通过持续发送探测报文测量每条路径的时延、丢包率、抖动等指标然后根据预设阈值动态调整选路。如果主路径质量下降到阈值以下自动切换到备用路径主路径恢复后再切回来。探测机制的关键参数包括探测间隔、探测报文大小、超时时间、切换阈值、回切阈值。探测间隔太短会增加开销太长则故障感知慢。一般来说探测间隔设在1到5秒之间比较合理具体取决于业务对故障切换时间的容忍度。切换阈值和回切阈值要设置得有一定差距避免在阈值附近反复切换。比如切换阈值设为丢包率10%回切阈值设为丢包率2%。这样主路径丢包率升到10%以上时切走降到2%以下才切回来中间有8%的缓冲区间不会来回震荡。4. 完整实操流程与关键环节实现4.1 环境准备与基础配置假设我们有一个典型的双上行IPv6网络环境。一台边缘路由器两个上行接口分别连接两个不同的上游网络下游连接内部网络。内部网络使用2001:db8:100::/48前缀两个上行接口分别配置了2001:db8:200::/64和2001:db8:300::/64的互联地址。第一步是确认基础连通性。两个上行接口都要能正常通信IPv6单播路由转发要开启。这一步看起来简单但实际中经常有人忘记在接口上开启IPv6转发或者忘记配置链路本地地址的自动生成导致后续配置全部失效。第二步是配置路由协议或者静态路由让设备能学到到达外部目的地的路径。如果使用动态路由协议需要确认两个上行接口都参与了协议计算并且都能产生到达同一目的地的路由。如果使用静态路由需要为同一目的地配置两条下一跳不同的路由。第三步是确认路由表里确实出现了多条路径。用显示路由表的命令查看确认同一目的地前缀下有多条下一跳。如果只有一条说明路由协议配置有问题或者静态路由的优先级设置导致只有一条被选中。4.2 等价多路径的配置与验证在确认路由表有多条路径后开启等价多路径功能。不同设备的配置命令不同但核心逻辑一致在路由协议进程下设置最大等价路径数并确保转发层面支持多路径。配置完成后验证分三步。第一步看路由表确认多条路径都处于活跃状态。第二步看转发信息库确认多条路径都下发到了转发层面。第三步做流量测试用多条不同的流同时发送观察每条路径的接口计数器是否都在增长。流量测试时要注意如果只用一条流测试即使配置正确也只会走一条路径因为逐流分担机制会把同一条流固定到一条路径上。必须用多条流或者用能够改变源端口或目的端口的测试工具才能看到负载分担效果。注意有些设备的等价多路径哈希算法默认不包含四层端口需要手动开启。如果测试时发现流量分布不均匀先检查哈希字段配置。4.3 策略路由的配置与优先级调整策略路由的配置通常分为两步定义匹配规则和定义动作。匹配规则用ACL或者前缀列表来实现动作用路由策略或者策略路由语句来实现。以基于源地址的策略路由为例。假设内部网络有两个网段2001:db8:100:1::/64是办公网段2001:db8:100:2::/64是服务器网段。希望办公网段的流量走上行A服务器网段的流量走上行B。配置逻辑是定义两个匹配规则分别匹配两个源前缀然后定义两条策略分别指定不同的下一跳。配置完成后验证策略是否生效。可以用traceroute命令从不同源地址发起探测观察路径是否按预期走不同的上行。也可以用策略路由的统计计数器查看每条策略的命中次数。策略路由的优先级调整是一个常见需求。比如临时需要把某个网段的流量切到另一条上行只需要调整策略的顺序或者修改匹配条件即可不需要动路由协议。这种灵活性是策略路由最大的价值。4.4 链路质量探测的部署与调优链路质量探测通常以独立进程或者独立功能模块的形式存在。部署时需要指定探测源接口、探测目的地址、探测协议和探测间隔。探测目的地址的选择有讲究。最好选择上游网络里稳定的设备作为探测目标比如上游网关或者公共的探测节点。如果探测目标本身不稳定探测结果就会失真导致误切换。探测协议可以用ICMPv6也可以用UDP或者TCP。ICMPv6配置简单但有些网络会对ICMPv6限速或者过滤导致探测结果不准确。UDP和TCP探测更接近真实业务流量但配置稍复杂。我的建议是如果网络对ICMPv6没有特殊限制优先用ICMPv6如果有改用UDP探测。调优时重点关注切换时间和回切时间。切换时间是从链路质量下降到触发切换的延迟取决于探测间隔和超时时间。回切时间是从链路质量恢复到触发回切的延迟取决于回切阈值和探测间隔。这两个时间要根据业务容忍度来定不能一味追求快否则容易震荡。4.5 参数计算实例度量值与权重分配假设我们用OSPFv3作为路由协议两条上行链路的接口开销分别是10和30。到达同一外部目的地路径A的总度量值是100路径B的总度量值是300。如果做等价多路径两条路径度量值不同不会被认为是等价的所以等价多路径不生效。如果做非等价多路径需要开启非等价功能并设置权重计算方式。按度量值反比分配路径A的权重是300/(100300)75%路径B的权重是100/(100300)25%。也就是说度量值小的路径承担更多流量。这个计算逻辑和直觉一致度量值小代表路径更优应该承担更多流量。但实际配置时要注意有些设备的非等价多路径权重计算方式和这个相反或者需要手动指定权重。配置前一定要确认设备的计算逻辑。如果希望两条路径承担相同流量可以把接口开销调整成一样让总度量值相等这样就变成了等价多路径。调整接口开销是一种常见的调优手段但要注意不要影响其他目的地的选路。5. 常见问题与排查技巧实录5.1 路由表有多条路径但流量只走一条这是最常见的问题。路由表里明明显示了两条等价路径但接口计数器显示只有一条路径有流量。排查思路分几步。第一步确认转发层面是否真的下发了多条路径。有些设备路由表和转发信息库是分离的路由表有多条不代表转发层面有多条。用查看转发信息的命令确认。第二步确认哈希算法是否包含了足够的字段。如果只哈希源和目的地址而测试流量源和目的都相同就会走同一条路径。第三步确认是否开启了逐包分担。有些设备默认逐流分担同一条流只走一条路径这是正常行为不是故障。如果确认以上都没问题但流量仍然集中可能是哈希算法的分布特性导致的。某些哈希算法对特定地址组合的分布不均匀这是算法本身的局限可以通过调整哈希种子或者更换哈希算法来改善。5.2 非对称转发导致连接被丢弃多路径环境里去程和回程走不同路径是常态。但如果中间有状态检测设备比如防火墙非对称转发会导致连接被丢弃因为防火墙只看到了一半的流量。解决这个问题的思路有两种。一种是让去程和回程走同一条路径通过策略路由或者路由策略实现。另一种是让状态检测设备支持非对称转发比如关闭状态检测或者部署在非对称路径之外。第一种思路更通用但配置复杂需要同时控制去程和回程的路由。第二种思路配置简单但会降低安全防护能力。实际选择取决于业务对安全性和稳定性的权衡。提示IPv6环境下由于地址规划更灵活用源地址策略路由控制回程路径比IPv4更容易实现。可以在上游设备上配置基于目的地址的策略路由确保回程流量走指定路径。5.3 链路切换后业务恢复慢链路故障后路由协议需要时间感知故障并重新计算这个时间可能长达几十秒。如果业务对中断时间敏感这个恢复速度是不够的。加速恢复的手段包括开启路由协议的快速收敛机制比如OSPFv3的BFD联动部署链路质量探测在路由协议感知之前就触发切换配置静态浮动路由作为备份主路由失效时静态路由立即生效。BFD联动是最常用的手段。BFD以毫秒级间隔发送探测报文一旦检测到链路故障立即通知路由协议路由协议马上重新计算。配置BFD时要注意探测间隔和超时时间的设置太短会增加开销太长则失去意义。一般来说探测间隔设在50到200毫秒之间比较合理。5.4 常见问题速查表问题现象可能原因排查方法解决措施路由表有多条路径但流量只走一条哈希字段不足或转发层面未下发多路径查看转发信息库检查哈希配置增加哈希字段确认转发层面支持非对称转发导致连接丢弃去程回程路径不一致中间有状态设备抓包确认去程回程路径配置策略路由控制回程或调整状态设备部署链路切换后业务恢复慢路由协议收敛慢无快速检测机制查看路由协议收敛时间开启BFD联动部署链路质量探测非等价多路径流量分布与预期不符权重计算方式理解错误查看设备文档确认计算逻辑调整度量值或手动指定权重策略路由不生效匹配顺序错误或匹配条件不准确查看策略命中计数器调整策略顺序修正匹配条件链路质量探测误切换探测目标不稳定或探测间隔太短查看探测日志和链路质量历史更换探测目标调整探测间隔和阈值5.5 几个容易被忽略的实操细节第一个细节是IPv6邻居发现的影响。IPv6用邻居发现协议替代了IPv4的ARP邻居发现的状态机更复杂。在多路径环境下如果邻居发现缓存出现问题可能导致某些路径的下一跳不可达即使路由表里显示路径是活跃的。排查时要检查邻居发现缓存的状态。第二个细节是流标签字段的处理。IPv6流标签字段理论上可以用于多路径选路但实际设备对流标签的支持程度差异很大。有些设备完全忽略流标签有些设备只在特定条件下使用。如果计划基于流标签做策略一定要先确认设备支持。第三个细节是前缀委派的影响。在有些网络环境里下游设备的前缀是通过前缀委派获得的。如果上游有多个前缀委派可能从不同的上游获得不同的前缀导致下游设备的源地址选择变得复杂。这种情况下多路径选路需要和源地址选择机制配合否则可能出现源地址和出口路径不匹配的问题。第四个细节是MTU一致性。多路径环境下不同路径的MTU可能不同。如果一条路径的MTU是1500另一条是1480大包在MTU小的路径上会被分片或者丢弃。IPv6不允许中间设备分片所以MTU不一致会导致严重问题。部署多路径前一定要确认所有路径的MTU一致或者配置路径MTU发现机制。6. 多路径选路的监控与持续调优6.1 需要持续关注的指标多路径选路不是配置完就一劳永逸的。网络环境会变化流量模式会变化路径质量也会变化。持续监控是保证选路效果的关键。核心监控指标包括每条路径的流量占比、每条路径的时延和丢包率、路径切换次数、策略路由命中次数、等价多路径的哈希分布均匀度。这些指标能反映选路方案是否按预期工作以及是否存在需要调优的地方。流量占比是最直观的指标。如果发现某条路径的流量占比持续偏离预期说明选路逻辑可能出了问题。时延和丢包率反映路径质量如果某条路径质量持续下降需要考虑调整权重或者切换策略。路径切换次数反映稳定性如果切换过于频繁说明阈值设置不合理。6.2 调优的常见方向调优通常从三个方向入手调整权重、调整阈值、调整哈希算法。调整权重适用于非等价多路径场景。如果希望某条路径承担更多流量降低它的度量值如果希望减少流量提高度量值。调整时要小步慢走每次调整后观察一段时间确认效果后再继续。调整阈值适用于链路质量探测场景。如果切换过于频繁增大切换阈值和回切阈值之间的差距如果切换太慢缩短探测间隔或者降低切换阈值。阈值调整需要平衡灵敏度和稳定性没有一刀切的最优值。调整哈希算法适用于等价多路径场景。如果流量分布不均匀尝试增加哈希字段或者更换哈希算法。有些设备支持多种哈希算法可以逐一测试选择分布最均匀的。6.3 变更管理中的注意事项多路径选路的变更影响面通常比较大变更前要做好充分准备。首先要备份当前配置以便回退。其次要在业务低峰期变更减少影响。再次要准备好验证方案变更后立即验证选路效果。变更过程中建议分步实施。先改一台设备观察一段时间确认没问题再推广到其他设备。如果一次性全网变更一旦出问题排查和回退都很困难。我在实际项目中遇到过因为策略路由顺序调整导致大面积流量绕远的情况。当时是把一条具体策略移到了默认策略后面结果具体策略永远不命中所有流量都走了默认路径。这个问题在变更后十几分钟才被发现因为流量没有中断只是时延增加了。所以变更后的验证不能只看连通性还要看路径是否符合预期。7. 一些个人体会多路径路由选择这件事配置本身不难难的是想清楚业务需要什么。我见过太多案例配置命令敲得飞快但问起来为什么这么配答不上来。结果网络一出问题完全不知道从哪里排查。我的习惯是在动手配置之前先画一张图把所有的路径、所有的流量类型、所有的业务需求都标出来。然后针对每种流量类型明确它应该走哪条路径为什么走这条路径如果这条路径出问题应该走哪条。这张图想清楚了配置就是水到渠成的事。另外IPv6的多路径和IPv4有一个很大的不同IPv6的地址规划通常更有结构这既是优势也是约束。优势是基于地址做策略更清晰约束是地址规划一旦定下来后期调整成本很高。所以做IPv6多路径设计时一定要和地址规划同步考虑不要等地址都分配完了再想选路的事。最后分享一个小技巧在测试多路径选路效果时不要只用ping或者traceroute。这些工具只能反映单条流的路径反映不了负载分担效果。用iperf3开多个并发流或者用支持多源端口的测试工具才能真正看出多路径是否在工作。我一般会开10到20条并发流持续跑几分钟然后看每条路径的接口计数器这样得到的结果比较可靠。