现在的位置: 首页 > 综合 > 正文

使用Dynamips + Dynagen构建你自己的Cisco网络实验室

2011年08月17日 ⁄ 综合 ⁄ 共 5776字 ⁄ 字号 评论关闭

0. 前言

这篇文章介绍了如何使用Dynamips + Dynagen构建你自己的虚拟Cisco网络实验室。这篇文章将帮助你了解Dynamips和Dynagen的作用,介绍设置Dynagen的配置文件,指定虚拟设备之间的拓扑连接方式以及正确计算Idlepc值的方法。

1. Dynamips简介

Dynamips是由法国贡比涅科技大学的克里斯托弗•菲尔洛特(Christophe Fillot)编写的Cisco设备模拟器。Dynamips不同于传统的纯软件式模拟器,它模拟了多种型号的Cisco路由器的硬件平台,用户可以在模拟器中直接加载并运行真正的IOS镜像,这使得Dynamips可以成功模拟出99%以上的IOS功能,并且确保在绝大多数情况下得到的结果与真实设备的结果相同。

Dynamips是一款最初在Linux平台上开发的开源软件。后来被成功迁移到了Windows和Mac OS X平台。Dynamips最开始仅能够模拟Cisco 7200路由器,现在已经可以模拟Cisco 1700/2600/3600/3700多种型号路由器。Dynamips最新版本是0.2.8-RC2,你可以在http://www.ipflow.utc.fr/blog/下载到最新版本的源程序和二进制编译包。

最新版本的Dynamips更新于2007年10月,此后作者再也没有对该模拟器进行过更新。有迹象表明该项目目前已经被中止。

注意:Dynamips从来没有实现过模拟交换机的功能。在模拟Cisco 3600等型号时,Dynamips可以模拟NM-16ESW模块来实现交换机的一小部分功能。NM-16ESW和真正的交换机在功能上还是有非常大的差距。

注意:Dynamips仅仅模拟了相应路由器的“功能”,而并非“性能”,所以不要期望模拟器可以替代真实的设备。

 

2. Dynagen简介

Dynamips是一个纯粹的命令行程序。当我们需要模拟一个由多台设备组成的复杂网络时,纯粹的命令行配置会显著地增加配置复杂度。许多第三方团体或个人开发了各种Dynamips的前端程序来简化Dynamips的配置过程。其中最著名的前端程序是Dynagen。

Dynagen通过类似INI文件格式的配置文件(后缀为.net)来定义Dynamips模拟设备的型号、参数,以网络的拓扑连接方式。Dynagen同样是一款开源软件,你可以在http://dynagen.org/下载到其最新版本。该软件最后一次更新于2008年4月,最新版本号是0.11。

 

3. 安装Dynagen和Dynamips

Dynagen开发组制作了针对不同操作系统的打包安装包,你可以在http://sourceforge.net/project/showfiles.php?group_id=160317下载到这些安装包。For Windows和For Mac OS X的安装包集成了最新版的Dynamips 0.8.2-RC2,所以你不需要再额外下载Dynamips。

Dynamips依赖WinPcap这个著名的动态链接库,你可以从http://www.winpcap.org/下载。最新的版本是4.0.2。

将Dynagen和WinPcap下载后,运行安装。安装过程非常简单,一路点击“下一步”就可以。两个程序的安装顺序没有要求,但是在成功安装WinPcap之前你无法正常使用Dynamips。

 

4. 启动Dynamips Server

Dynamips Server是整个Dynamips模拟器的核心,在开始模拟虚拟路由器设备之前必须首先启动Dynamips Server。在整个的模拟过程中Dynamips Server不能被关闭,否则所有正在运行的虚拟路由器也会立即被关闭。

安装Dynagen后在桌面上会产生若干个快捷方式,双击“Dynamips Server”即可启动Dynamips Server。正常的结果应该是看到类似这样的一个窗口:


