GNS3+Cisco 3640 MPLS实验环境搭建与LDP标签转发排错
简介南京邮电大学《交换技术与通信网》MPLS基本配置实验报告面向通信工程、网络工程等专业学生及备考网络实验的读者帮助梳理从GNS3搭建Cisco实验环境、完成LER与LSR接口IP编址到配置OSPF路由、开启CEF并建立MPLS LSP的完整流程。资源包为1个doc文档约749KB篇幅集中适合作为课程实验参考、配置命令查阅与报告撰写模板。已有963人学习下载说明其在高校网络实验场景中具有一定参考价值。文档围绕实验目的、设备清单、拓扑与连通性测试展开包含R1至R5的接口地址、回环口、路由协议及标签分发相关命令记录并提示IP地址需与拓扑一致、配置后及时保存与ping测试。读者可据此理解MPLS标签交换路径的创建思路对照检查各路由器配置与测试结果提升实验复现和排错效率。1. 一台 3640 跑不动的下午MPLS 基本配置实验环境到底卡在哪做《交换技术与通信网》这门课的 MPLS 基本配置实验最省事的做法是用 GNS3 拉起五台 Cisco 3640配 IP、跑 OSPF 110、开 LDP看着标签从 R1 一路换到 R5。听着像照着命令抄一遍的事真装的时候翻车点全在环境层IOS 镜像没算 idle-pc宿主机 CPU 直接拉满敲个enable要等三秒才回显串口一端没配时钟show ip int brief里一排 up/downLDP 邻居明明配了却起不来标签一条都不分发。这篇记录的是我自己装了两遍才跑通的一套环境从 GNS3-0.8.6 装起到五台路由器三层互通、LSP 建立、标签转发表逐跳核对完整走一遍。适合手上有实验报告要复现、但卡在“设备起不来”和“标签不生效”这两步的人。2. 装 GNS3 0.8.6 和 IOS 镜像3640 的槽位、内存、idle-pc 一次配对2.1 all-in-one 安装包和首次启动要定的三个目录GNS3 迭代到 2.x 之后设备全部走 template 模板加一台 3640 要先建 template 再绑镜像和这份实验报告里的操作路径完全是两套东西。要复现“拖设备、连线、开机”的老流程直接上GNS3-0.8.6-all-in-one装完即用不需要额外配 dynamips 路径。安装本身没什么花头双击 exe 一路 next中途会弹 WinPcap 4.1.3 的安装勾上。装完先别急着启动确认一遍安装目录路径里不要出现中文、空格和括号D:\GNS3这种最稳。老版本内部调用 dynamips 时是把路径拼进命令行参数的D:\我的实验\GNS3这种路径表现是设备能拖出来、一开机就报Could not start the node日志里只给一行看不懂的 error。这种玄学问题排查半小时不如卸载重装一次来得快。首次启动会走 Setup Wizard问两件事projects 目录和 IOS images 目录。我一般设成D:\GNS3\Projects和D:\GNS3\IOS两者分开以后重装 GNS3 镜像目录不用动省得再倒一遍几百兆的 BIN 文件。接着改两个偏好General 里的 Console application 换成 SecureCRT下一节细说Language 保持 English。0.8.6 的中文翻译只覆盖菜单错误提示还是英文中英混着看反而容易点错菜单。依赖方面0.8.6 要 .NET Framework 4.0 以上。Win7 上要单独装Win10/Win11 自带 4.8 基本够。启动报“应用程序无法正常启动 (0xc000007b)”或者直接闪退右键 exe → 属性 → 兼容性 → 勾“以兼容模式运行”选 Windows 7再勾“以管理员身份运行”十有八九能进。WinPcap 在较新的系统上装完可能提示驱动签名问题这时候换成 Npcap 安装安装时勾上WinPcap API-compatible ModeGNS3 一样认得。2.2 导入 C3640-JK9O3S-M-12.4(7a).BIN 并把槽位插对镜像文件名C3640-JK9O3S-M-12.4(7a).BIN拆开看C3640 是平台J 表示企业特性集K9 是加密特性O3S 是特性组合12.4(7a) 是 IOS 版本。MPLS 相关命令ip cef、mpls ip、mpls label protocol ldp在这个特性集里是齐的。如果手上换成 C3640-IK9S 或者 IP BASE 一类的镜像接口下敲mpls ip会直接被拒报% Invalid input detected at ^ marker——不是命令敲错是镜像不带 MPLS 特性集换镜像比重装系统快。导入路径是 Edit → Preferences → IOS images and hypervisorsImage file 选中 BINPlatform 选 c3640Model 选 3640RAM 给 128MBNVRAM 保持 512KB。保存后列表里会出现一条c3640-jk9o3s-mz.124-7a.bin c3640的映射这一行就是开机时传给 dynamips 的参数改了镜像名这一行也要跟着改。槽位是必须动的一步。新建工程后右键设备 → Configure → Slots 页签slot 1 选NM-4Tslot 0 按需选NM-1FE-TX。NM-4T 是四口串口模块插在哪号槽接口名就是s槽号/口插 slot 1 得到s1/0到s1/3NM-1FE-TX 插 slot 0 得到f0/0。这份实验的互联全部落在串口上所以每台机器都插一块 NM-4T 到 slot 1接口名和报告里的s1/0、s1/1正好对上。然后是 idle-pc这是老版本 GNS3 的头号出血点。不设 idle-pc一台 3640 能把一个物理核吃满五台一起开宿主机风扇起飞SecureCRT 里敲一个enable要等三秒才回显。操作方式右键设备 → Idle-PC让它跑一组采样列表里带星号的值优先选一个点 OK。判断有没有设对不是看 GNS3 界面卡不卡而是进设备敲R1#show processes cpu CPU utilization for five seconds: 3%/0%; one minute: 4%; five minutes: 4%5 秒和 1 分钟两个值落在个位数才算对。idle-pc 的值跟镜像绑定同一个 BIN 上算出来的值可以复用换镜像必须重算。所以手里留一份“镜像 idle-pc”能跑通的组合比什么都值钱。五台设备全部配好后记得 Save project不然关掉重开又要重插一遍槽位。2.3 用 SecureCRT 6.7 接管控制台并开日志GNS3 自带的 console 窗口小、不能开日志配五台路由器的几十条命令靠它写实验报告会很难受。改成 SecureCRT 接管操作是 Preferences → General → Console application命令行填C:\Program Files\VanDyke Software\Clients\SecureCRT.exe /T /N %d /TELNET %h %p/T表示走 telnet 协议/N后面是会话名%d会被 GNS3 替换成设备名R1、R2…%h是本机地址%p是 GNS3 给这台设备分配的控制台端口从 2000 起往上加。换成 SuperPutty 的话命令是SuperPutty.exe -telnet %h -P %p用 Putty 则是putty.exe -telnet %h -p %p两者的端口参数一个是-P一个是-p抄错一个字母的表现就是双击设备毫无反应。SecureCRT 有一个内置控制台没有的功能File → Log Session把整场实验的终端输出落到一个 txt 文件里。配置过程中每一台路由器的show ip int brief、show ip ospf neighbor、show mpls ldp neighbor全在里面写报告时直接截取不用反复登录设备补截图。我习惯开一个总日志文件名带上日期事后回查某条命令当时回显了什么比凭记忆靠谱得多。还有个前置条件容易被忽略Win10 默认不带 telnet 客户端。控制面板 → 程序 → 启用或关闭 Windows 功能 → 勾上“Telnet 客户端”。不勾的话GNS3 双击设备会弹一下黑框就消失看起来像设备没启动其实是本机没有 telnet 可用。3. 五台 3640 的 IP 编址与 OSPF 110先把三层打通再谈标签3.1 拓扑和编址表一处和原报告不一样的地方拓扑是一条链R1—R2—R3—R4—R5四段互联每段一个 /24每台设备各带一个 loopback 作为后面 LDP 传输地址和路由标识。设备接口IP / 掩码对端R1s1/012.1.1.1/24R2 s1/0R1loopback01.1.1.1/24—R2s1/0 / s1/112.1.1.2/24 / 23.1.1.2/24R1 / R3R2loopback02.2.2.2/32—R3s1/0 / s1/123.1.1.3/24 / 34.1.1.3/24R2 / R4R3loopback03.3.3.3/32—R4s1/0 / s1/134.1.1.4/24 / 45.1.1.4/24R3 / R5R4loopback04.4.4.4/32—R5s1/045.1.1.5/24R4 s1/1R5loopback05.5.5.5/32—关于接口名有一个地方要讲清楚。原报告里 R1 用f0/0配 12.1.1.1R2 用s1/0配 12.1.1.2两者是同一段互联而在 GNS3 里以太网口和串口是连不起来的拖线时链路直接建不了。原文后面 MPLS 那段 R2 又出现了int sf0/0和int f1/0说明整理报告时接口名写混了。我这一版的做法是五台全部走 NM-4T互联统一用s1/x编址、掩码、OSPF 进程号、LDP 配置一律照原报告不动只把 R1 的f0/0换成s1/0。命令行和报告依然对得上拓扑也能真的连起来跑。3.2 接口配置clock rate 和 no shutdown 缺一不可以 R1 为例先配互联口和回环口R1#config t R1(config)#int s1/0 ! 进入串口 1/0对接 R2 的 s1/0 R1(config-if)#ip address 12.1.1.1 255.255.255.0 R1(config-if)#clock rate 64000 ! 本端为 DCE 时提供时钟DTE 端不用配 R1(config-if)#no shutdown ! 物理口默认管理性关闭必须打开 R1(config-if)#exit R1(config)#int loopback0 ! 回环口用作 router-id 与 LDP 传输地址 R1(config-if)#ip address 1.1.1.1 255.255.255.0 R1(config-if)#exit R1(config)#exit R1#write ! 保存到 startup-config重启不丢clock rate 64000只配在链路的 DCE 一端。GNS3 建串口连线时通常会自动给一端下发时钟但手动改过链路或者两端都没配上show ip int brief就会显示成serial1/0 12.1.1.1 YES manual up down——物理层 up、协议层 down。判读就记一条up/down 先看时钟down/down 先看no shutdown和连线对不对得上。R2 到 R5 的写法完全一样只是接口和地址不同。R2 是两个串口一进一出R2#config t R2(config)#int s1/0 R2(config-if)#ip address 12.1.1.2 255.255.255.0 R2(config-if)#clock rate 64000 R2(config-if)#no shutdown R2(config-if)#exit R2(config)#int s1/1 R2(config-if)#ip address 23.1.1.2 255.255.255.0 R2(config-if)#clock rate 64000 R2(config-if)#no shutdown R2(config-if)#exit R2(config)#int loopback0 R2(config-if)#ip address 2.2.2.2 255.255.255.255 ! 回环口用 /32只占一个地址 R2(config-if)#exit R2(config)#exit R2#writeR3、R4 各有两个串口照 R2 的结构改地址R5 只有一个串口照 R1 的结构。都配完之后逐台核对R1#show ip int brief Interface IP-Address OK? Method Status Protocol s1/0 12.1.1.1 YES manual up up Loopback0 1.1.1.1 YES manual up up两个字段都必须是 up。然后用ping 12.1.1.2测直连通了再往上走。这段链路连通性测试要逐段做一段不通就往上叠 OSPF后面排查会变成一锅粥——路由不通到底是接口没起、还是宣告漏了、还是 LDP 传输地址不可达三层问题混在一起很难定位。3.3 OSPF 110router-id 和 network 宣告怎么写三层通到直连还不够环回口之间要互达才有后面的标签交换。以 R1 为例R1#config t R1(config)#router ospf 110 ! 110 是进程号只在本机有效五台一致便于排查 R1(config-router)#router-id 1.1.1.1 ! 用 loopback 地址后面 LDP 传输地址也取它 R1(config-router)#network 1.1.1.1 0.0.0.0 area 0 ! 反掩码全 0 表示精确匹配这一条 /32 R1(config-router)#network 12.1.1.1 0.0.0.0 area 0 R1(config-router)#end R1#writenetwork后面的反掩码是容易写错的地方0.0.0.0精确匹配一个地址0.0.0.255匹配整个 /24。两种写法在这份实验里效果一样只要宣告的地址落在接口网段内就行写成255.255.255.255就一条都宣告不进去show ip ospf interface brief里那个接口的 Area 会是空的。R2、R3、R4 是中间节点两个串口网段都要宣告漏一个方向整条链就断在中间。R2 的写法R2#config t R2(config)#router ospf 110 R2(config-router)#router-id 2.2.2.2 R2(config-router)#network 2.2.2.2 0.0.0.0 area 0 R2(config-router)#network 12.1.1.2 0.0.0.0 area 0 R2(config-router)#network 23.1.1.2 0.0.0.0 area 0 ! 两个方向都要宣告 R2(config-router)#end R2#write验证分三步。先看邻居show ip ospf neighbor里 State 必须是FULL卡在INIT或EXSTART说明宣告或 MTU 有问题。再看路由表show ip route 5.5.5.5应该是一条 O 路由下一跳指向对端串口地址、出接口是 s1/x。最后看 OSPF 接口状态show ip ospf interface brief参与宣告的接口都应该在 Area 0 里、状态是 P2P。R5 侧只宣告5.5.5.5和45.1.1.5两条即可。全部配完在 R1 上ping 5.5.5.5 source 1.1.1.1五个感叹号回来三层就算通了——带source是关键不带的话源地址用的是出接口地址测不出环回口到环回口的可达性。4. 开 MPLS 与 LDPip cef 是地基mpls ip 要两头都开4.1 ip cef 是整套标签转发的地基MPLS 的标签转发依赖 CEFCisco 快速转发维护的 FIB 表12.4 的镜像默认就开着 CEF。检查方式R1#show ip cef summary IPv4 CEF is enabled for distributed only ...如果之前有人执行过no ip cef在接口下敲mpls ip会被直接拒绝报% MPLS requires CEF to be enabled。全局补一条就行R1#config t R1(config)#ip cef ! 显式开启幂等操作开过再敲不报错 R1(config)#end这一步建议五台都显式敲一遍。看起来是废话但真遇到镜像被改过配置的情况mpls ip敲不进去而你又找不到原因最后发现是 CEF 被关了这种坑最耗时间。4.2 逐台开接口 MPLSLER 和 LSR 的配置其实一样先看 R1 和 R2 的写法R1#config t R1(config)#ip cef R1(config)#int s1/0 R1(config-if)#mpls label protocol ldp ! 该接口用 LDP 分发标签不写默认也是 LDP R1(config-if)#mpls ip ! 在该接口启用 MPLS 转发 R1(config-if)#end R1#writeR2#config t R2(config)#ip cef R2(config)#int s1/0 R2(config-if)#mpls label protocol ldp R2(config-if)#mpls ip R2(config-if)#exit R2(config)#int s1/1 R2(config-if)#mpls label protocol ldp R2(config-if)#mpls ip R2(config-if)#end R2#writempls label protocol ldp是接口级的协议选择可选ldp和tdp12.4 里默认就是 LDP写出来是为了让配置可读也避免继承到旧配置。mpls ip才是真正打开转发的那条命令。这里有个必须强调的点mpls ip要开在所有参与转发的接口上入方向和出方向都要。R2 有两个串口两个都得开只开 s1/0 不开 s1/1LDP 邻居可能照样能起来邻居是靠直连链路和传输地址建 TCP 会话的但转发时出接口没有标签可用show mpls forwarding-table里那一条要么没有、要么出标签显示为Untagged数据包到这一跳就被迫走 IP 转发。LER 和 LSR 的区别不在命令上在角色上。R1、R5 是边缘设备LER收 IP 包时压入标签、出 MPLS 域时弹出标签R2、R3、R4 是核心LSR只做标签交换。配置代码一模一样区别体现在转发表里R1 的入方向没有入标签R2 到 R4 的每一行都有一对入标签和出标签。R3、R4 照 R2 的结构配两个口R5 照 R1 配一个口五台都配完再进下一步。4.3 LDP 会话和标签绑定表的初次检查配完不要急着看转发表先确认邻居起来没有R1#show mpls ldp neighbor Peer LDP Ident: 2.2.2.2:0; Local LDP Ident 1.1.1.1:0 TCP connection: 2.2.2.2.646 - 1.1.1.1.11021 State: Oper; Msgs sent/rcvd: 24/25; Downstream; Last TIB ver: 12 Up time: 00:03:41State: Oper才算真的建立完成TCP connection那一行显示的是 646 端口上的会话后面的 11021 是本端随机高位端口。Peer LDP Ident是对方的 LDP 标识注意它默认取路由器上所有接口里最大的 IP 地址不一定是 loopback。这就引出一个细节如果某台设备后来加了一个地址更大的接口LDP 标识会变会话重建全网的标签跟着重算。稳妥做法是在全局固定R2#config t R2(config)#mpls ldp router-id loopback0 force ! 固定用 loopback0 作标识force 立即生效 R2(config)#end五台都按各自 loopback 固定一遍后面的标签表才稳定可复现。再看接口状态和绑定表R1#show mpls interfaces Interface IP Tunnel Operational Serial1/0 Yes (ldp) No YesOperational一列是Yes说明 MPLS 在这个接口上真的生效了。绑定表用show mpls ldp bindings看输出里每个目的网段都有一行 local 和一行 remotelocal 是本机给这个前缀分配的入标签remote 是下游邻居通告过来的出标签。远端环回5.5.5.5/32这一条五台都应该有记录如果某台缺了说明它没有从邻居那里学到这条路由回到路由表去看。5. 常见问题排查LDP 邻居起不来与标签不分发的五种现场5.1 五种翻车记录现象、原因、解决第一条设备开机 CPU 跑满、命令行延迟几秒才回显。现象是 GNS3 里五台都显示 running但 SecureCRT 敲enable要等三四秒原因是没有设置 idle-pcdynamips 用满核在跑轮询解决是逐台右键 Idle-PC 采样取值然后进设备show processes cpu确认降到个位数。顺便说idle-pc 选错值也会出现类似现象只是没那么严重判断标准永远是show processes cpu的实际读数。第二条两台设备之间拖不出连线GNS3 直接拒绝建链。现象是鼠标从一个设备的f0/0拖到另一个设备的s1/0松开就报错、线不出现原因是接口类型不匹配以太网口只能接以太网模块、串口只能接串口解决是把两端统一要么都插 NM-4T 走s1/x要么都插 NM-1FE-TX 走f0/x。原报告里 R1 的f0/0和 R2 的s1/0属于同一段互联就是踩了这个坑我这一版统一改成串口。改完之后编址不变、命令不变只是接口名换了。第三条show ip本文还有配套的精品资源点击获取