ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

MGRE隧道与RIP动态路由:分支互联组网实验及排错全解

MGRE隧道与RIP动态路由:分支互联组网实验及排错全解 做企业网络这行久了你会发现一个规律凡是跟“多分支互联”挂钩的组网需求最后多半绕不开隧道和动态路由。华为HCIP里那个经典的MGRE隧道实验我前前后后复现过很多次每次都有新体会。它看起来只是“隧道RIP”的组合但真正操作下来NHRP注册、水平分割、单播邻居这几个点随便哪一个踩不准整张路由表就是建不起来。这篇文章把整个实验从拓扑规划、地址设计到排错细节全部过一遍给正在准备HCIP或者手里正好有分支互访需求的人一个可以直接照着做的参考。1. 实验需求与整体设计思路1.1 为什么不是传统GRE而是MGRE传统GRE隧道是点对点的逻辑链路两端都得写死对端的公网地址。中心节点加两个分支组网还勉强能接受可一旦分支数量上来隧道数量就是组合数级别的增长。10个分支要建45条隧道每加一个新节点所有老节点都要跟着改配置。真到生产环境里这种方案光维护成本就能把运维团队拖垮。MGRE把这个问题简化了。它的核心思想是“多点GRE”逻辑上每个节点只需要一个Tunnel接口分支节点只要知道中心节点的公网地址就能通过NHRP协议动态注册和学习映射关系。分支之间的通信不依赖预先手工建立的隧道而是靠NHRP动态解析流量先绕行中心节点后续再建立直连隧道。配置量从几十条降到每节点几条新增节点时只需要改新节点自己老节点几乎不用动。这才是实际项目里选MGRE而不是一堆GRE隧道的主要原因。另外考试和实际工作还有个区别。考试里拓扑固定写几台设备就行真实项目里分支数量、网络规模、流量模型都是变量。设计时先搞清楚分支间到底有多少东西向流量再决定要不要让分支之间直接通信这个判断直接影响NHRP服务器的参数调整思路。数据规划永远在配置命令之前顺序不能颠倒。1.2 实验拓扑与地址规划实验环境用一个典型的Hub-Spoke结构R1作为中心节点R2和R3是两个分支节点。三台设备的公网接口连接到模拟运营商的物理网络环回接口模拟各节点的内部业务网段。为了让分支间能看到彼此的环回路由隧道之上运行RIPv2。设备公网接口地址环回接口地址角色说明R1202.100.1.1/2410.1.1.1/24中心节点NHRP ServerR2202.100.1.2/2410.1.1.2/24分支节点NHRP ClientR3202.100.1.3/2410.1.1.3/24分支节点NHRP Client隧道接口统一规划在10.1.1.0/24网段掩码按24位配置。这个细节不少教程会忽略不同实验拓扑里隧道地址的掩码可以选24位也可以选32位加主机路由。实验环境里选24位最直观路由表里能直接看到网段路由排查起来省事生产环境为了收敛控制更精细常用32位主机路由搭配路由协议逐条宣告。两种思路没有对错按场景取舍即可。地址规划还有一个容易忽略的点公网接口和隧道接口尽量别复用同一段地址否则路由表里容易产生混淆。公网段用202.100.1.0/24隧道段用10.1.1.0/24两个网段分开写后面配置RIP的时候宣告关系也会清晰得多。1.3 隧道之上为什么要跑RIP隧道只是承载数据的通道它自身不具备学习路由的能力。分支节点的环回网段怎么让其他节点知道必须依靠路由协议。在HCIP的实验场景里选RIP的原因很直白配置简单、概念直观而且它能很清楚地展示动态路由协议在NBMA网络上会遇到什么问题。RIP默认用广播或组播地址224.0.0.9发送更新报文。MGRE隧道本质上是NBMA网络它没有以太网那种天然的广播能力。组播报文发到Tunnel口设备不知道应该复制给哪些分支除非有NHRP映射表告诉它“哪些地址属于这个组播组”。这正是MGRE和RIP组合起来最值得玩味的地方。配置时如果忘了让RIP适配NBMA环境路由更新根本送不到对端。从学习角度看先把RIP在NBMA上的这些坑踩一遍再去理解OSPF在不同网络类型下的行为变化会轻松很多。底层NHRP的机制是相通的只是路由协议的适应方式不同。2. 基础配置先把物理层和公网链路打通2.1 接口IP与环回口配置所有配置从最底层开始。R1的物理接口和环回口配置如下system-view sysname R1 interface GigabitEthernet0/0/0 ip address 202.100.1.1 24 interface LoopBack0 ip address 10.1.1.1 24R2和R3的配置类似只需把地址换成202.100.1.2和202.100.1.3环回地址换成10.1.1.2和10.1.1.3。配置完以后先别急着配隧道用display ip interface brief检查一下接口状态确认物理接口都是up的。环回接口是逻辑接口只要设备不宕它就永远在线。用它来模拟分支内部的业务网段很合适因为真实网络里分部服务器的网关地址往往就落在某个内部网段上环回口在这里起到“锚点”的作用。2.2 公网静态路由与连通性验证实验环境里的“公网”通常会放一台模拟运营商的设备把三个站点的物理接口串起来。要让全网物理层面互通必须配置静态路由。以R1为例假设模拟运营商设备的接口地址是202.100.1.254R2和R3的物理网段分别是202.100.1.2/32和202.100.1.3/32需要这样写ip route-static 202.100.1.2 32 202.100.1.254 ip route-static 202.100.1.3 32 202.100.1.254R2和R3上对称地写去往其他物理网段的静态路由。写完以后在R1上分别ping R2和R3的物理接口地址确认全通。这里要单独强调一句物理层不通后面所有工作都没有意义。我见过有人上来先配隧道Tunnel口配了半天状态还是down最后发现是源接口IP地址写错了或者物理链路根本没通。检查顺序永远是“物理层→隧道层→路由层”跳过哪一步都会把排查时间拉长。2.3 物理网段与隧道网段的关系很多第一次接触MGRE的人总会在“Tunnel地址”和“物理接口地址”的关系上绕晕。简单理解物理接口地址是封装报文在公网传输时使用的真实源地址Tunnel地址是隧道内部的逻辑地址相当于隧道两端设备互相“打招呼”时用的名字。配置MGRE时source参数必须指向一个真实存在且状态正常的接口地址它决定了隧道报文从哪个物理接口发出去。如果source地址配成了一个不存在的地址Tunnel接口的协议状态会直接down因为设备根本找不到正确的发送路径。这个参数的重要性在排错环节会体现得特别明显。3. MGRE隧道配置核心流程3.1 中心节点NHRP Server配置R1是整个MGRE网络的协调者它需要被配置成NHRP服务器。R1的Tunnel口配置如下interface Tunnel0/0/1 ip address 10.1.1.1 24 tunnel-protocol gre p2mp source 202.100.1.1 nhrp enable nhrp network-id 100 nhrp entry multicast dynamic nhrp server 10.1.1.1 nhrp redirect逐个拆解这些命令的作用tunnel-protocol gre p2mp这是把Tunnel口变成“多点GRE网络接口”的关键命令。如果这一行没配Tunnel口默认是点对点GRE模式NHRP机制根本不会生效后面的配置形同虚设。nhrp network-id 100NHRP域的标识所有加入同一个MGRE网络的设备必须配置相同的network-id就像RIP进程号一样不一致就无法互相识别。nhrp entry multicast dynamic让NHRP学到的对端动态加入组播复制列表。RIP的组播更新报文到达Tunnel口后设备根据这个配置把报文复制并封装给所有已知的NHRP对端。nhrp server 10.1.1.1宣告自己是NHRP服务器分支节点的注册请求会发到这里。nhrp redirect开启重定向功能。当分支与分支之间的首个数据包到达中心后中心会以重定向消息告知发送端“对端其实在某某地址”触发后续直连隧道的建立。3.2 分支节点NHRP注册配置R2的Tunnel口配置如下interface Tunnel0/0/1 ip address 10.1.1.2 24 tunnel-protocol gre p2mp source 202.100.1.2 destination 202.100.1.1 nhrp enable nhrp network-id 100 nhrp entry multicast dynamic nhrp nhs 10.1.1.1R3的配置只改IP和源地址其他保持一致。分支节点与中心节点最大的配置区别在于destination参数分支需要明确指定目的地指向中心的物理IP而中心不需要配置固定的destination它要被动接收所有分支的注册请求。分支上的nhrp nhs用来指定NHRP服务器地址。注册成功后分支会把自己隧道地址和公网地址的映射关系上报给中心。此时在R1上执行display nhrp peer能看到两条对端记录10.1.1.2对应202.100.1.210.1.1.3对应202.100.1.3。3.3 隧道连通性与NHRP表验证配置完成后先在分支R2上ping中心的隧道地址ping 10.1.1.1如果通说明隧道基本建立。如果ping不通依次检查三层内容Tunnel口状态、NHRP映射表、隧道封装信息。一个常见的“假死”状态Tunnel口显示up但ping不通对端。原因是NHRP映射没有成功建立或者封装后的报文在物理网络上找不到正确的路径。Tunnel状态up只代表接口协议状态起来了跟数据转发是否畅通完全是两码事。这种细节在排错时极容易误导人一定要先看display nhrp peer确认对端映射存在再判断数据面问题。分支之间首次互ping时还有一个很有趣的现象第一个包会超时第二个包才通。原因在于分支之间没有先建立NHRP映射前一个包到达中心后中心利用重定向功能告诉源端对端真实地址源端再动态创建直连隧道。整个过程多了一轮协议交互所以首次延迟是协议设计的一部分不是故障。4. RIP协议与MGRE的集成配置4.1 RIP进程配置与宣告细节隧道通起来之后才开始进入路由协议环节。R1的RIP配置如下rip 1 version 2 peer 10.1.1.2 peer 10.1.1.3 network 10.0.0.0 network 202.100.1.0R2和R3类似peer改成中心的隧道地址10.1.1.1network宣告自己的物理网段和隧道网段。关于宣告网段有一个RIP的老特性必须留意RIP的network命令是有类宣告不是无类宣告。网络地址10.1.1.0/24属于A类地址宣告时要写10.0.0.0202.100.1.0是C类地址宣告时写202.100.1.0。如果误把10.1.1.0当作宣告对象RIP不会匹配任何接口路由直接学不到。物理网段必须宣告进来吗建议宣告。RIP默认会在宣告网段对应的接口上收发更新。如果隧道源所在的物理接口没有被宣告进RIP该接口会处于抑制状态不参与RIP更新这可能间接影响隧道报文的处理。实验里把物理网段一并宣告能减少很多奇怪的现象。4.2 水平分割问题详解这是整个实验的核心难点。RIP为了防止环路默认开启水平分割规则从一个接口学到的路由不会再从同一个接口发回去。在点到点链路上这样的设计非常合理。但MGRE隧道接口是典型的多点接口中心节点R1从Tunnel口收到R2发布的环回路由10.1.1.2/24之后因为水平分割的限制它不会把这条路由再从同一个Tunnel口发给R3。结果就是R3的RIP路由表里永远没有10.1.1.2这一条分支之间看似在同一张网里实际上互不可达。解决办法是在中心节点的Tunnel接口下关闭水平分割interface Tunnel0/0/1 undo rip split-horizon关闭之后中心节点才允许把从Tunnel口学到的路由再次从Tunnel口发送出去R3才能学到R2的环回路由。这个命令只影响RIP的路由更新行为不影响其他协议在实验环境里可以放心使用。4.3 单播邻居与NBMA适配RIP默认依赖组播更新但在NBMA网络上组播报文能不能到达所有分支取决于NHRP的组播映射表动态复制是否完整。依赖这个机制虽然能工作但分支多了以后中心节点要复制多份组播封装开销大排错也不直观。此时更推荐的做法是用RIP的peer命令显式指定邻居让RIP为指定对端单独发送单播更新。在中心节点配置peer指向两个分支在分支节点配置peer指向中心组播、单播双通道都建立起来了路由更新就有了双重保障。需要说明的是peer命令不会自动替代组播更新两者会并存。如果希望减少不必要的更新报文可以配合接口下的RIP抑制命令把物理接口上无关的更新收发停掉只保留Tunnel口上的更新通道。4.4 路由学习验证配置完成后在R2上执行display rip 1 route理想情况下能看到三条路由10.1.1.1/24中心环回、10.1.1.3/24R3环回、10.1.1.0/24隧道网段。再通过ping 10.1.1.3确认分支间互通。如果R3的路由没学到优先查看两个位置中心节点是否执行了undo rip split-horizonR3的RIP邻居状态是否为up。用display rip neighbor可以快速确认邻居关系如果邻居都没建立多半是组播更新没被NHRP成功复制或者peer地址指向有误。5. 常见问题与排错技巧实录5.1 NHRP注册失败中心节点看不到分支现象是分支的Tunnel接口状态正常但中心节点执行display nhrp peer时看不到任何分支记录。排查按顺序走确认分支的destination指向中心节点的物理接口地址202.100.1.1而不是中心隧道地址10.1.1.1。确认三台设备的nhrp network-id完全一致。确认分支到中心的物理链路可达ping 202.100.1.1必须通。如果以上都没问题在中心Tunnel口抓包看NHRP注册报文是否到达。真实环境里踩过一个比较隐蔽的坑中心设备上创建了多个Tunnel口其中一个的network-id配错分支注册请求发到了错误的NHRP域分支自身显示注册成功但中心正确的Tunnel口下根本没有任何映射。这类问题不逐项核对network-id很容易被状态信息迷惑。5.2 RIP路由不完整只能看到部分路由同样分两种常见情况。第一种分支能看到中心的路由但看不到另一个分支的路由。十有八九是水平分割没处理在中心Tunnel口执行undo rip split-horizon等待RIP的更新周期和抑制时间大约60秒内会收敛刷新路由表看结果。第二种所有路由都学不到。先看RIP邻居状态如果display rip neighbor里根本没有对端记录说明更新报文没送达。检查peer地址、Tunnel口互ping、物理接口上的RIP宣告是否遗漏按层排查。这里有个容易被忽略的细节改完水平分割之后RIP老路由不会立刻消失要等垃圾收集计时器到期大约120秒。技术上这是协议的正常行为所以改完配置别急着反复查看等两分钟再看才是正确姿势。5.3 分支间先ping超时后ping通这个现象前面提到过属于NHRP的首次触发解析。分支之间没有预先建立的映射关系第一个数据包经过中心转发并触发重定向源端再动态解析对端真实地址。整个过程需要额外一轮交互所以第一个包丢失、第二个包恢复是协议机制的正常表现。如果确实不能容忍首包延迟可以在分支上静态指定NHRP映射nhrp entry 10.1.1.3 202.100.1.3这样分支之间第一次通信就能直接封装转发。但代价是每增加一个分支节点都要手动补一条静态映射配置管理负担回升。实际组网里我倾向保留动态解析让NHRP自己学习配置最小化容错也更好。5.4 隧道状态up但隧道IP互ping不通现象是Tunnel接口状态显示up两端物理地址都能ping通但隧道地址互相ping失败。这类问题多数出在source参数配置。如果source指定了一个状态down的接口Tunnel口会跟着down但source若指定的接口up但地址并非本机所有就会产生封装地址错误报文发出后对端无法正确解封装。排查时用display tunnel-info all查看隧道封装信息确认源地址是否为本机真实接口地址。必要时可以打开隧道调试信息观察建立过程但看完立刻关闭避免日志刷屏影响设备操作。这是经验之谈调试信息在模拟器环境下尤其容易干扰后续操作。6. 实验扩展与个人体会这套实验做完千万别急着收工。建议做两个扩展方向。一是把RIP替换成OSPF。OSPF在MGRE上的配置复杂度比RIP明显提高需要处理网络类型从NBMA改成broadcast或p2mp的问题还要考虑DR/BDR选举。但只要你理解了RIP在NBMA上的痛点和调整思路迁移到OSPF时会发现底层逻辑高度一致学习成本会降低不少。二是把分支节点数量增加从2个扩展到6到8个观察中心节点NHRP映射表的增长曲线以及RIP路由收敛时间的变化。实际测试下来RIP的30秒更新周期加上水平分割的适配分支越多收敛越慢这也是很多真实项目最终选择OSPF或BGP的原因。但小规模部署时RIP确实是最简单可靠的方案理解好它的边界比追求所谓“更先进”的协议更有价值。我个人在这组实验里最深的一个体会是网络排错必须分层处理。物理不通就查物理隧道不通就查NHRP和封装路由不通就查路由协议本身。不要从中间层开始跳每层验证通过后再往上走整个排查过程会清晰很多。这个实验我先后复现了三次每一次都能在某个细节上发现新的盲区大概是因为这些协议机制只有在真实交互中才会显露出它们的复杂性。
返回列表