建议:为了防止在实验过程中意外关闭Dynamips Server,建议你将该窗口最小化。
切记:在实验过程中关闭该窗口会导致模拟器终止运行!Dynamips Server总是应该首先启动,最后关闭。
5. 准备IOS镜像文件和.NET配置文件
Dynamips Server成功启动后,我们就可以开始编写Dynagen的.NET配置文件设置虚拟设备的连接拓扑结构。你需要为模拟设备准备相应版本的Cisco IOS镜像文件,并将镜像文件放置在一个路径中没有中文的目录中。
注意:Cisco IOS镜像文件受版权保护,未经授权不得复制、使用IOS镜像文件。
接下来我们需要准备Dynagen需要的.NET配置文件。.NET配置文件是纯文本文件,所以你可以使用如记事本等程序创建和编写。不要使用写字板或Word之类的rich-text编辑器修改。.NET文件也必须放置在路径中没有中文的目录下。
切记:Cisco IOS镜像文件和Dynagen的.NET配置文件必须放置在路径中没有中文的目录中,否则会导致模拟器出错。
6. 编写.NET文件
.NET文件有自己的一套语法,下边是一份配置样例:
autostart = false
model = 3640
ghostios = true
sparsemem = true
[localhost]
    [[3640]]
    image = D:/c3640-jk9o3s-mz.124-10a.bin
    ram = 128
    idlepc = 0x604fb194
    slot0 = NM-4E
    slot1 = NM-4T
       
    [[Router R1]]
    e0/0 = ETHSW1 1
  
    [[Router R2]]
    s1/0 = FRSW1 2
    [[Router R4]]
    s1/0 = FRSW1 4
    [[Router R5]]
    e0/0 = ETHSW1 5
    s1/0 = FRSW1 5
    [[Router R6]]
    s1/0 = FRSW1 6
    e0/0 = R8 e0/0
    [[Router R8]]
    [[Router R9]]
    e0/0 = ETHSW1 9
    [[FRSW FRSW1]]
    5:502 = 2:205
    5:506 = 6:605
    2:206 = 6:602
    2:204 = 4:402
    [[ETHSW ETHSW1]]
    1 = access 15
    5 = dot1q 1
9 = access 59
开始的四行是全局配置参数。
Autostart:指定是否所有虚拟路由器在Dynagen控制台启动后立即自动启动,这里推荐值是false,我们可以在控制台用命令按需启动以降低对计算机资源的无谓消耗
Model:指定虚拟路由器的默认型号。尽管Dynamips可以模拟出多种型号的Cisco路由器,在功能丰富程度与资源消耗之间最平衡的一个型号就是3640。我个人推荐你模拟这个型号的路由器,无论是准备CCNA/CCNP/CCIE R&S/CCIE Sec任意一门考试都没有问题。
Ghostios和sparsemem:这两个选项降低了模拟器对内存的需求。如果你的计算机内存少于1G,强烈建议你将这两个选项设置成true。如果你的计算机内存大约2G,可以将ghostios设置成false。打开这两个选项会轻微地降低模拟器的运行速度,但是考虑到对内存的节省,对于没有海量内存的计算机而言是值得的。
接下来的[[3640]]部分是对模拟路由器具体参数的指定。
Image:指定Cisco IOS镜像文件的路径,在Windows下不区分大小写。这里要注意不要把斜杠写反。
Ram:指定每台虚拟路由器的内存。对于3640而言,128M是一个最合适的值。不同的路由器型号与IOS的组合对这个值都有有最低限制,因此不要随意降低这个值。
Idlepc:这是Dynamips最重要的一个参数。如果这个参数设置不正确,即使模拟一台路由器,宿主计算机的CPU使用率也总是100%,即便一台高性能的计算机也无法顺利模拟3台以上的路由器。而一旦正确设置,即使两年前生产的笔记本电脑也可以轻松模拟高达8台路由器。
计算Idlepc值的正确方法附在本文的最后。Idlepc值是对应IOS镜像文件的。也就是说,每个IOS镜像文件有自己固定的Idlepc值,一旦计算出有效的值,无论在哪一台计算机上,只要运行相同的IOS镜像文件这个值总是有效的。另外,每个IOS镜像文件可能有多个有效的Idlepc值,如果你按照正确的方法计算出了一个和别人都不一样的值,请放心使用。
注意:Idlepc值的计算是Dynamips设置步骤中最复杂却最重要的一步。强烈建议你在正式开始实验项目前计算出正确的Idlepc值。不使用Idlepc值或者使用无效的Idlepc值会导致CPU长期持续工作在100%负载下,会对计算机的散热产生非常严重的影响。在夏季甚至会导致某些笔记本电脑死锁或烧毁!
Slot:指定每个路由器模块插槽里的模块型号。Cisco 3640一共有4个slots,分别是slot0到slot3。你可以根据对路由器接口的需要在模拟路由器上添加不同的模块。虽然Dynamips能够模拟多种模块,但是最常使用的是NM-4E,NM-4T和NM-16ESW(如果你确实想模拟一台简化版的交换机)。NM-4E带有4个10M以太网接口,而NM-4T带有4个串行接口。将模块插在不同的slot中会导致不同的最终接口名。在上边的配置样例中,每台路由器的4个以太网接口分别是e0/0到e0/3,而4个串行口分别是s1/0到s1/3。
最后就是生成每一台虚拟设备和指定虚拟设备之间的连接拓扑。
在上边的配置样例中我们使用命令[[Router Rx]]创建了7台虚拟路由器,每台路由器拥有和[[3640]]部分定义完全相同的配置。这条命令中的字母是大小写区分的,即[[router R1]]并不会创建一台虚拟路由器R1,而是一条不存在的命令。接下来我们定义了每台虚拟设备是怎么连在一起的。例如在上边的配置样例中,R1的e0/0连接在虚拟以太网交换机ETHSW1的接口1,R2的s1/0连接在虚拟帧中继交换机FRSW1的接口2。
虚拟以太网交换机和虚拟帧中继交换机通过[[ETHSW xxx]]或[[FRSW xxx]]命令创建。这两种虚拟交换机用户不能登录上去,也不能在运行时更改它们的配置。它们只是用来提供特殊的连接功能。在上边的配置样例中,我们在虚拟以太网交换机ETHSW1上定义了三个接口,其中接口1是access模式,分配给VLAN 15,接口5是trunking模式。虚拟以太网交换机仅支持802.1Q封装。我们在虚拟帧中继交换机FRSW1上定义了一系列的DLCI交换规则,例如接口5上的DLCI 502交换到接口2上的DLCI 205,接口5上的DLCI 506交换到接口6上的DLCI 605。
注意:在编写拓扑连接规则时,不需要考虑线缆的类型问题(即不需要关心直通线与交叉线的区别),在使用串行连接时不需要考虑DCE的时钟问题,DCE由Dynamips自动模拟和分配时钟,所有的路由器都是DTE端。
7. 开始模拟虚拟路由器
      .NET配置文件编写完成后,将其放置在一个路径中没有中文的目录下。在Dynamips Server保持运行时双击该文件即可开始模拟路由器设备。如果.NET文件编写正确,双击后稍等即会出现类似下边的窗口:


      其中的“Network Successfully Started”表示之前你在.NET文件中所输入的命令是完全正确的。如果.NET文件中有任何语法或逻辑错误,相应的错误提示会出现。你必须修改所有的错误后才能开始配置模拟路由器。
      这个弹出的窗口是Dynagen Console(控制台),你可以在这里控制每一台模拟路由器的启动、停止与重启。使用list命令列出当前模拟的设备:


      左边第一列表示每台虚拟路由器的名字,第三列是这台虚拟路由器的状态。如果状态是running,表示其正在运行中;如果状态是stopped,表示其处于停机状态。
      如果需要启动一台处于停机状态的虚拟路由器,使用命令start R1。
      如果需要使一台正在运行的虚拟路由器停机,使用命令stop R1。
      如果需要重启一台虚拟路由器,使用命令reload R1。
      注意:上边三条命令的设备名部分是大小写敏感,对于上边的例子,输入命令start r1会提示没有这台设备。

