浅谈实验环境的搭建

前言

还记得刚开始学习网络知识的时候,手里捧着CCNA的教材,桌子上放着一台废置的思科路由器,用console线连接着老旧的台式机。每当看到教材上介绍一条简单的命令时,就在键盘上自己照着敲一遍,看到屏幕上简单的文字输出,心里还暗自高兴,觉得自己又学会了一条新的命令。

但是随着学习的深入,我开始接触到一些需要多台设备进行互连才可以进行实验的知识,例如一些路由协议,这时一台路由器+一台电脑这样的组合自然是满足不了我的需求了,于是便开始向经验老到的同事请教,他们向我推荐了Dynamips思科网络设备模拟器。

在网上简单的搜索了一下安装文件及安装指南,很快便可以上手。从此,Dynamips在我的所有电脑里都一直占据着一席之地。

再后来,自己又想学习理解一下Linux方面的知识,找一台物理机直接安装一个Linux系统显然是不靠谱的,这又让我认识了VMWare Workstation。

到了现在,情况更为复杂了,我不仅需要模拟几台Linux主机,还需要使用网络设备将他们进行互连,另外,我还需要对多台主机之间通信的数据包进行捕获并观察,需要了解虚拟环境中所有虚拟设备具体行为状态。

Dynamips+VMWare是可以实现主机与网络设备互连这种虚拟环境的,这在很早前就已经在网上的资料里了解到了,但是拿着单核2G内存的笔记本电脑,看着任务管理器里显示的CPU利用率在打开2台路由器时就已经100%了,心里顿时没有了想法。

不过感谢科技的进步,现在,我们有了强大的i7四核笔记本,我们有了Splunk,有了大理帮助进行数据包捕获和分析,当初那种搭建一个万能实验环境的想法又冒出来了。

Dynamips

我相信Dynamips这个软件相信所有思科认证的考生都会用过,它是一个基于虚拟化技术的模拟器,用于模拟思科的路由器,同时配合特定的IOS版本以及虚拟的slot板卡,可以实现对交换机的模拟,其作者是法国UTC大学的Christophe Fillot。

在安装Dynamips之前,需要先下载并安装Winpcap,这里推荐安装4.0版本。

而Dynagen则是一个帮助简化Dynamips配置过程的前端程序,安装了Dynagen以后,我们可以直接在打开Dynamips Server进程以后通过编辑.net配置文件并直接双击打开我们的虚拟网络环境。.net配置文件的示例如下:

# Simple Ethernet Switch lab

autostart = false

 

[localhost]

[[7200]]

image = C:\Program Files (x86)\Dynamips\images\c7200-js-mz.124-18.bin

npe = npe-400

 

ram = 160

idlepc = 0x607594b0

 

[[ROUTER R1]]

F1/0 = S1 1

F0/0 = NIO_gen_eth:\Device\NPF_{DD10A164-1520-4E4C-8018-57EB93E9D467}

 

[[router R2]]

F1/0 = S1 2

F0/0 = NIO_gen_eth:\Device\NPF_{51206A65-8656-48E1-BD5D-B055529056BB}

 

[[router R3]]

F1/0 = S1 3

 

[[ethsw S1]]

1 = dot1q 1

2 = dot1q 1

3 = dot1q 1

4 = dot1q 1

其中R1、R2为虚拟的路由器,S1为Dynamips内置的简易交换机,具体的参数含义可以通过网上的Dynamips教程了解到。这里重点介绍一下idlepc参数,针对每个IOS文件,Dynamips都可以计算出相应的idlepc的值,当idlepc的值被正确设置后,可以大大减小宿主机器的CPU利用率。当我们双击打开一个.net文件后,会显示一个命令行控制台,在这里我们可以通过一些简单的命令来控制设备的开启和关闭,当idlepc的值没有被正常设置时,设备开启后屏幕会提示idlepc值没有设置,这时我们在命令行输入idlepc get <设备名>,程序便会计算出多个推荐的idlepc的值,其中带*号的值为程序推荐,把这个值复制到.net配置文件中的idlepc参数上,便可以达到大大降低宿主机CPU利用率的效果。

