在 macOS 上完美使用 EVE-NG 虚拟网络实验室


一、前言

EVE-NG 是目前功能最强大的虚拟网络实验室之一。懂的人自然都知道,所以这里就不做过多介绍了。

而身为一个使用 macOS 的最低端的网络工程师兼最低端的 Linux 运维,有必要分享一下 EVE-NG 在 macOS 上要怎么用才好用。

本文将介绍如何在新版的 macOS 上安装及使用 EVE-NG。

本文所涉及的操作均在良好、无访问限制的网络环境下进行的。

由于各人的系统环境各不相同,不保证可以一次成功。如果想提高一次成功的几率,建议严格跟着我的步骤来做,谢谢!

因为软件是不断更新的,所以本文具有时效性(更新于 2018 年 6 月 6 日)。


二、主要软件

  • 操作系统:macOS 10.13.4
  • 虚拟机:VMware Fusion 10.1.2
  • EVE-NG:Community Edition v2.0.3-86

三、安装 Telnet

首先允许我骂一句 ?️???,整天就只知道阉割阉割阉割……

3.1 安装 Homebrew

说明
• Homebrew 是 macOS 上最常用的包管理器,我想大部分朋友都已经安装了,所以下面一笔带过就好。

在 macOS 上执行以下命令:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

然后根据提示操作,即可完成安装。

3.2 使用 Homebrew 安装 Telnet

在 macOS 上执行以下命令:

brew install telnet

3.3 修改系统默认的 PATH 变量

说明
• 此步骤是为了让 macOS 自带的终端应用能够直接使用刚才安装的 Telnet 打开 telnet:// 链接,以便于接下来操作虚拟网络设备。

在 macOS 上执行以下命令:

sudo launchctl config user path /usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin

然后输入管理员密码回车即可。

完成之后需要重启 Mac 才能使设置生效。


四、导入 & 配置虚拟机

说明
• 请确保 VMware Fusion 已经安装。

4.1 下载虚拟机文件(.ova 后缀)

打开下面的链接:

EVE-NG Community Edition 官方下载

然后点击任一 OVA 文件的网盘下载链接。如下图:

打开网盘页面之后,请自行完成下载。下载之后建议检验一下 MD5 以及 SHA1。

4.2 导入虚拟机

下载完成之后,请使用 VMware 打开它,然后根据向导进行导入。

点击“继续”之后请选择虚拟机保存的位置,然后等待导入完成。

导入完成之后点击“自定设置”会进入到虚拟机配置界面。

4.3 配置虚拟机

4.3.1 配置 CPU / 内存

请根据实际用途以及机器配置,给虚拟机配置合适的 CPU 核心数及内存容量。

如果需要进行复杂拓扑实验,请配置尽可能多的 CPU 核心数及内存容量。

另外,请确保“在此虚拟机中使用虚拟化管理程序”复选框是选上的。如下图:

4.3.2 配置网络

请将默认网卡配置为 NAT 模式,如下图:

4.4 启动虚拟机

在启动过程中,VMware 会提示是否升级虚拟机。请选择“升级”。如下图:

4.5 获取虚拟机的 IP 地址

启动完成后,虚拟机的控制台会显示虚拟机的 IP 地址。如下图:

4.6 登录到虚拟机

在获取到虚拟机的 IP 之后,我们在 macOS 中使用 SSH 来登录虚拟机(当然直接在虚拟机的控制台中登录也是可以的,只是没有 SSH 方便)。

例如这里是 ssh [email protected]

登录的用户名为 root,密码为 eve

在登录之后,会弹出蓝色的设置界面(如下图),请直接按 Ctrl + C 退出,然后再按几次回车。

说明
• 我个人感觉 EVE-NG 这个自带的设置向导非常不好用,经常导致系统配置文件格式错误。我通过这玩意设置代理服务器之后,apt-get 就彻底罢工了……

4.7 防止出现设置界面

在 SSH 会话中执行以下命令:

touch /opt/ovf/.configured

4.8 固定虚拟机的 IP 地址(可选)

在 SSH 会话中使用 vi 文本编辑器打开 /etc/network/interfaces

然后将 iface pnet0 inet dhcp 这一行改为 iface pnet0 inet static

然后在这一行后面按照下面的格式添加 TCP/IP 参数选项:

    address <IP 地址>
    netmask <子网掩码>
    gateway <默认网关>
    dns-nameservers <DNS 服务器 1> <DNS 服务器 2>

修改完成后保存退出。

⚠️ 注意
• 请确保 IP 地址和 VMware 虚拟网卡的 IP 在同一网段内,否则主机和虚拟机将不能通信。

