HCIP实验指南:PPP与MGRE联合配置,从串口到隧道的全网互通 1. 为什么把PPP和MGRE放在一起讲做网络的人应该都有这种感觉HCIP的知识点就像一张网单个拿出来都不算难但一旦串起来就容易懵。二层技术这个章节里点对点协议PPP和NBMA网络下的MGRE隧道技术表面看一个是跑在串口上的广域网协议一个是叠加在IP网络上的隧道技术好像八竿子打不着。但我自己备考和做实验时才发现这俩放在同一章不是没道理的——它们都是把不可控的物理网络抽象成可控的逻辑网络的典型手段而且综合实验题里特别喜欢把二者结合一边用PPP做串行链路封装一边用MGRE把多点NBMA网络改造成逻辑全互联中间再挂二层交换最后跑通路由协议。这套组合拳打下来你对网络分层逻辑通道协议协商这几个概念的理解会明显上一个台阶。这篇文章就围绕这个实验组合展开。内容面向正在备考HCIP、或者工作中需要做企业分支互联的工程师。我不打算照抄教材而是把我自己做实验时踩过的坑、验证过的细节、以及那些文档里不会写明白的为什么都梳理出来。你可以把本文当成一份带注释的实验笔记来读重点不是背命令而是理解每个环节背后到底发生了什么。先给没基础的同学补个底PPP是数据链路层协议跑在串口这种点对点物理链路上负责封装、认证、协商IP地址MGRE是隧道技术跑在IP网络上能把多个分支站点虚拟成一个逻辑的二层/三层直连网络配合NHRP实现动态寻址。前者解决物理链路怎么传数据后者解决逻辑网络怎么构建而二层综合实验就是要把交换机的VLAN、串口的PPP、隧道的MGRE、以及路由协议全部串联起来最终实现全网互通。2. PPP点对点协议不只是封装格式那么简单2.1 PPP的三个子协议与协商过程很多人对PPP的认知停留在serial接口默认封装PPP或者比HDLC多了认证功能这个层面这远远不够。真正理解PPP必须拆开它的三个组成部分LCP链路控制协议、NCP网络控制协议最常见的是IPCP和认证协议PAP/CHAP。LCP做的事情是链路建立和参数协商。两端路由器接上串口线、封装改为PPP后立刻开始发LCP报文协商MRU最大接收单元、魔术字防止环路、认证方式等参数。这个阶段可以这样类比两个陌生人第一次打电话先互相确认你能听到我吗我说的编码你能听懂吗——LCP就是在干这个事。LCP协商成功后链路处于Open状态接下来才轮到NCP干活。IPCP会给对端分配IP地址或者协商两边接口的IP是否兼容同时协商是否启用压缩、DNS地址下发。这里有个很多人忽略的细节IPCP协商完成之前PPP链路虽然是通的但IP报文根本传不了。所以排查PPP故障时如果物理层和链路层都是up但ping不通一定要去看IPCP是否完成了协商。认证环节插在LCP和NCP之间。链路建立后如果配置了认证设备会进入认证阶段认证通过后才继续IPCP协商。这个顺序是硬性的我曾见过有人把认证配置漏了结果NCP一直卡在initial状态排了半天才发现是PAP/CHAP没启用。2.2 PAP和CHAP选型逻辑与配置细节PAP和CHAP是PPP的两种认证方式。PAP是明文传输用户名和密码认证过程只有两次握手被认证方直接把用户名密码发过去认证方比对后回复通过或拒绝。优点是配置简单缺点是密码裸奔抓包就能看到所以现在基本只用在实验室和低安全需求的内部链路。CHAP则聪明得多。它用三次握手认证方先发一个随机挑战值challenge被认证方用MD5把挑战值密码一起哈希后回传认证方做同样的计算再比对。即使抓包也只能看到哈希结果看不到明文密码安全性高得多。代价是两端必须知道对方的密码或者密钥且配置稍复杂一点。实操中CHAP配置有个特别容易翻车的地方链路两端都配置CHAP认证时每个接口除了要指定ppp authentication-mode chap还必须配置ppp chap user和ppp chap password。这个user是我告诉对端我是谁password是我用来做哈希计算的密钥。两端都认证时A作为认证方发给B的挑战B收到后不是拿B自己的user去应答而是用A的用户名去查密码表查出密码做MD5。很多人没理解这一点两边密码不一致或者user配错就会反复出现LCP协商成功、CHAP阶段failed的现象。我个人的建议是同一条链路优先选用CHAP如果只是为了快速打通实验用PAP省事但生产环境绝对不要PAP抓包软件一开密码就全暴露了。2.3 PPP的常用验证命令与故障定位思路PPP配置完成后验证是重头戏。常用的命令有这么几条分工不同display ppp interface brief看每个串口的PPP状态重点看LCP和NCP的状态是Initial、Establish还是Open。display ppp link 或者 display interface Serial x/x/x看更细的信息包括物理状态、LCP状态、IPCP状态、认证是否通过。debug ppp negotiation看PPP协商过程这是排查疑难问题的大杀器能看到LCP在每个阶段的收发报文。我给你一个实际排障的例子。某次模拟实验中两台路由器串口相连状态显示Physical layer up但链路层一直Down。接口看下去LCP卡在Negotiating。开debug后发现有大量Configure-Request和Configure-Ack互发但魔术字总是对不上——最后发现是有环路了串口线自发自收接到了同一台设备上对端回环导致LCP永远协商不完。这是真实环境中偶发的情况但在模拟器里做实验时也遇到过排查思路值得记下来LCP反复send/recv但状态不跳转先查线路收发是否接反再查两端参数是否完全一致最后查是否存在环回。PPP还有个小功能容易被忽略——链路质量监控LQM和PPP回调这些在HCIP考纲里属于扩展内容但实际工作中很少用不做重点讲。重点掌握前面说的LCP生命周期、CHAP认证过程、IPCP协商这三个层面就足够应对实验和考试了。3. NBMA网络与MGRE隧道从物理多点到逻辑全互联3.1 为什么有了GRE还不够还要用MGRE讲到MGRE必须先理解它所在的网络环境——NBMA非广播多路访问。这类网络的特点是一个网段内可以有多台设备但设备之间不会主动广播报文甚至连广播能力都没有。典型场景是帧中继、ATM以及现实中最常见的Internet上的分支互联。在NBMA环境中跑普通GRE隧道会遇到一个硬伤GRE隧道是点到点的。总部有10个分支你要建10条GRE隧道每条都要手动指定对端公网地址配置量随分支数线性增长。更烦人的是如果某个分支的公网IP是动态的PPPoE拨号、DHCP获取那GRE隧道根本没法建——你连对端地址都不知道怎么封装这就是MGRE存在的理由它把隧道口定义成多点point-to-multipoint让分支之间可以通过NHRP动态学习对端公网地址总部只需要维护一张映射表分支增加时也不用重新配置总部。我打个比方普通GRE是两个人约好在固定地点见面MGRE是大家都在一个群里谁上线了报个到想找谁直接私聊。NHRP就相当于这个群里负责登记和查询的服务器。3.2 NHRP协议的工作原理与映射关系NHRP下一跳解析协议是MGRE的灵魂。在一个MGRE网络中通常有一台中心设备Hub和多台分支设备Spoke。所有Spoke启动时会向Hub发送NHRP Registration Request声明自己隧道的私有地址NBMA地址比如10.1.1.2和对应的公网源地址比如200.1.1.2。Hub收到后维护一张映射表把隧道内的私有地址映射到各分支的物理公网地址。当Spoke A想和Spoke B直接通信时A会发一个NHRP Resolution Request给Hub问谁是10.1.1.3Hub查表后把B的公网地址作为Resolution Reply回给A。A拿到后就可以直接向B发起隧道封装动态建立一条逻辑直连。这个过程很像内网设备通过DNS解析域名找到目标IP——每次访问一个网站操作系统先查DNS拿到IP再直连。这里要特别留意一个概念区分MGRE隧道的源地址是物理接口的公网IP目的地址初始时是空的或者指向Hub只有经过NHRP解析后才知道对端是谁。所以配置MGRE时tunnel接口上是没有destination命令的取而代之的是一个nhrp network-id用来标识属于同一个MGRE域的隧道接口。所有需要在同一个逻辑网段内互通的设备network-id必须一致否则互相之间注册都看不到对方。3.3 MGRE配置的完整步骤与关键参数以模拟器中三台路由器R1Hub、R2和R3Spoke为例建立一个MGRE网络。假设公网接口分别是R1的G0/0/0地址200.1.1.1R2的G0/0/0地址200.1.1.2R3的G0/0/0地址200.1.1.3隧道私有网段规划为10.1.1.0/24。R1Hub上的关键配置R1(config)# interface Tunnel 0/0/1 R1(config-if)# ip address 10.1.1.1 255.255.255.0 R1(config-if)# tunnel-protocol gre p2mp R1(config-if)# source 200.1.1.1 R1(config-if)# nhrp network-id 100 R1(config-if)# nhrp entry 10.1.1.2 200.1.1.2 register R1(config-if)# nhrp entry 10.1.1.3 200.1.1.3 registerR2Spoke上的关键配置R2(config)# interface Tunnel 0/0/1 R2(config-if)# ip address 10.1.1.2 255.255.255.0 R2(config-if)# tunnel-protocol gre p2mp R2(config-if)# source 200.1.1.2 R2(config-if)# nhrp network-id 100 R2(config-if)# nhrp entry 10.1.1.1 200.1.1.1 register注意一个细节Hub上配置nhrp entry xx.xx.xx.xx register目的是让Hub主动向Spoke也发起注册形成双向映射。很多教程只说Spoke要指向Hub忽略了Hub也要反向注册结果导致Spoke能ping通Hub但Hub无法主动发起报文到Spoke。这在真实环境中是个大坑排错了你可能会怀疑路由、怀疑防火墙最后发现是NHRP映射表里只有一条单向的条目。Spoke之间的互通不需要手动写任何NHRP条目。A要访问B时先通过Hub查询B的地址然后动态建立隧道。你可以现场验证在R2上ping R3的隧道地址第一包可能会超时因为要等NHRP解析和隧道建立后面就通了。这个第一个包丢不是故障而是动态机制的固有行为。3.4 MGRE网络中的路由协议选型隧道口全通了以后跑路由协议又是一个讲究点。MGRE的逻辑拓扑是Hub-Spoke星型物理上分支之间并不会形成真正的广播邻居关系。这时如果跑OSPF默认的network type是broadcast或p2mp就会出现邻居建立不了或者DR选举混乱的问题。业界常见的做法是配置OSPF的网络类型为p2mp或者改用OSPF的broadcast模式并手动指定邻居。在HCIP的实验题里最常考的解法是将隧道口的OSPF网络类型改为p2mp然后每个Spoke手动指定对端邻居为Hub。为什么不用broadcast因为在非广播介质上OSPF的Hello组播根本发不到对端邻居关系建立不起来。改为p2mp后OSPF以单播方式发送Hello并且p2mp网络不选举DR/BDR规避了Hub-Spoke拓扑下DR选举的歧义。还有一个更省心的方案直接跑静态路由或默认路由。Hub上写多条到分支的路由Spoke写一条默认路由指向Hub配合MGRE也能实现全互联。虽然动态路由协议更优雅但理解静态方案能帮你更清楚地看到逻辑拓扑和物理拓扑之间的差异。4. 二层综合实验从零打通PPP与MGRE的联合作业4.1 实验拓扑与网络规划综合实验的价值在于把零散的知识点拼成一张完整的图。我直接给出一套我在模拟器中反复验证过的拓扑你可以在自己的环境里照着搭。假设网络分为三部分左侧一台核心交换机SW1下连两个终端PC1和PC2SW1划分VLAN 10和VLAN 20。中间两台路由器R1和R2通过串口Serial直连链路封装为PPP启用CHAP双向认证串口网段规划为12.1.1.0/30。右侧R2作为MGRE网络的HubR3和R4作为Spoke三者通过各自的公网接口接入一个模拟互联网段比如200.1.1.0/24隧道网段规划为10.1.1.0/24。目标PC1能ping通PC2PC1能ping通R4环回口作为远端服务器模拟并且在R4上看路由表能学习到左侧的VLAN网段。整体规划表如下设备接口IP地址所属模块PC1eth0192.168.10.2/24, 网关192.168.10.1VLAN 10PC2eth0192.168.20.2/24, 网关192.168.20.1VLAN 20SW1VLANIF10 / VLANIF20192.168.10.1/24, 192.168.20.1/24交换R1G0/0/0 / S0/0/0192.168.0.1/24, 12.1.1.1/30路由PPPR2S0/0/0 / G0/0/0 / Tunnel12.1.1.2/30, 200.1.1.2/24, 10.1.1.2/24PPPMGRER3G0/0/0 / Tunnel200.1.1.3/24, 10.1.1.3/24MGRE SpokeR4G0/0/0 / Tunnel / Lo0200.1.1.4/24, 10.1.1.4/24, 8.8.8.8/32MGRE Spoke4.2 第一步二层交换机的VLAN规划与Trunk配置实验从最底层开始搭。SW1上创建VLAN 10和VLAN 20分别对应PC1和PC2上联R1的接口配置为Trunk放行这两个VLAN。SW1(config)# vlan batch 10 20 SW1(config)# interface GigabitEthernet 0/0/1 SW1(config-if)# port link-type access SW1(config-if)# port default vlan 10 SW1(config)# interface GigabitEthernet 0/0/2 SW1(config-if)# port link-type access SW1(config-if)# port default vlan 20 SW1(config)# interface GigabitEthernet 0/0/3 SW1(config-if)# port link-type trunk SW1(config-if)# port trunk allow-pass vlan 10 20R1的G0/0/0接口做子接口来终结这两个VLAN这是经典的单臂路由玩法。子接口上必须打上dot1q标签并且关掉子接口的ARP广播限制在模拟器里表现为配置arp broadcast enable。R1(config)# interface GigabitEthernet 0/0/0.10 R1(config-subif)# dot1q termination vid 10 R1(config-subif)# ip address 192.168.10.1 255.255.255.0 R1(config-subif)# arp broadcast enable R1(config)# interface GigabitEthernet 0/0/0.20 R1(config-subif)# dot1q termination vid 20 R1(config-subif)# ip address 192.168.20.1 255.255.255.0 R1(config-subif)# arp broadcast enable这里有个很多人初次做实验时忽略的配置子接口不配置arp broadcast enablePC1能ping通网关吗答案是能通一次但之后会不稳。因为子接口默认不处理广播帧ARP请求无法广播到终端终端就学不到网关的MAC。我建议养成习惯做完子接口立即配上arp broadcast enable别等ping不通再回去查。4.3 第二步PPP链路搭建与CHAP双向认证接着打通中间的广域网链路。R1和R2的串口都改成PPP封装开启CHAP双向认证。双向认证模式下两端既要是认证方也要是被认证方所以每端都要配置用户名和密码。R1侧配置如下R1(config)# interface Serial 0/0/0 R1(config-if)# link-protocol ppp R1(config-if)# ppp authentication-mode chap R1(config-if)# ppp chap user R1 R1(config-if)# ppp chap password cipher Huawei123 R2(config)# interface Serial 0/0/0 R2(config-if)# link-protocol ppp R2(config-if)# ppp authentication-mode chap R2(config-if)# ppp chap user R2 R2(config-if)# ppp chap password cipher Huawei123注意CHAP的密码不是对端配什么我就配什么而是两端本地保存的密钥值必须一致。R1认证R2时R2需要根据挑战中的用户名R1查出对应密码。所以建议在两端使用一致的用户名密码对或者在每端配置多条ppp chap password分别对应不同的对端用户名。实验里我习惯统一设成同一组账号密码省事且不混乱。验证PPP是否正常跑一下display ppp interface brief看到LCP和IPCP状态都是Open就说明协商成功了。如果卡在认证阶段用debug ppp negotiation看具体是哪一包认证失败常见原因是密码不一致或者ppp chap user没配。4.4 第三步MGRE隧道构建与NHRP映射中间链路通了以后接着做MGRE部分。R2作为HubR3、R4作为Spoke公网接口配置好IP和路由后分别建立Tunnel接口。以R3为例R3(config)# interface Tunnel 0/0/1 R3(config-if)# ip address 10.1.1.3 255.255.255.0 R3(config-if)# tunnel-protocol gre p2mp R3(config-if)# source GigabitEthernet 0/0/0 R3(config-if)# nhrp network-id 100 R3(config-if)# nhrp entry 10.1.1.2 200.1.1.2 registerR4的配置类似把nhrp entry指向Hub R2。R2上除了自己的隧道地址外还需要静态注册两个Spoke的NHRP条目R2(config)# interface Tunnel 0/0/1 R2(config-if)# nhrp entry 10.1.1.3 200.1.1.3 register R2(config-if)# nhrp entry 10.1.1.4 200.1.1.4 register配置完成后在R3上ping一下R2的隧道地址再display nhrp peer-table应该能看到对端的公网地址映射已经建立。再在R3上ping R4的隧道地址第一包丢了以后再display nhrp peer-table会看到R4的动态映射条目也出现了——MGRE的核心机制到这里就验证完毕。4.5 第四步路由打通与全网验证隧道通了之后剩下的就是把整张路由表串起来。我推荐用OSPF来承载这些逻辑网段但要注意网络类型的调整。隧道口全部改为OSPF p2mp类型并且手动指定邻居R2(config)# interface Tunnel 0/0/1 R2(config-if)# ospf network-type p2mp R2(config-if)# ospf dr-priority 0 R3(config)# interface Tunnel 0/0/1 R3(config-if)# ospf network-type p2mp R3(config-if)# ospf dr-priority 0 R4(config)# interface Tunnel 0/0/1 R4(config-if)# ospf network-type p2mp R4(config-if)# ospf dr-priority 0同时在OSPF进程里R2要手动指定邻居为R3和R4R3和R4指定邻居为R2R2(config)# ospf 1 R2(config-ospf)# area 0 R2(config-ospf-area)# network 10.1.1.0 0.0.0.255 R2(config-ospf-area)# peer 10.1.1.3 R2(config-ospf-area)# peer 10.1.1.4这里有个细节p2mp网络下OSPF邻居不会自动发现peer命令就是告诉OSPF从这里发Hello单播包。如果不写peer邻居永远是DOWN路由就起不来。全网互通的验证我习惯从底层往上层逐步pingPC1 ping 网关192.168.10.1通PC1 ping R1的串口地址12.1.1.1通PC1 ping R2的串口地址12.1.1.2通验证PPP链路转发PC1 ping R2的隧道地址10.1.1.2通验证跨设备明文转发进隧道PC1 ping R3的隧道地址10.1.1.3通验证MGREPC1 ping R4的环回口8.8.8.8通验证OSPF在全网的路由承载。走到第5、6步时可以顺手display ip routing-table你会看到左侧的VLAN网段通过OSPF出现在R3、R4的路由表里而MGRE的隧道网段也出现在R1的路由表里。这张路由表的完整度就是综合实验做没做通的直接证据。5. 综合实验中的典型故障与排查心得5.1 隧道建立失败NHRP映射表空白这是MGRE实验里最高频的问题。现象Spoke能ping通Hub的公网地址但ping不通Hub的隧道地址display nhrp peer-table看到的表项为空。我排查这类问题的顺序是固定的。第一步检查tunnel-protocol gre p2mp是否在每台设备上都配置了一致。第二步检查nhrp network-id是否一致这个参数不一致NHRP报文会被静默丢弃。第三步检查source指定的物理接口是否健在、是否有公网IP。第四步检查Hub是否执行了nhrp entry反向注册。最后一步开debug nhrp event看注册报文是否到达Hub以及Hub回复是否被Spoke收到。有次实验里我把R2的Tunnel口少配了一条nhrp entry指向R3导致R3的注册请求到了R2后R2无法响应——按理说Hub收到注册请求会自动回复但这个模拟器版本里需要显式配置条目才能形成完整映射。这是环境差异问题但也提醒我不要默认行为和你预期一致先看映射表代码不会说谎。5.2 CHAP认证反复失败的定位思路PPP链路CHAP认证失败时display ppp interface brief看到的LCP是Open但IPCP停留在Initial。再细看display interface serial会出现CHAP authentication failed的计数。定位思路是这样先在R1上debug ppp chap看对端发来的用户名是什么。有一次我发现报错里出现的对端用户名和我配置的用户名完全不同——原来是R2的ppp chap user配错了写成了R1的用户名。因为CHAP是被认证方收到挑战值后要用挑战值携带的用户名去本地查密码查不到对应条目认证就失败了。把这个理清楚后很多奇怪的认证失败都能解释通了。5.3 OSPF邻居起不来Hello报文被丢弃MGRE隧道通了但OSPF邻居始终Down。这类问题十有八九是网络类型和邻居指定这两件事没做对。先确认隧道口ospf network-type p2mp生效了没有用display ospf interface Tunnel 0/0/1查看Type字段。再确认peer命令写的对端隧道地址是对的。还有一个隐蔽问题如果Hub和Spoke不在同一个OSPF区域或者area id写错邻居也起不来。排除顺序建议是先看隧道能不能互ping再看NHRP映射表是否完整再看OSPF接口的网络类型和区域最后开debug ospf packet观察Hello是否发出、是否收到。5.4 VLAN网关ping不通终端这个故障通常出现在实验刚开始、还没涉及PPP和MGRE的阶段。PC1 ping网关不通时我习惯先检查子接口的dot1q termination vid是否和交换机Trunk放行的VLAN一致再检查arp broadcast enable有没有配。这两个配置缺一个子接口就是静默的——能收数据但不回应ARP。再用display arp interface GigabitEthernet 0/0/0.10看看有没有终端的ARP表项。没有任何表项就重点查子接口的广播放行配置。这个细节我前面反复强调过但每次实验总有同学栽在这上面再提一次不亏。6. 把实验经验沉淀成工程习惯做完这套PPPMGRE综合实验我最大的体会是网络实验的价值不在敲命令而在构建故障时的直觉。开始做之前先把整个数据转发路径画出来标注清楚每一段用了什么协议、经过哪些协商、下一跳是谁。数据包从PC1出发先过VLAN10、子接口再到R1查表出串口走PPP封装到R2解封装查表进Tunnel口做GRE封装经过公网转发到R3解封装再到目标……你可以用几乎同样的方式排查任何一个真实网络的故障——先画路径再分段验证最后定位问题。配置顺序也很重要。我建议的做法是先配底层物理接口和路由验证能ping通再上一层配PPP验证链路协商再配MGRE验证NHRP映射最后配路由协议验证全网路由表。每一层都验证通过再往上走出问题时的排查范围就能缩小到一个协议层面。很多同学喜欢一口气把配置全敲完最后全部不通只能从零开始盲查效率特别低。最后分享一个小技巧实验做完后把display nhrp peer-table、display ppp interface brief、display ospf peer、display ip routing-table四个输出保存下来形成一份基线状态文档。以后遇到类似环境你先对比这套基线状态立刻就能看出哪个环节异常。这个习惯我在实际项目排障里用过很多次比任何高级debug命令都节省时间。