ARTICLE DETAIL

资讯详情

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

HCIP必备:MGRE实验从配置到排错全解析

HCIP必备:MGRE实验从配置到排错全解析 1. 先把这个实验做通HCIP才算真正入了门很多考HCIP数通方向的朋友学到中后期都会在MGRE实验上卡一阵子。明明配置看着都对隧道接口也up了可路由协议就是建立不起来一查资料发现牵扯到NHRP的注册、解析还有OSPF网络类型的问题一折腾就是一下午。我当年备考的时候也在这个实验上栽过跟头后来排错排多了把里面的门道摸透了才发现MGRE这个知识点其实非常有意思它把GRE隧道、NHRP动态解析、路由协议联动这三块内容串在了一起是HCIP里很能锻炼排错思维的一个实验。MGRE全称是Multipoint GRE多点GRE隧道。它解决的核心问题是在一个Hub-Spoke组网下总部只需要配置一个Tunnel接口就能跟所有分支建立GRE隧道。这和传统的点到点GRE完全不一样——传统GRE每条隧道都要单独配置分支一多总部的配置量直接翻倍管理起来非常痛苦。MGRE配合NHRP下一跳解析协议让分支节点能够动态注册自己的公网地址总部再也不用为新增分支改配置了这是它在实际组网里最有价值的地方。这篇内容我会完整拆解一个MGRE实验从拓扑设计到配置落地的全过程把NHRP的原理、OSPF与隧道联动的注意事项、还有我踩过的坑都讲清楚。如果你正在备考HCIP或者工作中在做分支互联组网这篇文章应该能让你少走不少弯路。实验本身不算难但细节特别多理解了背后的逻辑配置起来就是水到渠成的事。2. 理解MGRE的设计思路比上手敲命令更重要2.1 先搞清楚它跟普通GRE的区别普通GRE是点到点的隧道一台设备跟一台设备建立隧道逻辑上就像拉了一条虚拟专线。假设你有1个总部、10个分支用普通GRE就得在总部建10条隧道每一条都要写目的地址、配置独立的Tunnel接口、跑独立的路由邻居关系。分支增加到20个呢再配10条。这种模式在分支数量少的时候没问题但网络规模一大配置量、维护量、故障点全都上来了。MGRE的思路就完全不一样。总部只创建一个Tunnel接口接口模式设置为多点然后这个接口就能同时跟所有分支建立隧道。分支增加时总部配置不用动只要新分支在自身设备上配置好MGRE并指向总部NHRP会自动完成注册总部就能感知到这个新分支的公网地址。这种一个口接所有人的设计大大降低了Hub端的配置复杂度也让分支的动态加入、离开变得非常灵活。我习惯用一个类比来理解普通GRE就像你手机通讯录里手动存号码来一个新朋友就手动加一条MGRE就像大家都加同一个群群里的人自动共享名片新人进群自动发一遍自我介绍群里其他人就都认识他了。NHRP在MGRE里扮演的正是这个群名片机制。2.2 NHRP在MGRE里的核心角色NHRP的全称是Next Hop Resolution Protocol下一跳解析协议。它在MGRE里的作用类似ARP在局域网里的作用——ARP负责把IP地址解析成MAC地址NHRP则负责把隧道内的IP地址解析成公网地址。MGRE隧道有一个很特别的地方Tunnel接口的目的地址是不需要配置的或者说是动态的。总部不知道每个分支的公网地址是多少分支也不知道其他分支的公网地址。那隧道报文怎么封装靠的就是NHRP。NHRP的运作模式是这样的总部Hub配置为NHRP Server相当于登记处。分支Spoke配置为NHRP Client启动后主动向Server发送注册请求告诉Server自己的公网地址和隧道IP。Server收到后在自己维护的NHRP映射表里记下这条信息并回复注册确认。当某个Spoke想访问另一个Spoke时它先向Server发起解析请求询问目标Spoke的公网地址Server查到后把地址返回给它。这个过程在HCIP的实验里是必须亲眼看到的。你输入display nhrp peer table能看到注册上来的对端信息状态是normal、前面带个E表示通过注册学习到的。如果这个表里没有内容后面路由协议、业务流量全都无从谈起。NHRP可以说是整个MGRE隧道的大脑你把它想通了后面配置就顺了。2.3 实验拓扑与地址规划我用的实验拓扑是比较经典的Hub-Spoke模型一台总部路由器两台分支路由器三台设备背后各自挂一台PC模拟内网主机设备之间通过公网地址互联模拟Internet环境。地址规划我习惯这样安排公网接口总部GE0/0/0是202.100.1.1/24分支1是202.100.1.2/24分支2是202.100.1.3/24三台设备连接在同一个交换机上模拟公网。内网接口总部GE0/0/1是192.168.1.1/24分支1是192.168.2.1/24分支2是192.168.3.1/24。Tunnel接口总部10.1.0.1/24分支1是10.1.0.2/24分支2是10.1.0.3/24。隧道地址统一用10.1.0.0/24网段这样整个MGRE网络逻辑上就相当于一个扁平的三层网络所有Tunnel接口在这个网段内互相通信。公网部分我用了202.100.1.x这个保留测试网段实际项目中你用运营商分配的正式公网地址或者NAT后的地址都行原理是一样的。这个实验如果你用华为的eNSP模拟器做注意选AR2220或者AR3260这种支持隧道特性的路由器型号有些低端型号对Tunnel接口支持不完整实验做一半可能出现莫名其妙的现象白白浪费时间。3. 核心配置实操把每个命令背后的逻辑说透3.1 Tunnel接口与NHRP基础配置配置的第一步是先把公网接口和内网接口的IP配上保证设备之间公网能互通。这一步在模拟器里很简单直接配IP就行。但真实场景里公网可能经过了很多跳中间有防火墙、运营商设备你要确保设备之间的公网路由可达否则后面Tunnel状态起不来NHRP注册也会失败。接着进入总部路由器的Tunnel接口配置interface Tunnel0/0/0 ip address 10.1.0.1 255.255.255.0 tunnel-protocol gre multipoint source 202.100.1.1 nhrp network-id 100 nhrp entry multicast dynamic逐行解释一下每一条命令的含义。tunnel-protocol gre multipoint这条命令把Tunnel接口的模式从默认的P2P GRE改成多点GRE。这是MGRE的根基模式不对后面全白搭。source 202.100.1.1指定隧道报文的源地址。这里可以直接写公网接口的IP也可以写source-interface GigabitEthernet0/0/0效果一样。这个源地址就是NHRP注册报文里携带的发件人地址其他设备拿到这个地址才能回包。实际项目中如果你的出口地址是DHCP动态获取的用source-interface更方便因为IP变了接口配置不用改。nhrp network-id 100给NHRP进程编个号。这个ID只要在同一组网内保持一致就行类似OSPF的进程号它用来区分不同的NHRP域。如果总部分支之间的network-id不一致NHRP报文会被丢弃注册就会失败。nhrp entry multicast dynamic允许动态学习组播映射。MGRE隧道在跑OSPF这类需要组播发送协议报文的路由协议时组播报文需要被复制发送给所有Spoke节点没有这条命令OSPF的Hello报文发不出去邻居就建立不了。这条命令只在Hub端需要配置Spoke端只需要配置一条指向Hub的静态组播映射即可我们后面会看到。分支路由器的配置跟总部类似但有两个关键区别。一是需要指定nhrp entry指向总部二是要写一条静态组播映射。分支1的配置如下interface Tunnel0/0/0 ip address 10.1.0.2 255.255.255.0 tunnel-protocol gre multipoint source 202.100.1.2 nhrp network-id 100 nhrp entry 10.1.0.1 202.100.1.1 nhrp entry multicast 10.1.0.1nhrp entry 10.1.0.1 202.100.1.1这条命令在Spoke的NHRP映射表里静态写入了一条记录隧道地址10.1.0.1对应的公网地址是202.100.1.1。这条记录的作用就是让分支知道总部在哪注册请求、后续的解析请求都往这个地址发。你也可以加上关键字register写成nhrp entry 10.1.0.1 202.100.1.1 register这样NHRP会在发送注册报文时优先使用这条静态记录。nhrp entry multicast 10.1.0.1定义组播报文发给谁。Spoke端所有的组播流量都发给总部由总部再转发给其他Spoke。这就是为什么Hub上要配置multicast dynamic而Spoke只要指向Hub就行。配置完成后在分支上输入display nhrp peer table你应该能看到总部10.1.0.1的映射记录状态可能是static。在总部上输入同样的命令能看到两个分支的映射记录状态是dynamic。看到这个说明NHRP注册成功了MGRE隧道已经具备转发条件。3.2 路由协议与MGRE联动OSPF网络类型是重点隧道通了接下来要让内网网段相互可达得跑路由协议。我实验里用的是OSPF这也是HCIP考试里最常用的组合。OSPF在MGRE上有个著名的坑接口默认网络类型是p2mp但实际行为跟真正的p2mp不完全一样。如果直接用默认配置OSPF邻居可能建立不起来因为p2mp网络类型下OSPF邻居是通过单播方式建立的但MGRE隧道的解析是动态的你没有一个明确的目的地址组播又发不出去就卡住了。我的做法是把OSPF网络类型改成broadcast让它模拟以太网广播链路的行为这样OSPF会选举DR/BDRHello报文也走组播配合前面配置的组播映射协议报文能正确发送和接收。配置如下interface Tunnel0/0/0 ospf network-type broadcast ospf timer hello 10目前华为的较新版本中建议使用nbma模式配合单播neighbor的方式或者直接改成broadcast。我实验里用broadcast最省事但要注意DR选举问题。总部的Tunnel接口IP是10.1.0.1是网段里最小的地址按照OSPF的DR选举规则优先级相同的情况下IP地址大的当选所以DR会选到分支设备上。DR一旦不是Hub分支间的OSPF报文都要经过DR转发DR的出口带宽、处理能力就成了瓶颈这在生产环境里是不可接受的。所以生产环境的标准做法是把Hub的Tunnel接口优先级调高确保Hub成为DR。具体命令是在接口视图下执行ospf dr-priority 255把优先级调成最大值。分支的优先级默认是1这样Hub必然成为DR流量模型就符合设计预期了。然后是OSPF基本配置在三台设备上分别宣告ospf 1 router-id 1.1.1.1 area 0.0.0.0 network 10.1.0.0 0.0.0.255 network 192.168.1.0 0.0.0.255分支设备的配置类似宣告自己的Tunnel网段和内网网段。配置完后在总部的OSPF邻居表里应该能看到两个邻居状态是Full。在分支上也能看到总部邻居是Full。这里有个细节分支之间默认不会建立OSPF邻居关系因为在broadcast网络类型下非DR设备之间不直接交换路由信息它们都只跟DR同步。所以你在分支1上display ospf peer看不到分支2的邻居这是正常的不需要额外处理。如果你希望分支之间也建立直接的邻居关系一是可以选择OSPF的p2mp网络类型并手工指定邻居二是启用MGRE的shortcut特性下一节讲后者更优雅。但就HCIP考试而言掌握到OSPF邻居Full就够用了。3.3 分支间通信优化与shortcut特性实验做到这里内网之间已经能互通了。但注意看数据转发路径分支1的内网主机访问分支2的内网主机由于分支1的OSPF路由表里去往192.168.3.0网段的下一跳是10.1.0.1Hub的隧道地址数据包会先从分支1封装成GRE报文发给总部总部解封装后再重新封装成GRE报文发给分支2。这就是俗称的绕路或三角路由。在Hub-Spoke组网下这种路径是默认行为也是可以接受的尤其当分支数量不多时。但如果分支之间流量很大Hub的转发压力会非常高延迟也会增加。这时可以在所有路由器上开启NHRP的shortcut特性让分支之间直接建立隧道转发不再经过Hub。配置非常简单在Tunnel接口视图下加一条interface Tunnel0/0/0 nhrp shortcut开启shortcut后当分支1需要访问分支2时NHRP会向Hub发起查询获取分支2的公网地址。查询成功后分支1会直接封装GRE报文发给分支2数据路径从分支1→Hub→分支2变成了分支1→分支2。你可以通过display nhrp peer table命令看到分支1的NHRP映射表里出现了分支2的动态映射条目这就是shortcut生效的标志。不过要提醒一句shortcut特性会让Spoke之间直接建立隧道对于安全要求高的场景这种直连路径可能绕过了Hub上的防火墙、审计设备需要结合业务需求来判断是否启用。考试里一般不会强制要求这个特性但面试或工作中如果被问到MGRE的优化手段你能说出shortcut这个点会是加分项。4. 踩坑记录与排错实战这些问题你一定也会遇到4.1 问题一NHRP注册不上display nhrp peer table没有动态条目这是MGRE实验里最常见的故障。现象是总部上看不到分支的动态NHRP条目分支上也看不到注册成功的痕迹。我排查的思路是先把NHRP的问题拆成几层第一层是网络可达性第二层是配置参数第三层是报文交互。先用ping验证一下公网地址的可达性从分支ping总部的公网地址确保隧道源地址之间能通信。这一步在模拟器里通常没问题但真机上如果中间有防火墙GRE协议号47被拦截这里就过不去。如果公网不通先把公网路由修好再继续。然后检查NHRP参数。重点看network-id是否一致、认证是否匹配如果配置了nhrp authentication、Tunnel接口的源地址是否正确。我这边的经验是很多朋友把network-id写错了总部是100分支写成了10两边不匹配NHRP直接静默丢弃报文注册自然失败。这个参数配置完可以用display nhrp configuration查看当前接口的NHRP参数确认id一致。如果以上都没有问题还在公网出口设备上抓一下NHRP报文。在华为设备上可以用packet-filter抓取UDP端口40的报文NHRP使用UDP端口40看看注册请求是否发出去、响应是否回来。我遇到过一种情况分支发的注册请求到了总部总部也回了注册应答但分支这边没有收到后来发现是NAT的问题——GRE的协议号47没有被NAT放行。还有一次是总部回应的报文携带的解析信息格式有问题升级版本后就好了。模拟器里碰到这种问题少真机上要多留个心眼。4.2 问题二OSPF邻居起不来一直停留在INIT或者EXSTART状态隧道通了、NHRP也注册成功了但OSPF邻居就是不Full。这个故障的常见程度仅次于NHRP注册失败。我在实验里遇到过两种典型情况第一种是OSPF网络类型导致的组播发送问题。MGRE隧道如果没有配置组播映射OSPF的组播Hello报文就发不出去邻居状态卡在INIT。排查方法很简单在Tunnel接口上执行display ospf interface看网络类型是不是broadcast再检查组播映射是否配置了。Hub端需要nhrp entry multicast dynamicSpoke端需要nhrp entry multicast 10.1.0.1这两条命令缺一不可。第二种是OSPF Router-ID冲突或者区域配置错误。多台设备之间如果Router-ID相同OSPF邻居会反复震荡稳定不了。我做过一次实验两台设备都忘了配Router-ID华为设备会自动选择Loopback或者最大IP地址作为Router-ID结果两台分支设备的Router-ID撞了邻居建立后马上断开反复循环。解决方法是每台设备明确配置不同的Router-ID。另外还有一个细节广播网络类型下OSPF要选DR如果DR选举不稳定或者Hub没有当上DR也会出现邻居状态异常。检查方法是display ospf peer看邻居状态那一行后面有没有DR、BDR的标记。如果想快速排除DR问题所有设备重启OSPF进程前把Hub的优先级调成255让Hub在选举中胜出。4.3 问题三分支间互访路径绕行Hub延迟高但链路正常这个不算故障但很多人在实验里会拿它跟隧道不工作混淆。现象是分支1能ping通分支2的隧道地址和业务网段但通过tracert看到每一跳都经过总部的隧道地址。排查的思路是先确认这是不是设计预期。如果你没有配置shortcut特性那经过Hub转发是完全正常的。如果你希望分支间直连检查一下三台设备是不是都启用了nhrp shortcut。分支1能不能成功解析到分支2的公网地址。分支1上有没有生成到分支2的动态NHRP条目。分支1的OSPF路由表里去往分支2网段的下一跳是不是还是10.1.0.1。shortcut的生效依赖于NHRP的动态解析。如果你发现路由表里下一跳没有改变可能是因为OSPF路由优先于NHRP的直连信息——遇到这种情况需要检查路由协议确保OSPF能感知到新的路径。我在实验中就曾因为OSPF的cost值配置不合理导致即便隧道直连了OSPF还是选了一条高cost的老路。把分支间的链路cost调低或者删掉人为改的cost重新比较就能看到路径切换。4.4 问题速查表与排错顺序建议现象可能原因排查命令解决动作NHRP没有动态条目network-id不匹配、认证错误、公网不可达display nhrp configuration、display nhrp peer table核对参数、检查公网路由、查看NAT放行NHRP注册有请求无响应总部未配置server角色、报文被丢弃display nhrp statistics、抓包确认nhrp entry带register、检查源地址OSPF邻居卡在INIT组播报文发不出去display ospf interface、display nhrp multicast配置multicast映射、确认网络类型OSPF邻居反复震荡Router-ID冲突display ospf peer brief配置唯一Router-ID分支间绕路shortcut未开启或路由未切换display nhrp peer table、display fib启用shortcut、检查OSPF cost业务不通但隧道UP路由没宣告完整display ip routing-table确认内网网段在OSPF中宣告排错的时候我的习惯是严格按顺序走先看公网通不通再看隧道状态再看NHRP表再看路由协议最后看数据转发。不要一上来就怀疑OSPF配置很多问题的根源反而在最底层的NHRP。把这个顺序记牢能节约大量的排查时间。5. 实验验证与HCIP考试题型的应对策略5.1 验证命令与实验收尾步骤实验做到最后不能只靠ping通就算完成我习惯按下面的顺序做一轮完整验证第一验证Tunnel接口状态。在三台设备上分别输入display tunnel-info all看到Tunnel0/0/0的协议状态是UP封装类型是GRE协议是MP。一行信息就能确认隧道本身正常。第二验证NHRP映射表。在总部上display nhrp peer table应该看到两个分支的动态映射。在分支上display nhrp peer table至少有一条总部的静态映射如果启用了shortcut还应该看到对端分支的动态映射。第三验证NHRP路由表。在分支上display nhrp route命令能看到NHRP学习到的路由条目。开启shortcut后分支间互访会在NHRP路由表里产生对端Spoke的隧道地址和公网地址映射。这条验证在考试里如果被问到能作为分支间直连的有利证据。第四验证OSPF邻居。display ospf peer brief状态栏全是Full说明路由协议正常。第五验证业务转发路径。从分支1的内网PC上tracert分支2的内网地址观察路径。未开shortcut时显示经过Hub开了shortcut后显示直达。结合自己的设计预期判断结果是否正确。我在做实验时还有一个习惯每改完一次配置就在设备配置里存一次档防止改后面的配置把前面的弄没了还得回退重来。模拟器里虽然无所谓但这个习惯放到生产环境意义重大从学习阶段就该养成。5.2 实验题考查重点与备考建议结合HCIP的考试情况MGRE这个知识点在笔试和实验里都有可能出现。笔试部分通常考察NHRP的注册过程、MGRE与GRE的区别、OSPF网络类型的选择这些纯理论题目相对好记搞懂原理就不怕变着花样出题。实验部分就比较考验配置熟练度和排错能力了常见要求是在给定拓扑下完成MGRE配置让分支能动态接入总部并保证内网路由互通。考试实验题的评分点一般抓三个维度一是配置完整度Tunnel接口的封装类型、NHRP参数、OSPF宣告有没有配全二是状态验证考官或者评分系统会去检查NHRP peer table有没有动态条目、OSPF邻居是否FULL三是业务验证内网PC之间能不能正常互通。这三个维度里第二个是最容易被扣分的因为很多考生配置敲完了状态没确认就交卷了结果某条命令没生效整个实验前功尽弃。备考建议上我想专门聊聊hcip题库这个话题。题库对笔试部分的价值确实大MGRE相关的选择题、填空题通过刷题能快速覆盖考点。但实验题绝不能只靠背题库因为实验环境是动态的你背的配置模板在模拟器环境里可能会因为设备型号不同、接口编号不同而出错。更关键的是实验题往往设置了一些小陷阱比如某个接口的IP配错了、某个设备的network-id不一样这些都要靠你自己去发现和修正背题库根本背不到。我的建议是实验之前先做题用题库把相关考点的常见问法、常见坑过一遍然后在模拟器里把每个考点亲手复现一遍。我备考MGRE部分的时候把实验重复做了五遍每一遍都刻意换一种配置方式或者主动引入一个错误再排查比如故意把network-id写错看会有什么现象、故意不开组播映射看OSPF邻居卡在哪一步。这样练下来考试的时候无论题目怎么出心里都有底。5.3 最后一个提醒把状态验证当成实验的习惯做MGRE实验最大的收获不在于你把命令敲完了、流量通了而在于你建立起了配置—验证—排错的闭环习惯。很多初学者做完实验直接拿内网PC去ping通了就关模拟器走人完全不看中间过程。这样做实验十个里有九个会会在考试或者实际工作中翻车。我自己在做MGRE实验的过程中慢慢养成了一个习惯每完成一个功能的配置就用对应的display命令去确认状态。配完NHRP就查nhrp peer table配完OSPF就查ospf peer配完路由就查routing-table。这样每一步都有据可依出了问题也能精准定位到是哪一个环节。这个习惯让我在做其他实验、处理真实网络故障时受益很大也是我在这篇文章最后想专门分享给你的核心经验。实验做到后面你还会发现很多可玩的东西比如把NHRP结合VRRP做总部高可用、用MGRE承载OSPF以外的其他路由协议、在分支增多时调整Hub的NHRP版本和报文格式兼容性等等。但这些都属于进阶内容了先把今天这个基础实验吃透后面一切都好说。
返回列表