简介:面向网络初学者与思科认证备考者的GNS3模拟器完整安装与使用教程,重点讲解如何将GNS3与Wireshark、xShell及VMware Workstation关联起来,形成一套可复用的网络实验环境。教程基于GNS3-2.2.7最新版本,覆盖从准备工具、安装主程序,到导入GNS3 VM虚拟机、配置本地服务器与VM引用,再到添加Cisco IOU和IOS镜像的完整流程;同时针对Xshell连接设备、Wireshark抓包、VM参数设置等常见环节给出具体操作说明,并附有相关工具下载地址与提取码,方便按图索骥。整个文件仅一个PDF,大小约2.09MB,图文步骤清晰,可作为日常配置的速查手册,遇到问题时可随时翻查对应章节。已有733人学习下载,适合刚接触模拟器、希望一次性理顺多软件联调配置的读者收藏使用。
1. 为什么是 GNS3:能抓真实报文的 Cisco 模拟器,到底值不值得装
GNS3 这名字听起来像玩具,实际上它能在普通 PC 上跑真实 Cisco IOS。它不像 Packet Tracer 那样把协议行为简化给你看,而是用 Dynamips/QEMU 模拟路由器硬件,把真正的 IOS 镜像灌进去跑——拖两台路由器做实验,报文转发、ARP 处理、路由表查表,全和真机一致。这也是考 CCNA/CCNP、做网络排障绕不开它的原因。
但 GNS3 装完还不能干活:抓包要看报文,得配 Wireshark;多台设备敲配置嫌自带控制台难用,得换 xShell;想放一台真实主机进拓扑,得接 VirtualBox 或 VMware。下面就从安装到关联三个工具、再到跑通跨路由器抓包实验完整走一遍,坑直接标出来,照着能复现。
2. 从零装好 GNS3:依赖组件、首次启动向导与镜像准备
2.1 装 GNS3 前先想清楚:这三个依赖组件决定成败
GNS3 的 Windows 安装包是一个 exe,双击后先自解压再进向导。一路 Next 之前,你要清楚它中间会问你要不要装几样东西,这三样直接决定后面好不好用:
第一是 Npcap,这是抓包的地基。GNS3 在链路上抓包、连接物理网卡、开 Cloud 节点都靠它。安装时有两个复选框,一个是抓 802.11 原始报文(默认不用勾),另一个是「Restrict to admin user only」——这个一定不要勾,勾了普通用户就抓不到包,后面 Wireshark 会变成一个睁眼瞎。第二是 Wireshark,推荐让安装向导一并装掉,省得再去官网单独下;装完确认 Npcap 驱动正常即可。第三是 VirtualBox 或 VMware,向导会探测本机是否已装,没装也不影响 GNS3 本体运行,可以等用到虚拟机节点时再补。
安装路径建议保持英文无空格,项目目录和抓包目录后面单独设置。我的习惯是抓包目录单独放D:\gns3\captures,项目放D:\gns3\projects,不放在系统盘,一是避免权限问题,二是重装系统不丢实验。
注意:如果电脑上曾经装过 WinPcap,先卸载干净再装 Npcap,两个驱动共存会导致抓包接口列表为空。
2.2 首次启动向导:Local Server、GNS3 VM 与 3080 端口
装完第一次启动会弹 Setup Wizard,第一项问运行模式,选 Local Server 即可;除非你要把 GNS3 跑在服务器上、用另一台电脑连它做实验。Local Server 模式下,GNS3 会在本机后台起一个服务进程,默认监听127.0.0.1:3080,GNS3 图形界面只是这个服务的客户端。
装完先验证服务是否真的起来了,看主界面左下角状态灯:绿色是正常,红色是服务挂了,灰色是没启动。也可以在命令行里确认端口:
netstat -ano | findstr 3080看到TCP 127.0.0.1:3080 0.0.0.0:0 LISTENING这一行,说明 Local Server 正常。如果没看到,多半是安全软件拦了本地回环,或者 GNS3 服务没起来,去 Windows 服务列表里找 GNS3 相关服务重新启动。
向导里还有一步是下载 GNS3 VM,一个打包好的 Linux 虚拟机镜像(OVA)。这一步可以跳过,后面在 Preferences → GNS3 VM 里再补装也行。它的用途主要是跑 IOU 镜像和大拓扑,只玩 Dynamips 老路由的话暂时用不上,下一节细说。
2.3 导入 Cisco IOS 镜像:Dynamips 与 IOU 两条路线怎么选
GNS3 本身不提供任何 IOS 镜像,这是新手第一个心理门槛。官方不上传镜像的原因很简单,IOS 是商业固件。教学里常用的思路是:Dynamips 用老的 IOS .bin(比如 c3725、c2600),IOU/IOL 用思科内部培训流出的 IOU 镜像,这些在实验环境和培训资料里常见,来源自己把握,别从不明网盘随便拉文件。
两条路线的选择,直接影响你后面要不要装 VM:
| 对比项 | Dynamips | IOU/IOL |
|---|---|---|
| 运行方式 | 纯软件模拟 CPU | Linux 进程,接近裸机转发 |
| 镜像格式 | 老 IOS .bin | L2 的 .image 和 L3 的 .bin |
| 性能 | 单核模拟,3~5 台就吃力 | 吃内存,CPU 友好 |
| 交换机支持 | 弱,需要加模块 | 原生支持 |
| 前置条件 | 不需要 VM | 推荐 GNS3 VM |
| 适合场景 | 入门、CCNA 路由实验 | 大规模拓扑、交换实验 |
Dynamips 导入流程:Preferences → Dynamips → IOS routers → New,选 .bin 文件,填名称,内存设 128 MB(c3725 常见值),然后在 slot 里加接口模块,比如 slot0 放NM-1FE-TX就有 FastEthernet 口。导入完先右键路由器 → Start,第一次启动会特别慢,因为 Idle-PC 还没算。
Idle-PC 是 Dynamips 的省电机制:IOS 空转时会跑一个死循环,不处理就占满单核 CPU。右键路由器 → Idle PC,等它跑完选带星号的值,CPU 立刻掉下来。换镜像、改内存后要重算。这步做不好,拓扑一多就卡成幻灯片,属于必踩的坑,第 5 章再展开。
IOU 的导入则是另一套:先装 GNS3 VM,把 OVA 导入 VirtualBox/VMware 并在 GNS3 偏好里勾选启用,然后把 IOU 镜像放到用户目录的GNS3/images/IOU下,新建 IOS on Linux 模板时指定镜像。IOU 不需要也没法算 Idle-PC,跑起来又轻又快,但配置链路比 Dynamips 多一层,新手不急着碰。
3. 把 Wireshark、xShell、VM 绑进 GNS3:抓包、终端与虚拟主机的三处配置
3.1 关联 Wireshark:右键 Start Capture 背后的链路与三处设置
GNS3 的链路在底层是 UDP 隧道,Dynamips 用 NIO(网络输入输出)模拟接口,包在拓扑里流动。点右键 → Start Capture 时,GNS3 调用 dumpcap 把这条链路上的流量镜像成 pcap 文件,再拉起 Wireshark 打开。也就是说,抓包是 GNS3 在链路层面完成的,Wireshark 只负责显示,你改 Wireshark 的布局、主题、过滤器,都不影响 GNS3 本身。
关联配置在 Preferences → Packet capture 里,三处要确认:Wireshark 可执行文件路径、dumpcap 路径、抓包保存目录。前两个只要 Wireshark 装好了,GNS3 会自动检测,检测不到就手动指到 Wireshark 安装目录。保存目录我建议单独设成D:\gns3\captures这种纯英文路径,放默认临时目录容易因为权限或中文路径出问题。
抓包操作很简单:右键任意一条链路 → Start capture,拓扑图上出现一个小摄像头图标;实验做完回到这条链路上 Stop capture,会弹框问你要不要保存 pcap。多条链路可以同时抓,每开一条就弹一个 Wireshark 窗口,窗口之间用接口名区分。
进了 Wireshark 之后,几个最常用的过滤器:
arp icmp ip.addr == 10.0.3.10 tcp.port == 80arp只看地址解析报文,ip.addr == 10.0.3.10就是「只抓固定 IP 的数据」,等价于热搜里那个问题。时间显示默认是相对秒数,建议改成绝对时间:View → Time Display Format → Date and Time of Day,这样抓包里直接就是北京时间,对照实验时间点不头晕。
3.2 把 xShell 设成默认终端:一条命令替换 GNS3 自带 Console
GNS3 自带一个基于 Qt 的控制台窗口,能用,但字小、复制麻烦、多台设备要开一堆窗口。xShell 的标签页管理和复制粘贴手感好得多,而且支持日志录制,是很多工程师的习惯配置。
替换方法:Preferences → Console applications,找到 Telnet 那一行,默认值是telnet %h %p,改成 xShell 的调用:
"C:\Program Files\NetSarang\Xshell 7\Xshell.exe" telnet://%h:%p%h是 GNS3 控制台服务器的地址,通常是127.0.0.1;%p是这台设备的 console 端口,默认从 5000 开始,每加一台设备递增。这两个占位符是关键:较新版本的 GNS3 用%h,老版本可能用%d,填错了的效果是 xShell 能打开但连不上,或者参数原样传给 xShell 直接闪退。
注意 xShell 的安装目录版本号,你装的是哪个版本就填哪个路径。xShell 有官方免费的家庭/学校版本,从官网下载即可,别用来路不明的软件站版本。改完设置后,右键任意路由器 → Console,应该直接弹出 xShell 标签页并进入设备命令行。
如果 xShell 就是调不通,有个兜底:用 Putty 或 MobaXterm 替换成:
"C:\Program Files\PuTTY\putty.exe" -telnet %h %pPutty 的参数格式极其稳定,永远不会踩 xShell 评估版弹窗的坑。先拿 Putty 确认 GNS3 的 console 调用链路没问题,再回来折腾 xShell,排查效率更高。
3.3 关联 VM:VMware 与 VirtualBox 两种接法,网卡与混杂模式是关键
标题里的「关联 VM」实际有两层含义,新手最容易混淆。第一层是 GNS3 VM:官方打包的 Linux 虚拟机(OVA),导入 VMware 或 VirtualBox 后,GNS3 把 IOU 镜像丢给它跑,解决本地跑大拓扑的资源问题。第二层是把你自己装的 Windows 10 或 Ubuntu 虚拟机当作一个「主机节点」拖进拓扑,让它参与 GNS3 网络,相当于一台真实电脑连着路由器。
先讲第二层,因为这是「两台路由器分别连接主机」实验的基础。VirtualBox 的接法是:Preferences → VirtualBox,指定 VBoxManage.exe 的完整路径(一般在 VirtualBox 安装目录下),然后在拓扑里拖入一个 VirtualBox VM 节点,选具体哪台虚拟机。VMware 同理,需要 vmrun.exe。两个关键参数:
- 网卡类型选 Intel PRO/1000 或 PCnet-FAST III,别用默认的 virtio,GNS3 对它的支持不稳。
- 混杂模式选「全部允许」,否则 VM 抓不到目的 MAC 不是自己的广播、组播报文,后面分析 ARP 会缺数据。
注意:VM 的网络适配器不要选 NAT。GNS3 拓扑本身就是一个私有二层网络,VM 的网卡应该设成「仅主机」或「内部网络」,让它和 GNS3 的虚拟链路在同一个广播域里。
GNS3 VM 的接法不一样:安装向导或 Preferences → GNS3 VM 里会引导你下载 OVA,导入虚拟机软件后回 GNS3 勾选启用,再把 IOU 镜像路径配好。如果提示 failed to connect 或找不到 VM,大多是路径没指对或虚拟机软件版本和 GNS3 不匹配,具体在第 5 章排查。
4. 跑通第一个实验:两台路由器跨网段转发,抓 ARP 与 IP 报文看逐跳变化
4.1 拓扑与地址规划:为什么要跨两台路由器
实验拓扑是一条直线:PC-A 接 R1,R1 接 R2,R2 接 PC-B。用文字描述就是「两个路由器分别连接两台主机」,这正是标题对应的典型实验。地址规划如下:
| 设备 | 接口 | IP 地址 | 网关 |
|---|---|---|---|
| PC-A (VPCS) | eth0 | 10.0.1.10/24 | 10.0.1.1 |
| R1 | e0/0 | 10.0.1.1/24 | - |
| R1 | e0/1 | 10.0.2.1/24 | - |
| R2 | e0/0 | 10.0.2.2/24 | - |
| R2 | e0/1 | 10.0.3.1/24 | - |
| PC-B (VPCS) | eth0 | 10.0.3.10/24 | 10.0.3.1 |
三个网段互不重叠,PC-A 到 PC-B 要跨两跳。为什么特意跨两台?一跳只能看到「路由器改 MAC 转发」,两跳才能同时看到 TTL 连续递减两次、每个广播域各自发 ARP 这两个现象——这是理解「IP 端到端、MAC 逐跳」的关键。
路由器用 Dynamips 的 c3725 镜像,接口名可能是 e0/0 也可能因模块不同变成 f0/0,以show ip interface brief输出为准。R1 配置:
enable configure terminal hostname R1 interface e0/0 ip address 10.0.1.1 255.255.255.0 no shutdown interface e0/1 ip address 10.0.2.1 255.255.255.0 no shutdown ip route 10.0.3.0 255.255.255.0 10.0.2.2 end writeno shutdown是激活接口,忘写等于网线没插。ip route 10.0.3.0 255.255.255.0 10.0.2.2是静态路由:去 10.0.3.0/24 网段,下一跳交给 10.0.2.2。两跳拓扑不需要跑 OSPF,静态路由足够,还少一层协议噪音。R2 配置对称,注意回程路由是ip route 10.0.1.0 255.255.255.0 10.0.2.1。
PC 节点用 VPCS,GNS3 自带的虚拟 PC,启动快、配置只要一行。PC-A 和 PC-B 分别执行:
ip 10.0.1.10 255.255.255.0 10.0.1.1 ip 10.0.3.10 255.255.255.0 10.0.3.1VPCS 的ip命令依次是地址、掩码、网关,和路由器配置里的ip address含义一致。
4.2 从 PC-A 到 PC-B:逐跳抓包看 ARP 与 TTL 的变化
先把三条链路全部 Start capture:PC-A↔R1、R1↔R2、R2↔PC-B,然后回到 PC-A 上发 ping:
ping 10.0.3.10 20VPCS 的 ping 后面跟次数,20 个包足够你在三个 Wireshark 窗口之间来回翻。顺序很重要:一定要先开抓包再发流量,反过来就什么都抓不到。
看第一个窗口(PC-A 到 R1 的链路)。前两条报文是 ARP:先是who has 10.0.1.1? tell 10.0.1.10,这是 PC-A 在找网关的 MAC;紧接着 R1 回了一条10.0.1.1 is at 52:00:...。之后 ICMP echo request 从 PC-A 发出,Ethernet 层目的 MAC 是 R1 的 e0/0 接口 MAC,源 MAC 是 PC-A 自己的。
看第二个窗口(R1 到 R2 的链路)。这里会再次出现 ARP,但问的是who has 10.0.2.2——这是 R1 在找 R2 的 MAC,和第一条链路毫无关系。然后同一个 ICMP echo request 在这里出现,用 Wireshark 里的 ICMP identifier 和 sequence number 和第一个窗口比对,能确认是同一个包。此时 Ethernet 层源 MAC 已经变成 R1 的 e0/1 接口 MAC,IP 层的 TTL 从 64 变成 63。
看第三个窗口(R2 到 PC-B 的链路)。如果 PC-B 的 ARP 缓存是空的,R2 会先替 PC-B 做一次 ARP 请求;随后 ICMP echo request 到达,TTL 已经变成 62。回包过程完全对称,从 PC-B 一路回到 PC-A,TTL 再逐跳减回。
VPCS 模拟的是 Linux 协议栈,所以初始 TTL 是 64。如果你按第 3 章把 PC-B 换成一个真实的 Windows 虚拟机,初始 TTL 会是 128,经过两个路由器后 PC-A 收到时是 126。这个差别正好验证了「TTL 由源主机决定,每台路由器只负责减一」这个知识点。
想在路由器侧看转发决策,xShell 里连上 R2 的 console 后执行:
debug ip packet然后回到 PC-A 再 ping 一次。R2 的 console 会实时打印类似ip: s=10.0.1.10 ... d=10.0.3.10 ...的转发日志,等于把黑匣子的内部决策过程直接摊开给你看。看完记得undebug all关掉,这命令在真机上开久了会淹没 CPU,实验环境也一样。
4.3 中途停掉路由:不配静态路由时,路由器会怎么处理这个包
把 R1 的静态路由删掉,制造一个「路由黑洞」:
configure terminal no ip route 10.0.3.0 255.255.255.0 10.0.2.2 end回到 PC-A 再 ping 一次,注意观察抓包窗口:PC-A 到 R1 的链路上照常有 ICMP echo request 发出去,但 R1 到 R2 的链路上安静得可怕。这是因为 R1 查路由表找不到 10.0.3.0/24 的表项,也没有默认路由兜底,直接把包丢了。丢包不产生任何回声,PC-A 那边只能等到超时。
这个实验解释了一个常见误解:很多人以为「ping 不通就会收到 destination unreachable」,其实只有当路由器的确知道自己无路可走、并且接口上有相应的 ICMP 控制策略时,才会回这个报文。很多情况下路由器是悄悄丢包,你在抓包里只能看到一个方向的 request,等不到 reply。
这个现象直接对应排障口诀:ping 不通先查路由表,别只盯着抓包看。把路由加回去,实验就完整了。
5. 避坑与排查:GNS3 关联三工具最常见的 5 个坑
5.1 Npcap 装完抓不到任何接口
现象:GNS3 和 Wireshark 都装好了,但右键 Start capture 报错,或者 Wireshark 主界面的接口列表是空的。
原因:Npcap 安装时勾了「Restrict to admin user only」,普通权限下驱动不加载;或者系统里残留 WinPcap,两个驱动的底层服务互相冲突。
解决:控制面板里把 WinPcap 和 Npcap 都卸载干净,重新装 Npcap,取消「仅管理员」勾选,装完重启。验证方式很简单,打开 Wireshark 看接口列表,能看到真实网卡接口就说明驱动活了。
5.2 Idle-PC 没算好,路由器 CPU 一路飙到 100%
现象:拓扑里路由器一旦启动,整台电脑开始卡顿,任务管理器里 Dynamips 进程吃满一个 CPU 核心,GNS3 提示路由器 CPU 占用过高。
原因:这个 IOS 镜像没有计算 Idle-PC 值,IOS 的空转死循环满速跑。镜像文件、内存大小变了之后,旧 Idle-PC 也可能失效。
解决:右键路由器 → Idle PC,等计算跑完,选一个带星号的值。如果一次算出来不理想,多算几次取稳定值。GNS3 新版有 Auto Idle-PC 选项,但老镜像我一般手动算,心里踏实。换镜像或改 RAM 后重算,别偷懒。
5.3 Start capture 打开的 pcap 是空的
现象:Wireshark 窗口正常弹出来,但一直显示 No Packets captured,可拓扑图上明明有流量在跑,ping 也通。
原因:抓包保存目录在带中文或空格的路径下,dumpcap 权限不足写不进文件;或者抓包动作在流量发完之后才开始;或者抓的那条链路不是实际转发路径。
解决:Preferences → Packet capture 里把保存目录改成D:\gns3\captures这种纯英文路径。操作顺序必须是先 Start capture,再发起 ping。如果之前已经 ping 过,VPCS 和路由器的 ARP 缓存可能让最开始的几个包不出现,等缓存老化或者干脆重启节点,让实验回到干净状态。另外确认拓扑连线是蓝色已连接状态,别抓了一条没插好的备用链路。
5.4 xShell 接不上 Console:点了没反应或闪退
现象:右键路由器 → Console,xShell 打开一个标签页又马上消失,或者提示连接失败。
原因:GNS3 的占位符和 xShell 版本不匹配。老版本 GNS3 用%d传主机地址,新版本用%h,填错了 xShell 收到一个没被替换的%h自然连不上。另一个常见原因是 xShell 首次运行会弹评估版提示窗口,弹窗打断了 URL 参数传递。
解决:先在命令行里手动验证端口通不通:
telnet 127.0.0.1 50005000 是这台设备的 console 端口,在节点属性里能看到。端口通,说明问题在 GNS3 的调用命令;检查占位符是%h还是%d。端口不通,检查 GNS3 Server 状态和防火墙。xShell 弹窗问题,把评估提示点掉再试一次,或者干脆用 Putty 兜底。
5.5 GNS3 连不上虚拟机:报 failed to connect 或节点一直红叉
现象:拓扑里拖入一个 VirtualBox 或 VMware 节点,节点状态变成红色,报 failed to connect to remote vm,或者 GNS3 找不到指定的 VM。
原因:Preferences 里 VBoxManage.exe 或 vmrun.exe 的路径没填,GNS3 找不到命令行工具;或者虚拟机正被 VirtualBox GUI 占用,GNS3 拿不到控制权;再或者网卡类型不被 GNS3 识别。
解决:先在 Preferences 里手动指定 VBoxManage.exe / vmrun.exe 的完整路径,别指望自动检测。关掉 VirtualBox 的图形界面,让 GNS3 独占控制。VM 的网卡换成 Intel PRO/1000 或 PCnet-FAST III,混杂模式开「全部允许」。改完这些还不行,把拓扑里的 VM 节点删掉,重新拖一个新模板再选一次 VM,强制重新读取配置。
6. 让实验可复用:tshark 命令行与 xShell 日志的验证技巧
6.1 用 tshark 把三次抓包压成一行验证命令
Wireshark 的 GUI 适合交互式看包,但每次实验都开三四个窗口去翻,效率太低。tshark 是 Wireshark 自带的命令行工具,可以把你刚才在 GUI 里用的过滤器原样搬到命令行里批量跑:
cd "C:\Program Files\Wireshark" tshark -r D:\gns3\captures\pcA-to-R1.pcapng -Y "arp.opcode==1" -T fields -e ip.src -e arp.dst.proto_ipv4-Y后面跟的是显示过滤器语法,和 Wireshark 过滤框里写的完全一致。这条命令只输出 ARP 请求报文,把「谁的 IP 在问谁的 IP」直接拉成两列。想验证 TTL 逐跳递减,把 pcap 换成 R1-R2 链路那份:
tshark -r D:\gns3\captures\r1-to-r2.pcapng -Y "icmp" -T fields -e ip.src -e ip.dst -e ip.ttl输出里能看到同一个源地址的 ICMP 包 TTL 稳定在 63,而第一段链路上是 64,两跳链路一对比,TTL 变化一目了然。跑通一次之后,把这几条命令存成一个.bat脚本,以后每次做实验只换 pcap 文件名,验证效率会高很多。
6.2 xShell 日志记录:你的配置后悔药
xShell 有个被忽略的功能:会话属性 → 终端 → 日志,可以开启日志记录,文件名里带日期变量,每次连接自动生成一份带时间戳的文本日志。连上路由器后,把show running-config、show ip route、show arp的输出刷一遍,这些输出就全部落盘了。
我现在的习惯是:每搭好一个 GNS3 拓扑,先改一次配置就存一份日志。实验改坏了,翻日志找回上一版配置;抓包结果有疑点,对照日志里的路由表快照排查。抓包文件按链路命名放好,tshark 脚本批量验证,日志文件按日期归档——这套流程跑顺之后,GNS3 就不再是一个玩具模拟器,而是一张可以反复折腾、永远坏不掉的网络实验床。希望帮到你。
本文还有配套的精品资源,点击获取