再来看看 “F0/0 = NIO_gen_eth:\Device\NPF_{DD10A164-1520-4E4C-8018-57EB93E9D467}”这一行的含义。这是我们主机与网络设备互连的关键,在Dynamips安装文件夹里会有一个Network Device List的小程序,运行后该程序会显示宿主机所有网卡的信息,将得到的网卡信息保存下来,复制到网络设备对应的接口后,表示将该网卡桥接到网络设备的接口上,示例.net配置文件中的设置就表示将宿主机的第一个网卡桥接到路由器R1的F0/0接口上。

利用网络设备接口与宿主机Loopback口的桥接,便可以实现VMWare虚拟主机与虚拟网络设备的连接功能了,首先我们找到宿主机Loopback口的信息,将它复制到.net配置文件特定的接口后,Dynamips上的设置便完成了。

若Win7系统默认没有建立Loopback接口,可以进入控制面板->系统和安全->管理工具->计算机管理进行设置,点击“操作”->“添加过时硬件”。

下一步到“安装我手动从列表选择的硬件”,选择“网络适配器”中的“Microsoft loopback adapter”便可以进行添加了。

若网络设备可以在.net命令行窗口上可以正常启动,并没有提示错误时,说明Dynamips已经正常设置好了,下面开始用Telnet连接到网络设备进行配置吧!Telnet的地址为127.0.0.1而端口则为.net命令行窗口下通过list命令得到的console端口。

下一步到“安装我手动从列表选择的硬件”,选择“网络适配器”中的“Microsoft loopback adapter”便可以进行添加了。为了使VMWware虚拟主机也可以与虚拟网络设备进行互联,我们还需要在VMWare Workstation上进行相关配置。

VMWare Workstation

在对Dynamips的设置过程中,我们把宿主机的Loopback口桥接到了虚拟路由器R2的F0/0接口上,下面我们需要在VMWare Workstation上也做一些设置,让虚拟主机的网卡桥接到宿主机的Loopback口上。

首先进入VMWare Workstation的Virtual Network Editor菜单,选择任意一个虚拟网卡进行设置,在菜单栏下方的桥接方法选项中,选择“Bridged”模式,并将桥接的对象指定为宿主机的Loopback网口,点击“OK”确认设置。

进入虚拟主机的硬件设置菜单,在”Network adapter”选项栏的桥接方式中选择”Custom:Specific Virtual Network”,并将网卡桥接到之前已经桥接到宿主机Loopback口的虚拟网卡上。

桥来桥去以后虚拟主机与虚拟网络环境的连接已经大功告成了!因为现在宿主机的主网口与虚拟主机的网口并不在同一个网段上,因此它们之间的通讯是需要通过虚拟网络设备来完成的,我们可以把虚拟主机的网关设置为路由器R2的F0/0接口,同时在宿主机上手工添加部分地址的静态路由条目到R1的F0/0接口上,那么宿主机的主网口便可以与虚拟主机的网口进行通信了。

当然,如果为宿主机的Loopback口配置了与虚拟主机网口同网段的IP地址,即使中间的网络设备是关闭的,宿主机也是可以通过Loopback口与虚拟主机进行通信的。

大理Dali

有了网络设备,有了主机,下面让我们来看一下我们的实验环境中的设备是怎么样进行通信的吧!找一个简单的发包程序,让它从宿主机发包到虚拟主机上,然后我们用大理抓来看看。

可以看到我们的数据包都是单向发送的,并且封装了一些没有意义的内容,但是数据是从宿主机的Loopback口12.0.0.101走的,这跟我们预想的不一样。

原来是机器重启后之前添加的静态路由条目没有了,从新手动添加一下,再看看数据包的路径发现这下就正确了。