再执行 systemctl restart networking 即可使配置生效。

4.9 配置 SSH 免密码登录(可选)

说明
• 此步骤是为了方便今后登录虚拟机以及抓包。

请先退出 SSH,然后参考我写的另外一篇文章进行配置。

SSH 设置密钥对实现免密码连接


五、安装 Cisco IOU

5.1 准备所需的文件

我把所需的文件都放到我的 ownCloud 上了,大家可以直接下载。

下载链接

说明
• 三层(Router.bin)镜像 IOS 版本为 15.7
• 二层(Switch.bin)镜像 IOS 版本为 15.2

下载完成后解压得到一个名为 iou 的目录,里面有三个文件,如下图:

然后把三个文件使用 SCP 等方式传输到虚拟机的 /opt/unetlab/addons/iol/bin/ 目录中。

5.2 修复文件权限

使用 SSH 登录到虚拟机,然后在 SSH 会话中执行以下命令:

/opt/unetlab/wrappers/unl_wrapper -a fixpermissions

5.3 生成 IOU/IOL 许可证文件

在 SSH 会话中执行以下命令:

python /opt/unetlab/addons/iol/bin/CiscoKeyGen.py 

然后使用 vi 文本编辑器,把如图所示的内容写入到 /opt/unetlab/addons/iol/bin/iourc 这个文件中。

至此,EVE-NG 的基本环境就算是部署完成了。


六、测试 & 使用 EVE-NG

6.1 登录 EVE-NG

使用浏览器打开 http://<虚拟机 IP> 来使用 EVE-NG。

例如这里是 http://172.16.0.131

打开之后使用用户名 admin,密码 eve 进行登录。如下图:

6.2 建立 Lab

登录之后点击左上角的 “Add new lab” 图标,新建一个 Lab。

随便指定一个 “Name” 然后保存。

保存完成后会进入到 Lab 界面(没有的话请刷新一下页面)。

6.3 添加虚拟设备

在 Lab 界面的左侧菜单中选择新建一个 Node。

在 Template 列表中选择 “Cisco IOL”。

然后修改 Node 使用的镜像文件、名字、图标等参数(如下图),点击保存即可创建一个虚拟的 Cisco 设备。

6.4 启动虚拟设备

添加完虚拟设备之后,在右键菜单中点击 “Start” 启动它。

说明
• EVE-NG Community Edition 不支持在虚拟设备运行期间修改线缆连接。

6.5 进入虚拟设备的控制台

启动完成后,单击虚拟设备的图标然后允许打开终端即可进入设备的控制台界面。如下图:

如果以上的步骤都可以无痛的完成,说明基本环境已经部署成功了。

6.6 关闭 Lab

在关闭 Lab 之前,我们必须关闭 Lab 中所有的设备。

在 Lab 界面的左侧菜单中选择 “More actions”,再点击 “Stop all nodes”,然后确认即可。

再点击下面的 “Close lab” 即可关闭 Lab 。


七、关联 Wireshark 抓包

搞网络的,怎么能少得了抓包呢?

但是,官方的抓包工具只支持 Windows 平台……

幸好这个问题已经被某位大神解决了!

说明
• 请确保 Wireshark 抓包工具已经安装。
• 以下所用的程序由网上另一个现成的程序改良而成,该程序实际上是一个 Apple Script 脚本。
原程序链接
• 该抓包程序的原理是:在 macOS 中创建一个管道文件,一端连接 Wireshark;然后用 SSH 登录虚拟机并启动虚拟机中的 tcpdump 程序抓取虚拟网口的数据包,并把数据包的内容放在管道的另一端。这样虚拟网口发出来的数据包就会通过管道跑到 Wireshark 那里去了。

7.1 下载安装 EVE-NG 抓包程序

同样的,我把文件放到我的 ownCloud 上了,大家可以直接下载。

下载链接

下载完成后解压得到一个 EVE-NG Wireshark.app 的应用(如下图),请把它移动到 /Applications 中。

7.2 抓取某一接口的流量

在某一运行中的设备上右键打开菜单,选择 “Caputre”,再选择接口。如下图:

说明
• EVE-NG 仅允许抓取以太网接口上的流量,不允许抓取串行接口上的流量。

然后允许打开程序。

不出意外的话,一个终端窗口以及 Wireshark 将会被打开。如果接口上有流量的话,数据包就会在 Wireshark 中显示出来。如下图:

⚠️ 注意
• 如果想保存抓包内容的话,请不要直接关闭刚打开的终端窗口。应先停止抓包,保存封包文件之后再关闭 Wireshark 和刚打开的终端窗口。


