上文,我们实现了模拟两台计算机的通讯-netns和brctl组建网络。这是个比较简单的虚拟化,可能有些人喜欢可视化的方式。这次我们将利用一个仿真工具来实现同样的模拟,用可视化的方式。首先看一下虚拟化管理平台是什么。
虚拟化管理平台(VMM)
虚拟化管理平台是一种软件工具,它可以让多台计算机系统(我们通常称为“虚拟机”)在同一台物理服务器上运行,就像是它们各自拥有一整台独立的电脑一样。这样的技术让一台实体服务器可以被分成多个虚拟的工作环境,每个环境都可以运行自己的操作系统和应用程序。
想象一下,你有一间大屋子,本来只能住一个人,但如果使用隔板将这间屋子分隔成几个小房间,就可以让几个人同时居住,每个人都有自己的空间。虚拟化管理平台就类似这种功能,只不过它是对服务器进行分隔。
市面流行的虚拟化管理平台很多。这里不再细分模拟仿真虚拟化,只要是虚拟化的平台,就统称为VMM:Virtual Box、VMWare、GNS3、EVE-ng、libvirt、openstack等等。其共通点,都是利用的虚拟仿真技术,在计算机里来运行计算机、虚拟网络。
这里我们主要利用GNS3,这个开源工具进行计算机和网络的模拟仿真。
为什么是GNS3
列出的几个VMM对比
工具 | 类型 | 用途 | 支持的操作系统 | 免费/开源 | 主要特点 |
---|---|---|---|---|---|
VirtualBox | 桌面虚拟化 | 创建和运行虚拟机 | Windows, Linux, macOS | 免费/开源 | 用户友好界面, 可扩展性, 多个快照支持 |
VMware | 桌面/服务器虚拟化 | 创建和运行虚拟机 | Windows, Linux, macOS | 商业/部分免费 | 高级虚拟网络, 企业级支持, 安全性增强 |
GNS3 | 网络模拟器 | 模拟网络设备和拓扑 | Windows, Linux, macOS | 开源 | 网络设备仿真, 拓扑设计, 教育和培训 |
EVE-NG | 网络模拟器 | 模拟网络设备和拓扑 | Windows, Linux | 商业/部分免费 | 高级网络仿真, 支持多种网络设备映像文件 |
libvirt | 服务器虚拟化 API | 提供对多种虚拟化技术的抽象接口 | Linux, BSD, Solaris | 开源 | 管理多个虚拟化平台, 低层API, 灵活部署 |
OpenStack | 云平台 | 提供基础设施即服务 (IaaS) | Linux | 开源 | 自动化部署, 大规模虚拟化管理, 云存储和计算服务 |
可以看到大家各有偏重点。这里使用GNS3的原因是:
- 第一入门简单,学习曲线平滑。
- 第二完全开源,并且支持大多数类型的虚拟化技术。使用过程中,可以阅读源码学习其实现。
如果到底层原理,这些技术大同小异。但如果在应用层,你会发现眼花缭乱,很难厘清里面的差异。本质上这些都是图灵机里套了图灵机,后面有机会会详细探讨这个理论依据。
安装gns3
安装网络上有很多的教程。这里只给一个安装链接,你也可以在各种博客里找到安装教程。但我建议直接跟着引导一步步安装,能选的安装全选了。
GNS3 Windows Install | GNS3 Documentation
注意如果是window和mac,需要导入gns3-vm,利用virtual box、vmware都可以。我们实际使用的是这个gns3-vm来完成的虚拟化的。也就是物理机里运行gns3-vm,gns3-vm里运行的其它虚拟机。图灵机里套了图灵机套了图灵机,很神奇吧。
组网:电脑-交换-电脑
组一个网络
- 加入2台VPCs,可以认为是一个mini的计算机;
- 加入交换;
- 连接网线;
- 启动所有节点;
- 双击打开管理;
# PC1
PC1> ip 10.1.1.1/24
Checking for duplicate address...
PC1 : 10.1.1.1 255.255.255.0
PC1> ping 10.1.1.2
84 bytes from 10.1.1.2 icmp_seq=1 ttl=64 time=0.397 ms
84 bytes from 10.1.1.2 icmp_seq=2 ttl=64 time=0.409 ms
^C
# PC2
PC2> ip 10.1.1.2/24
Checking for duplicate address...
PC2 : 10.1.1.2 255.255.255.0
PC2> ping 10.1.1.1
84 bytes from 10.1.1.1 icmp_seq=1 ttl=64 time=0.261 ms
84 bytes from 10.1.1.1 icmp_seq=2 ttl=64 time=0.240 ms
^C
PC2>
监听流量
在网线上点击右键,点击开始监听,唤起wireshark进行监听流量。
总结
可以看到,这个核心逻辑和模拟两台计算机的通讯-netns和brctl组建网络,是同样的逻辑。本质上都是实现了网络的本质,将消息从A送到B。这个核心逻辑将反复出现在虚拟化的所有的内容里,差别在于实现方式的差异,但本质从未改变。