ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

思科IPv6路由协议配置实战:从双栈改造到排错全攻略

思科IPv6路由协议配置实战:从双栈改造到排错全攻略 前段时间帮一个做企业网的朋友做IPv6双栈改造现场三台思科路由器一台ISR 4331当核心两台C8300当分支原本跑的都是IPv4的OSPF和静态路由现在要求全网IPv6互通路由协议必须一并切过来。本以为就是照着手册敲几条命令的事结果真上手才发现思科路由器上IPv6路由协议的配置思路和IPv4有明显区别静态路由、RIPng、OSPFv3、EIGRP for IPv6、BGP4各有各的坑尤其是OSPFv3在旧版本IOS上的router-id问题和EIGRP for IPv6默认shutdown这个细节差点把现场折腾到通宵。这篇文章就把我在这次改造中实际用到的配置命令、踩过的坑、查错的过程完整整理出来内容包括接口IPv6地址的配置方式、静态路由的三种写法、RIPng、OSPFv3、EIGRP for IPv6以及BGP4的完整配置示例最后附一份排错命令速查表和经典故障实录。不管你是刚接触IPv6的CCNA考生还是正在做网络割接的运维工程师这份总结都可以直接拿来对标参考。1. IPv6路由配置前的三个准备动作很多人在配置IPv6路由协议之前就栽了跟头原因是只想着配协议忽略了IPv6本身和IPv4在接口层面的一些差异。这里先说三个最基础但最容易漏掉的准备动作这三个动作没做好后面的路由协议配置全都白搭。1.1 全局开启IPv6单播路由转发拿到一台思科路由器想让它跑IPv6路由协议第一步不是配接口地址而是先敲一条全局命令Router(config)# ipv6 unicast-routing这条命令的作用是让路由器具备IPv6数据包的转发能力。如果不敲接口上照样可以配IPv6地址show ipv6 interface brief也能看到地址状态是up/up但路由器不会对IPv6报文做路由转发路由表里也不会出现直连路由之外的任何条目。我见过不少新手在GNS3里做实验接口地址配了OSPFv3也宣告了但两台路由器之间就是ping不通最后发现就是漏了这条命令。所以在配置任何IPv6路由协议之前务必先确认这条命令已经敲了可以用show running-config | include ipv6 unicast-routing来验证。1.2 接口地址配置手动指定与EUI-64的取舍思科路由器接口配置IPv6地址有两种常用方式。第一种是完全手动指定这种方式最直观也最容易维护Router(config)# interface GigabitEthernet0/0 Router(config-if)# ipv6 address 2001:db8:1:1::1/64 Router(config-if)# no shutdown第二种是使用EUI-64格式接口ID部分由接口MAC地址自动生成Router(config)# interface GigabitEthernet0/0 Router(config-if)# ipv6 address 2001:db8:1:1::/64 eui-64关于EUI-64有个细节必须强调EUI-64格式只支持/64前缀如果你敲了2001:db8:1:1::/126 eui-64这种命令IOS会直接报错拒绝执行。原因很简单EUI-64会生成一个64位的接口ID加上64位前缀才是128位完整地址前缀长度不是/64就没法在剩余空间里塞下完整的接口ID。我在实际项目中更倾向于手动指定地址原因是地址可读性好便于在排错时快速识别设备。EUI-64虽然自动生成很省事但生产环境里如果设备换了一块接口板MAC变了IPv6地址也会跟着变这在运维上是个隐形炸弹。另外强烈建议在接口上手工配置一个链路本地地址不要用自动生成的Router(config-if)# ipv6 address FE80::1 link-local这样做的价值在后面的路由协议配置和排错中会非常明显尤其是用链路本地地址作为下一跳和路由协议邻居时固定的地址比自动生成的一长串好记多了。1.3 链路本地地址IPv6排错和路由的关键说到链路本地地址有必要单独开辟一小节聊聊。IPv6的每个接口无论是否配置全球单播地址都会自动生成一个以FE80::/10开头的链路本地地址用于同一链路上的通信。这个地址在IPv6路由协议里极其重要OSPFv3的Hello报文源地址是链路本地地址RIPng的更新报文也是从链路本地地址发出的BGP的IPv6会话也经常建立在链路本地地址上。这意味着你在排查邻居关系时看到的对端地址很可能就是FE80::开头的一串。正因为链路本地地址这么常用我强烈建议在接口上手工规划像前面说的那样Router(config-if)# ipv6 address FE80::1 link-local一台路由器上多个接口分别用FE80::1、FE80::2、FE80::3这样规划排错时一眼就能看出是哪个接口的邻居。如果没有手工规划自动生成的链路本地地址是根据MAC算出来的不同接口MAC不同地址也不同排查问题时要逐一对照show ipv6 interface的输出才能对上号效率很低。还有一个容易踩的坑静态路由如果下一跳写成链路本地地址必须同时指定出接口这个在下一节详细说。2. IPv6静态路由全网最简但最容易踩坑静态路由在IPv6环境里依然是不可或缺的尤其是中小型网络的末端、备份链路或者默认路由。虽然命令不长但格式上有几个跟IPv4明显不一样的地方配置时稍不注意就会出错。2.1 静态路由配置格式与三种写法IPv6静态路由的基本命令格式是ipv6 route 目标前缀/前缀长度 {下一跳地址 | 出接口 | 出接口 下一跳地址}跟IPv4最大的区别在于IPv6静态路由的下一跳可以写成纯下一跳地址也可以写成纯出接口还可以写成出接口加下一跳地址的组合形式。三种写法对应不同场景第一种纯下一跳地址要求下一跳是IPv6全局单播地址Router(config)# ipv6 route 2001:db8:3:0::/64 2001:db8:1:1::2这种写法适合以太网环境下一跳路由器配了全局单播地址并且路由可达。第二种出接口加链路本地地址这是以太网链路上最推荐的写法Router(config)# ipv6 route 2001:db8:3:0::/64 GigabitEthernet0/0 FE80::2注意当下一跳写的是链路本地地址时必须同时指定出接口否则IOS会提示命令不完整根本敲不进去。原因是链路本地地址只在本地链路内有意义路由器必须知道从哪个接口出去才能到达这个地址。第三种纯出接口写法Router(config)# ipv6 route 2001:db8:3:0::/64 GigabitEthernet0/1这种写法相当于把出接口当作路由的出口类似IPv4里的ip route ... interface方式。在点到点链路上比较常见但在以太网这种广播型链路上不推荐因为如果出接口下有多个设备路由器无法确定到底是哪个邻居遇到特殊情况会出现路由黑洞。2.2 默认路由的配置方法IPv6的默认路由用::/0表示相当于IPv4里的0.0.0.0/0配置命令如下Router(config)# ipv6 route ::/0 GigabitEthernet0/0 2001:db8:1:1::2 Router(config)# ipv6 route ::/0 GigabitEthernet0/0 FE80::2注意::/0中间是冒号不是::0如果敲成::0就会被解析成地址::加前缀长度0实际上还是表示默认路由但不同IOS版本对这种输入的解析可能有差异最好严格写成::/0。默认路由在IPv6选路里的行为跟IPv4一样只有当路由表中没有更精确匹配的路由条目时才会被使用。在双栈改造项目中通常会把它和动态路由协议配合使用作为末梢网络的出口路由。2.3 浮动静态路由的IPv6版本浮动静态路由这个思路在IPv6下同样适用而且配置几乎零成本。场景是这样的核心路由器同时连着主运营商和备份运营商主链路跑BGP或者OSPFv3备份链路用一条静态默认路由兜底。正常情况下动态路由协议的管理距离更小静态路由躺在路由表里不生效一旦主链路断开动态路由条目消失静态路由自动顶上。命令写法就是在静态路由末尾加上AD值参数Router(config)# ipv6 route ::/0 GigabitEthernet0/1 2001:db8:2:2::2 200默认情况下IPv6静态路由的管理距离是1OSPFv3是110BGP外部是20。这里把静态路由AD值改成200比OSPFv3和BGP都大所以平时静态路由不生效只有动态路由失效时才会接管转发。有一个实际项目里的经验备用链路既然要兜底建议把IPv4和IPv6的浮动静态路由都配上并且两条路由的AD值保持一致否则会出现IPv4走备份、IPv6走主链路这种不对称的尴尬情况。3. RIPng小网络的快速选择RIPng是IPv6环境下的距离矢量路由协议对应IPv4里的RIPv2。在思科路由器上配置RIPng的思路和RIPv2差别很大如果不理解底层机制很容易绕晕。3.1 RIPng与RIPv2的关键差异先理清楚RIPng的几个核心参数它使用UDP端口521发送更新报文组播地址是FF02::9最大跳数限制依然是15跳16跳表示不可达。跟RIPv2相比RIPng有几个关键变化RIPv2用network命令宣告网段RIPng没有network命令改为在接口下直接启用。RIPv2的更新报文源地址是接口IPv4地址RIPng默认用接口的链路本地地址作为源地址。RIPng的进程名是一个自定义标签比如ipv6 router rip NG里的NG这个标签只是本地有意义不需要和其他设备保持一致。RIPv2和RIPng完全不兼容一个接口要么跑RIPv2要么跑RIPng不能混着来。跳数限制决定了RIPng只适合小型网络。网络直径超过15跳就不要考虑它了老老实实上OSPFv3或者IS-IS。3.2 三步完成RIPng配置配置RIPng的流程可以概括为三步创建进程、接口启用、验证邻居。下面是完整配置示例以两台路由器为例Router A: ! ipv6 unicast-routing ! interface GigabitEthernet0/0 ipv6 address 2001:db8:1:1::1/64 ipv6 address FE80::1 link-local ipv6 rip NG enable ! interface GigabitEthernet0/1 ipv6 address 2001:db8:10:1::1/64 ipv6 address FE80::1 link-local ipv6 rip NG enable ! ipv6 router rip NGRouter B: ! ipv6 unicast-routing ! interface GigabitEthernet0/0 ipv6 address 2001:db8:1:1::2/64 ipv6 address FE80::2 link-local ipv6 rip NG enable ! interface GigabitEthernet0/1 ipv6 address 2001:db8:20:1::1/64 ipv6 address FE80::1 link-local ipv6 rip NG enable ! ipv6 router rip NG注意两台路由器的进程标签都用了NG其实可以不一样路由器之间不会因为这个标签不一致而拒绝建立邻居关系这个标签纯粹是本地管理用途。配置完成以后可以用下面几条命令验证Router# show ipv6 rip Router# show ipv6 rip database Router# show ipv6 route rip如果邻居关系建立了路由表里会出现以R开头的IPv6路由条目表示来自RIPng。3.3 RIPng的坑接口多时别全局debugRIPng配置简单但有个实际运维中的坑要提一下。有次我在设备上排查一个RIPng路由不更新的问题敲了debug ipv6 rip结果那台路由器接了十几个接口debug输出瞬间把控制台刷到卡死最后不得不重启设备恢复。正确做法是如果确实要抓RIPng报文优先用debug ipv6 rip配合access-list做过滤或者直接在接口上抓包分析而不是全局开debug。另外RIPng的更新周期是30秒如果配置了接口的ipv6 rip hop-count等参数注意不要调得太激进否则会加重链路负担。还有一个常见问题接口上如果配了IPv4的ACL或者组播过滤策略可能会导致RIPng的组播报文FF02::9被丢弃表现为邻居关系始终起不来。排查时优先检查接口下的入向策略这是现场实测过的一个经典案例。4. OSPFv3生产环境最常用的IGPOSPFv3是目前思科设备上部署IPv6最常用的IGP协议没有之一。但要注意OSPFv3并不是简单地把OSPFv2的地址从IPv4换成IPv6它在协议机制和配置方式上都有实质变化。这一节把OSPFv3的配置拆开揉碎讲清楚。4.1 OSPFv3与OSPFv2的真正区别OSPFv2和OSPFv3共享很多核心概念区域、SPF算法、LSA泛洪、DR/BDR选举这些都一样。但两者在运行机制上有关键差异第一OSPFv2通过network命令宣告网段OSPFv3没有network命令改为在接口上直接挂区域格式是ospfv3 进程号 ipv6 area 区域号。第二OSPFv3的Router ID字段依然是32位格式沿用了IPv4的点分十进制写法。由于IPv6地址是128位无法直接作为Router ID所以必须手工配置Router ID。这是一个非常关键的差异如果不配置Router IDOSPFv3进程会直接报错%OSPFv3-4-NORTRID: OSPFv3 process could not pick a router-id. Please configure manual router-id.第三OSPFv3的认证机制改为基于IPsec接口上没有ipv6 ospf authentication这种简单密码认证命令了。不过这属于高级配置日常场景可以不用关心。第四OSPFv3天然支持多地址族这也是为什么新版IOS推荐用router ospfv3命名模式可以把IPv4和IPv6的OSPF配置放在同一个进程下。4.2 OSPFv3完整配置示例以经典模式为例三台路由器组成的简单OSPFv3网络Router A核心: ! ipv6 unicast-routing ! interface GigabitEthernet0/0 ipv6 address 2001:db8:1:1::1/64 ipv6 address FE80::1 link-local ipv6 ospf 1 area 0 ! interface GigabitEthernet0/1 ipv6 address 2001:db8:1:2::1/64 ipv6 address FE80::1 link-local ipv6 ospf 1 area 0 ! ipv6 router ospf 1 router-id 1.1.1.1Router B分支1: ! ipv6 unicast-routing ! interface GigabitEthernet0/0 ipv6 address 2001:db8:1:2::2/64 ipv6 address FE80::2 link-local ipv6 ospf 1 area 0 ! interface GigabitEthernet0/1 ipv6 address 2001:db8:20:1::1/64 ipv6 address FE80::1 link-local ipv6 ospf 1 area 1 ! ipv6 router ospf 1 router-id 2.2.2.2新版本的IOS XE还支持命名模式的OSPFv3配置方式有所不同Router(config)# router ospfv3 1 Router(config-router)# router-id 1.1.1.1 Router(config-router)# address-family ipv6 unicast Router(config-router-af)# exit-address-family Router(config-router)# exit Router(config)# interface GigabitEthernet0/0 Router(config-if)# ospfv3 1 ipv6 area 0命名模式的好处是OSPFv3进程可以同时管理IPv4和IPv6地址族未来网络演进空间更大。如果你的设备IOS版本支持我建议直接用命名模式如果现场设备还跑着老版本IOS用ipv6 router ospf经典模式也一样能完成工作关键是Router ID一定要手工配置。还有一个小技巧在点对点以太网链路上可以在接口下敲ipv6 ospf network point-to-point把接口类型改成point-to-point这样可以避免DR/BDR选举邻居建立速度更快网络收敛也更快。这个优化在生产环境很实用。4.3 OSPFv3排错三板斧OSPFv3排错我一般按下面这个顺序来先看邻居表Router# show ipv6 ospf neighbor正常状态下邻居状态应该是FULL/DR、FULL/BDR或者FULL/-。如果看到INIT、EXSTART或者EXCHANGE状态说明邻居关系建立不完整。再看接口状态Router# show ipv6 ospf interface确认接口处于哪个区域、网络类型是什么、cost值是多少有没有收到对端Hello报文。最后用debug抓邻居状态变化Router# debug ipv6 ospf adj现场排查时优先看前两步因为debug输出量大容易干扰判断。如果前两步都正常再用debug对着看状态机切换定位会更准。5. EIGRP for IPv6思科私有协议照样能跑虽然现在很多网络都在规划去思科化但存量市场里EIGRP的使用量依然不小。EIGRP for IPv6的配置思路和IPv4版本差异很大有几个细节必须单独提醒。5.1 EIGRP for IPv6的三大变化对比IPv4版本的EIGRPIPv6版本的EIGRP有三个明显变化第一EIGRP for IPv6没有network命令不需要在进程下宣告网段改成直接在接口下启用ipv6 eigrp 进程号。第二EIGRP for IPv6进程默认处于shutdown状态必须在进程视图下手动执行no shutdown命令否则进程不会运行。这个坑非常隐蔽配置完接口、敲完邻居相关的所有命令结果邻居死活起不来查了半天发现进程默认关闭那种感受谁经历谁知道。第三EIGRP for IPv6会自动从本地IPv6地址推导Router ID默认情况下不需要手工配置。但如果你在配置过程中看到Router ID生成的提示信息说明当前设备的Router ID可能是从链路本地地址推导出来的链路本地地址变化会导致Router ID变化影响邻居稳定性。所以生产环境我依然建议手工指定Router ID格式同样沿用IPv4点分十进制。5.2 四条命令拉起EIGRP进程配置EIGRP for IPv6其实很简单核心就四条命令Router(config)# ipv6 router eigrp 100 Router(config-rtr)# router-id 3.3.3.3 Router(config-rtr)# no shutdown Router(config-rtr)# exit Router(config)# interface GigabitEthernet0/0 Router(config-if)# ipv6 eigrp 100注意进程号100是和IPv4 EIGRP共用的自治系统号如果同一台设备上IPv4 EIGRP用了100IPv6 EIGRP建议保持一致方便维护互不冲突。配置完成后验证命令Router# show ipv6 eigrp neighbors Router# show ipv6 eigrp topology Router# show ipv6 route eigrp如果邻居状态显示为PPassive说明拓扑收敛正常。5.3 命名模式EIGRP的新写法新版IOS支持命名模式的EIGRP配置把IPv4和IPv6地址族统一到一个进程下管理Router(config)# router eigrp EXPRESS Router(config-router)# address-family ipv6 Router(config-router-af)# autonomous-system 100 Router(config-router-af)# router-id 3.3.3.3 Router(config-router-af)# exit-address-family Router(config-router)# exit Router(config)# interface GigabitEthernet0/0 Router(config-if)# ipv6 eigrp EXPRESS命名模式的优点是可以给EIGRP进程起一个有意义的名字而不是用数字编号同时在同一个进程下管理多个地址族。老设备不支持的话用经典模式也没问题。两种模式下K值、metric计算方式、汇总和过滤机制都和IPv4版本保持一致工程师上手成本很低。6. BGP4出口和对接场景的主力如果网络需要和ISP对接或者承载大规模路由OSPFv3和EIGRP就不够看了这时候只能用BGP4。BGP4是BGP-4的IPv6扩展在思科路由器上的配置方式和IPv4 BGP差异也比较明显。6.1 BGP4基础配置先看一个最基础的EBGP配置示例。两台路由器直连AS号分别是65001和65002Router A: ! ipv6 unicast-routing ! interface GigabitEthernet0/0 ipv6 address 2001:db8:10:1::1/64 ipv6 address FE80::1 link-local ! router bgp 65001 bgp router-id 1.1.1.1 neighbor 2001:db8:10:1::2 remote-as 65002 address-family ipv6 neighbor 2001:db8:10:1::2 activate network 2001:db8:100::/48 exit-address-familyRouter B: ! ipv6 unicast-routing ! interface GigabitEthernet0/0 ipv6 address 2001:db8:10:1::2/64 ipv6 address FE80::2 link-local ! router bgp 65002 bgp router-id 2.2.2.2 neighbor 2001:db8:10:1::1 remote-as 65001 address-family ipv6 neighbor 2001:db8:10:1::1 activate exit-address-family和IPv4 BGP相比最关键的差异在于配置完邻居后必须在address-family ipv6视图下对这个邻居执行activate命令否则BGP不会在这个邻居上交换IPv6路由。同理如果你想在两个IPv6邻居之间同时交换IPv4和IPv6路由需要在两个地址族下都执行activate。6.2 双栈BGP同时传递IPv4和IPv6路由双栈环境下两个邻居之间往往既要传IPv4路由又要传IPv6路由。配置思路是这样的Router(config)# router bgp 65001 Router(config-router)# bgp router-id 1.1.1.1 Router(config-router)# neighbor 2001:db8:10:1::2 remote-as 65002 Router(config-router)# address-family ipv4 Router(config-router-af)# neighbor 2001:db8:10:1::2 activate Router(config-router-af)# exit-address-family Router(config-router)# address-family ipv6 Router(config-router-af)# neighbor 2001:db8:10:1::2 activate Router(config-router-af)# exit-address-family在这个场景里IPv6地址既是BGP会话的传输地址又同时承载IPv4和IPv6两个地址族的路由。要注意的是IPv4单播地址族默认会把所有邻居自动激活而IPv6地址族不会。所以配置的重点是要确保在ipv4地址族下没有多余激活、在ipv6地址族下显式激活。验证命令Router# show bgp ipv6 unicast summary Router# show bgp ipv6 unicast在输出里可以看到邻居的AS号、收发报文计数以及IPv6前缀数量。6.3 BGP在IPv6下的选路和策略BGP4的选路原理和IPv4 BGP完全一致Weight、Local Preference、AS Path、Origin、MED、EBGP优于IBGP依次比较。所以在IPv6地址族下做路径控制用的也是set local-preference、set as-path prepend这些route-map工具。举个实际例子在边界路由器上只允许接收某一段IPv6前缀可以用前缀列表Router(config)# ipv6 prefix-list FILTER_V6 seq 5 permit 2001:db8:200::/40 le 48 Router(config)# ipv6 prefix-list FILTER_V6 seq 10 deny ::/0 le 128 Router(config)# router bgp 65001 Router(config-router)# address-family ipv6 Router(config-router-af)# neighbor 2001:db8:10:1::2 prefix-list FILTER_V6 in Router(config-router-af)# exit-address-family关于BGP还有一个容易忽略的点IPv6的下一跳属性是128位地址在EBGP场景下默认会把下一跳改成通告者自己的地址在IBGP场景下如果路由是从EBGP学来的默认不修改下一跳可能需要配合next-hop-self来修正。这个和IPv4行为一致容易忽视但很关键。7. 多协议重分发别把生产环境搞成环路很多网络不是单一协议跑到底的尤其是改造期核心跑OSPFv3分支可能还残留RIPng出口接了BGP这时候就需要重分发把不同协议的路由互相引进来。IPv6环境下的重分发命令和IPv4的思路相通但有几个细节要特别留意。7.1 IPv6重分发配置示例把静态路由重分发进OSPFv3Router(config)# router ospfv3 1 Router(config-router)# address-family ipv6 unicast Router(config-router-af)# redistribute static metric 20 Router(config-router-af)# exit-address-family把BGP路由重分发进OSPFv3Router(config-router-af)# redistribute bgp 65001 metric 20把RIPng路由重分发进OSPFv3Router(config-router-af)# redistribute ripng NG metric 20OSPFv3的重分发和OSPFv2有个区别OSPFv2里重分发进OSPF需要带subnets关键字才能宣告非主网段路由但OSPFv3本身就没有子网掩码这个说法所以不需要带subnets关键字直接写metric就行。把OSPFv3重分发进RIPng的写法Router(config)# ipv6 router rip NG Router(config-rtr)# redistribute ospf 1 metric 3这里的ospf 1对应的是OSPFv3进程号1。注意RIPng的种子metric直接影响跳数如果OSPF域直径比较大重分发进来的路由很容易在RIPng域内超过15跳限制配置前务必估算好网络直径。7.2 重分发后的管理距离与选路影响重分发之后最容易出现的问题是路由回灌导致环路。比如核心路由器同时跑OSPFv3和RIPng两边都重分发如果两边都学到了同一条前缀路由器会根据管理距离选路。IPv6下各协议的管理距离和IPv4一致直连路由0静态路由1EIGRP内部90OSPFv3110IS-IS115RIPng120EIGRP外部170BGP内部200BGP外部20这个表在排错时非常重要。比如在同时运行OSPFv3和RIPng的边界设备上OSPFv3的管理距离更小路由器会优先选OSPFv3的路由如果这条OSPFv3路由又是通过重分发从RIPng学来的就可能出现路由优先级倒挂和回灌的隐患。真实项目中这种问题往往表现为数据包绕远路甚至时通时不通排查起来很费劲。7.3 重分发的三条经验建议第一能用单一协议就不要上重分发。改造期间临时用一下可以正式运行环境尽量收敛到单一IGP协议。第二重分发方向要单向控制。比如只允许OSPFv3重分发进BGP不允许BGP主动重分发进OSPFv3全靠默认路由兜底这样可以避免大范围路由震荡。第三所有重分发点必须做路由过滤。用route-map配合ipv6 prefix-list精确控制哪些前缀能进来。比如只允许内部前缀进入BGP外部前缀用默认路由覆盖。过滤规则宁紧勿松这是生产环境的铁律。8. 排错速查IPv6路由协议排查工具与经典故障这一节把我常用的IPv6排错命令和这次改造中遇到的几个经典故障整理成速查手册平时配置的时候也可以对照着用。8.1 常用show命令速查表下面的表格是我在排障时最常用的一组命令按场景分类方便快速定位排查目标命令输出重点接口IPv6状态show ipv6 interface brief每个接口的地址和状态IPv6邻居表show ipv6 neighbors链路层地址和IPv6地址映射IPv6路由表show ipv6 route各协议路由条目及来源编码IPv6转发状态show ipv6 unicast-routing确认IPv6转发是否全局开启RIPng状态show ipv6 rip databaseRIPng路由数据库OSPFv3邻居show ipv6 ospf neighbor邻居状态和Router IDOSPFv3链路状态show ipv6 ospf databaseLSDB内容EIGRP邻居show ipv6 eigrp neighborsEIGRP邻居关系EIGRP拓扑show ipv6 eigrp topologyEIGRP拓扑表BGP邻居show bgp ipv6 unicast summaryBGP邻居状态和前缀数BGP路由show bgp ipv6 unicastBGP IPv6路由表IPv6协议配置show ipv6 protocols各路由协议运行状态汇总8.2 五个经典故障实录这里挑五个实际项目中遇到的典型问题每个都给了排查思路和解决方案。故障一OSPFv3邻居无法建立日志报NORTRID现象OSPFv3进程起来之后邻居一直停留在DOWN状态设备日志出现%OSPFv3-4-NORTRID报错。原因OSPFv3的Router ID是32位字段不能从IPv6地址自动生成必须手工配置。设备上没有配置router-id进程无法正常工作。解决在OSPFv3进程中配置router-id 1.1.1.1注意选择全网唯一且稳定的ID。故障二OSPFv3邻居状态卡在EXSTART/EXCHANGE现象邻居状态始终停在EXSTART或EXCHANGE无法达到FULL。原因绝大部分情况是链路两端MTU不一致。OSPFv3的Hello报文交互时如果对端发出的Database Description报文超过本端MTU报文被丢弃邻居关系就卡在数据库描述阶段。解决检查接口MTU配置保证链路两端一致。临时可以用ipv6 ospf mtu-ignore绕过但生产环境不建议长期开启正确做法是统一MTU规划。故障三RIPng邻居起来了但路由不更新现象show ipv6 rip database看到部分路由缺失但邻居状态正常。原因RIPng使用组播地址FF02::9发送更新链路上如果有组播过滤或者ACL把FF02::9丢弃就会导致更新报文收不到。解决检查接口下的ACL和组播策略确认没有过滤FF02::9。如果开了IPv4的组播路由也要确认不会影响IPv6组播。故障四IPv6静态路由配完却不生效现象show ipv6 route能看到静态路由条目但状态一直是standby或者完全不转发流量。原因最常见的原因是漏配了ipv6 unicast-routing。没有这条命令路由器不会查找IPv6路由表转发报文。还有一个可能静态路由的下一跳不可达比如下一跳写了对端设备的链路本地地址但没给出接口。解决先确认ipv6 unicast-routing已开启再用ping ipv6测试下一跳可达性最后检查静态路由的下一跳和出接口是否匹配。故障五BGP邻居建立不起来现象show bgp ipv6 unicast summary显示邻居IDLE状态。原因排查步骤比较多按顺序来先确认基础连通性能不能ping通对端IPv6地址再确认AS号配置是否正确然后确认在address-family ipv6下对邻居执行了activate最后检查是否配置了ebgp-multihop非直连EBGP场景才需要。解决三步走完之后用debug bgp ipv6 unicast观察收发的Open报文基本能定位问题。8.3 日常运维的几条经验小结最后分享几条我在这类项目中沉淀下来的实践经验不一定写在官方文档里但很管用。第一链路本地地址一定要规划。不管是OSPFv3、RIPng还是BGP4邻居报文大量使用链路本地地址规划好后排错效率翻倍。第二部署IPv6前先画好地址规划表。哪些段分配给业务、哪些段分配给网络设备互联、哪些段分配给管理都要提前定好。否则现场一边配地址一边查表效率很低。第三配置完一个功能就立刻验证不要攒着一起测。我在现场的习惯是接口配完马上ping协议起来马上看邻居表路由学过来马上traceroute。实践证明这样能最快定位是配置问题还是链路问题。第四保存配置并留档。IPv6改造项目涉及的命令多、细节多每台设备配置完成后务必write memory保存并把配置文档归档方便后续变更和排错。第五千万别忽略日志。很多邻居起不来的问题设备日志里写得明明白白比如OSPFv3的NORTRID提示一眼就能定位。养成看日志的习惯能省下大量时间。这次改造项目最终顺利交付网络切到双栈后IPv4业务和IPv6业务都稳定运行。回到开头那句话配置IPv6路由协议本身不难难的是理解每个协议在IPv6下的思路差异和那些不起眼的细节。希望这份配置和排错总结能帮你在做IPv6改造时少踩几个坑。
返回列表