八、桥接到外部网络

8.1 添加虚拟网卡

如果想让虚拟 Lab 里的设备桥接到外部物理网络的话,我们只需要在关闭虚拟机之后添加另一个虚拟网卡然后设置为桥接即可。

比如我想桥接 Wi-Fi,可以这样设置。

在虚拟机设置菜单中点击“添加设备…”。

然后选择“网络适配器”。

再选择桥接 Wi-Fi,然后确保“连接网络适配器”复选框是选上的就好了。

8.2 在 Lab 中设置桥接

在 Lab 中添加一个 “Network”(如下图),然后把线连上就好了。

“Network” 其实就是一个桥接器。”Type” 选项用来控制桥接网络的位置。

“Type” 选择 “Management(Cloud0)” 表示桥接到虚拟机的第一张网卡,选择 “Cloud1” 表示桥接到虚拟机的第二张网卡,选择 “Cloud2” 表示桥接到虚拟机的第三张网卡……依此类推。如下图。

如果 “Type” 选择 “Bridge” 则是添加一台傻瓜式的二层交换机。


九、使用自定义的 QEMU 虚拟机

想在 Lab 中添加一台 Windows 电脑?或者是一台 Linux 服务器?

当然没问题!只要您有钱且 Mac 的配置足够高!

下面以安装 Windows 7 为例简单介绍下如何创建自定义的 QEMU 虚拟机。

说明
• 由于 macOS 自带的 VNC(屏幕共享)工具不兼容 EVE-NG 的 QEMU 虚拟机(会卡在密码验证那里),所以需要自行下载并使用第三方 VNC 工具。
• 如果需要使用大量的 QEMU 虚拟机,建议扩容 EVE-NG 的虚拟硬盘。具体方法这里就不说了。

9.1 创建 QEMU 虚拟机目录

在 SSH 会话中执行以下命令:

mkdir /opt/unetlab/addons/qemu/<系统前缀>-<名称>

说明
<系统前缀> 的写法是有讲究的,不同类型的系统需要使用不同的 <系统前缀>。例如 Windows 系统要写 win,Linux 系统要写 linux
<系统前缀> 的写法可参考官网文档 → Qemu image namings

例如创建一个 Windows 7 系统的 QEMU 虚拟机(系统前缀为 win,名称为 7):

mkdir /opt/unetlab/addons/qemu/win-7

9.2 创建 QCOW2 虚拟硬盘

在 SSH 会话中执行以下命令:

/opt/qemu/bin/qemu-img create -f qcow2 /opt/unetlab/addons/qemu/<系统前缀>-<名称>/<虚拟硬盘名称>.qcow2 <容量>

说明
<虚拟硬盘名称> 的写法同样也是有讲究的,具体的命名方法可参考官网文档 → Qemu image namings

例如创建一个 20G 用于安装 Windows 7 的 QCOW2 虚拟硬盘:

/opt/qemu/bin/qemu-img create -f qcow2 /opt/unetlab/addons/qemu/win-7/virtioa.qcow2 20G

9.3 上传系统安装盘文件

把安装系统所用的 ISO 安装盘通过 SCP 等方式上传到 QEMU 虚拟机的目录中(例如 /opt/unetlab/addons/qemu/win-7),并重命名为 cdrom.iso 即可。

9.4 修复文件权限

在 SSH 会话中执行以下命令:

/opt/unetlab/wrappers/unl_wrapper -a fixpermissions

9.5 创建 QEMU Node

进入或创建一个 Lab 之后,在 Lab 界面的左侧菜单中选择新建一个 Node。

在 Template 列表中选择系统类型(这里为 Windows)。

然后根据下图提示设置 QEMU 虚拟机参数再点击保存即可。

⚠️ 注意
• QEMU Version、QEMU Arch、QEMU Nic 这三项必须与图中的设置一致,否则将会出现 QEMU 虚拟机蓝屏等其他怪问题。

9.6 安装 & 配置操作系统

配置完 QEMU 虚拟机之后,在右键菜单中启动它。

然后单击它,打开 vnc:// 链接,进入到 VNC 界面中。

说明
• 部分第三方的 VNC 工具不支持直接打开 vnc:// 链接。这时候可通过 macOS 自带的 VNC(屏幕共享)工具获取 VNC 服务器的 IP 与端口号,再使用第三方 VNC 工具连接。
• 这里我使用的是 Thin PC 版的镜像,安装方法和普通 Windows 7 完全一样。