8. 登录到虚拟路由器
      在控制台上确定某台虚拟路由器处于running状态后,可以使用命令例如telnet R1登录到R1的console端口。当新的窗口打开后,你就可以开始对虚拟路由器进行操作了。
附1. 计算Idlepc值的正确方法
1) 在不填写Idlepc值的情况下启动任意一台虚拟路由器
2) 登录到虚拟路由器上后,对于这两个问题严格按照下图回答:


      切记:在输入最后一个yes后只按一次回车键!之后会有一串syslog弹出,但是不应该出现Router> 的命令提示符,如果出现了命令提示符即失败。
      3) 回到Dynagen控制台,等待大约10秒后输入命令idlepc get R1(如果刚才你是登录到R1上的),稍等会得到类似下图中的结果:


      正确的结果应该会看到至少一个带有*的值,这些带有*的值就是可能正确的Idlepc值,你可以依次尝试应用。在光标处直接输入要应用的值的序号。
      注意:如果你没有看到任何带有*的值,意味着你的这次计算失败了。请用stop命令关闭虚拟路由器,严格按照上边的步骤重新再试一次。
      4) 如果你选择的Idlepc值是正确的,在应用之后几秒内宿主计算机的CPU使用率会从100%降至5%一下(如果你只运行着一台虚拟路由器的话)。看到这个结果说明这是一个有效的Idlepc值,你可以将它记录下来,写到.NET配置文件中的相应位置。这个值对于这个IOS镜像文件总是有效的。如果CPU使用率没有下降,或者下降并不明显,说这个值是无效的,你可以在Dynagen控制台上用命令idlepc show R1再次显示刚才的计算结果,并输入另一个值的编号继续尝试,直到找到有效的值。

抱歉!评论已关闭.