接下来我们来看一下怎样可以得到网络设备之间通信的数据包,根据我们的.net配置文件,我们的两台路由器是连接到一台Dynamips内置的二层交换机上的,也就是说路由器发送出来的数据包到了交换机上都会被交换机从所有接口转发出去,于是我们便可以在宿主机上再建立一个Loopback口并桥接到交换机空余的接口上来接收这些数据包了,桥接的方法也是对.net配置文件进行修改:

[[ethsw S1]]

1 = dot1q 1

2 = dot1q 1

3 = dot1q 1 NIO_gen_eth:\Device\NPF_{9476B976-68B3-4A23-B28D-2ADE04BF2EAA}

4 = dot1q 1

桥接完成后打开大理对新添加的Loopback口进行抓包,观察一下发现得到两台路由器发送的OSPF Hello包果然被抓取到了。

有了大理,我们便可以通过各种网络设备和虚拟主机的组合来对我们虚拟环境中的数据包进行捕获和分析了,通过对数据包的观察和分析才能让我们进一步加深对网络通信,以及各种常见应用协议的理解。

Splunk

对于Splunk,用一篇文章来描述它的作用显然是完全不够的,因为通过对各种设备进行配置,以及各种软件的组合,利用Splunk都可以衍生出各式各样的玩法,那么在这里我就举个简单的例子来看一下Splunk在我们自己搭建的实验环境中能发挥怎么样的作用吧。

前几天看到北京的同事们发出来关于NetFlow的一些资料,于是琢磨着在我自己的实验环境下也来对NetFlow进行一下分析,但是NetFlow发出来的是一些数据包的信息,在我这简单的虚拟环境下是很难对数据包里的内容进行统计分析的,我又不希望去网上下载一些分析NetFlow的盗版软件,更不可能找一个硬件盒子接到我的笔记本上来收Flow,但是没有关系,我有Splunk。

我已经在我的虚拟主机上安装了Splunk的服务器程序,由于Splunk是一个轻量级的程序,在数据量不大的情况下用虚拟主机来跑也完全没有问题,剩下的就是怎么可以让Splunk读懂NetFlow的问题了。

在Splunk官网上做了一番简单的搜索,我发现可以借助一个叫做Flow-tools的小工具实现我们的目标。

Flow-tools是一个运行在Linux下的简易工具,专门用来收集NetFlow的信息,并且还可以将这些信息导出成为文本文件。在配置完R1的NetFlow发送后,下载并安装Flow-tools,我们来看看下一步怎么做:

首先建立一个文件夹来存放收集的NetFlow数据:mkdir /opt/netflow

然后运行/usr/bin/flow-capture -N -1 -z 6 -n 250 -V 5 -w /opt/netflow 0/0/9996让Flow-tools通过9996端口接收NetFlow数据。

若/opt/netflow下有生成一个以当日日期为名的文件夹,则说明接收NetFlowDE 配置正确。

进入文件夹查看发现NetFlow的数据已经收集成功并保存为特定格式的文件。

下一步运行/usr/bin/flow-print -fo <ft-v05.200x-xx-xx.xxxxx+xxxx >> ./test将NetFlow数据输出成为文本文件test,大功告成!如果需要长期对NetFlow进行收集还可以编写一个简单的shell脚本让Flow-tools的工具定时自动运行。

下面用Splunk来对test文件进行索引看看是否已经得到了我们需要的数据。

嗯,数据已经得到了并且格式也很工整,实验成功!同样,利用Splunk这个利器,我们还可以对Syslog、SNMP等各种常见的数据转发协议来进行分析学习。当然,Splunk的作用绝不局限于这些,所有的IT数据,包括配置、日志等常见数据,只要能够被人读得懂,便同样可以被Splunk读懂,所以说,利用Splunk的试用License来对IT数据进行整理和学习绝对是一个很好的选择。

结束语

来了Netis以后,才发现自己需要学习的东西实在太多太多,在思维混乱中自己摸索着组建了这样一个简易的实验环境,效果还行,也确实帮助自己了解到并学习到许多以前没有办法进行观察的细节,在这里也要感谢一下博大精深的互联网,以及各类技术文章的作者们,让我可以在一个小小的笔记本上学习到许许多多的知识。

——Peter