以安装 Windows 7 为例,在到选择安装位置的界面时,需要点击加载驱动程序。如下图:

然后选择浏览。如下图:

按下图提示选择相应的驱动程序。

直接下一步即可安装驱动程序。

安装驱动程序之后,选择安装位置的界面就会出现一个磁盘,直接把系统安装到那个磁盘就好了。如下图:

接着在 QEMU 虚拟机第一次重启之后,把 QEMU 虚拟机目录里的 cdrom.iso 删掉。

然后坐等安装完成,进行相应的配置。

9.7 固化 QCOW2 虚拟磁盘

安装配置完成之后,请把 QEMU 虚拟机关机。

在 Lab 界面的左侧菜单中选择 “Lab details”。如下图:

记下 Lab 的 UUID。

然后在 SSH 会话中执行以下命令:

qemu-img convert -c -O qcow2 /opt/unetlab/tmp/<用户号>/<Lab 的 UUID>/<Node 编码>/<虚拟硬盘名称>.qcow2 /opt/unetlab/addons/qemu/<系统前缀>-<名称>/<虚拟硬盘名称>_2.qcow2 && rm -rf /opt/unetlab/addons/qemu/<系统前缀>-<名称>/<虚拟硬盘名称>.qcow2 && mv /opt/unetlab/addons/qemu/<系统前缀>-<名称>/<虚拟硬盘名称>_2.qcow2 /opt/unetlab/addons/qemu/<系统前缀>-<名称>/<虚拟硬盘名称>.qcow2

说明
• 如果您使用的是 EVE-NG 默认的 admin 用户,那么 <用户号>0
<Node 编码> 可在虚拟设备的右键菜单中找到它,括号里面的数字就是。

例如这里是:

qemu-img convert -c -O qcow2 /opt/unetlab/tmp/0/cf2ce97c-eaff-4ac3-a602-f4910a451293/1/virtioa.qcow2 /opt/unetlab/addons/qemu/win-7/virtioa_2.qcow2 && rm -rf /opt/unetlab/addons/qemu/win-7/virtioa.qcow2 && mv /opt/unetlab/addons/qemu/win-7/virtioa_2.qcow2  /opt/unetlab/addons/qemu/win-7/virtioa.qcow2

执行之后请耐心等待一段时间。

在固化完成之后就可以把这个 QEMU 虚拟机(Node)删掉了。当以后再创建基于同一系统的 QEMU 虚拟机时,QCOW2 虚拟磁盘中的内容就是刚才固化的内容了!

9.8 压缩 QCOW2 虚拟磁盘(可选)

说明
• 压缩 QCOW2 虚拟磁盘可有效节省存储空间,但会减慢 QEMU 虚拟机的运行速度。

在 SSH 会话中执行以下命令:

virt-sparsify --compress /opt/unetlab/addons/qemu/<系统前缀>-<名称>/<虚拟硬盘名称>.qcow2 /opt/unetlab/addons/qemu/<系统前缀>-<名称>/<虚拟硬盘名称>_comp.qcow2 && rm -rf /opt/unetlab/addons/qemu/<系统前缀>-<名称>/<虚拟硬盘名称>.qcow2 && mv /opt/unetlab/addons/qemu/<系统前缀>-<名称>/<虚拟硬盘名称>_comp.qcow2 /opt/unetlab/addons/qemu/<系统前缀>-<名称>/<虚拟硬盘名称>.qcow2

压缩 QCOW2 虚拟磁盘可能需要比较长的时间,请耐心等待。

例如这里是:

virt-sparsify --compress /opt/unetlab/addons/qemu/win-7/virtioa.qcow2 /opt/unetlab/addons/qemu/win-7/virtioa_comp.qcow2 && rm -rf /opt/unetlab/addons/qemu/win-7/virtioa.qcow2 && mv /opt/unetlab/addons/qemu/win-7/virtioa_comp.qcow2 /opt/unetlab/addons/qemu/win-7/virtioa.qcow2

⚠️ 十、注意事项

虽然 EVE-NG 功能很强大,但安装完 EVE-NG 之后,千万别急着卸载 GNS3 或其他模拟器!

毕竟网络模拟器w和真实的网络设备还是有很大区别的,而且每个网络模拟器都有自己独一无二的 BUG。

比如说吧……这两天我在做 PIM-SM 的实验,用 EVE-NG 死活都无法成功,之后换用 GNS3 一下子就成功了!

而之前的 PPPoE 拨号实验,只能用 EVE-NG 做。

所以说,网络模拟器这东西是要换着用的,不能吊死在一棵树上。

发表评论