文章目录
  1. 1. 目的
  2. 2. 网络拓扑
  3. 3. 步骤
    1. 3.1. 配置虚拟机
    2. 3.2. 设置每个终端PC
    3. 3.3. 设置路由器
    4. 3.4. 测试
    5. 3.5. wireshark抓包
  4. 4. 完结

目的

采用多台虚拟机在一台计算机实体上模拟一个小型的网络环境。
我们采用虚拟机( Virtual Machine)软件来模拟一个网络环境进行实验,这类软件的主
要功能是利用软件来模拟出具有完整硬件系统功能的且运行在隔离环境中的完整计算机系统。这样我们可以在一台物理计算机即宿主机器(Host Machine)上模拟出一台或多台虚拟的计算机。这些虚拟机能够像真正的计算机那样进行工作,我们可以在其上安装全新的操作系统和应用软件。通过虚拟机软件中的虚连接设备将各个虚拟机连接起来,我们就可以搭建出实验所需的网络环境。

网络拓扑

接下来给出要构建的网络拓扑结构和拓扑结构配置信息表:

此次实验我们采用5台虚拟机,分别为UT-571~UT-575,网络拓扑中有两台路由器,分别用UT-571和UT-574来模拟,两个路由器通过网络相连,这里用虚拟网络VMnet4来模拟,两个路由器分别下辖PC0,PC1和PC2三台主机,三台主机分别用UT-572,UT-573和UT-575来模拟。

由网络拓扑结构图可以看出,PC0,PC1和Route0处于同一个网段,网段为192.168.2.0/24,而PC2和Route1处于同一个网段,为192.168.3.0/24,然后为了实现两个网段的联通,我们将两个路由器设置在同一个网段192.168.4.0/24中,即需要三个虚拟网络,来实现5台机器相互的联通。
我们的目标是配置每台机器的网卡,IP,网关和路由器的转发表,使得此虚拟网络上的每台机器之间都可以实现通信。
图中正方体的图形表示局域网的交换机。
最后我们通过机器之间相互Ping操作来测试是否联通。

步骤

配置虚拟机

我们至少需要给每台虚拟机配置一个网卡以实现网络互连,并且需要给虚拟机UT-571和UT-574配置两块网卡,因为它们是路由器,分属于两个网段,配置虚拟机的过程如下所示:
在虚拟机开机之前选择编辑选项

如果之前没有网卡,那么点Add添加网卡,然后next:

添加网卡的配置,选择Custom: Specific virtual network,将机器配置到对应的虚拟网络,如PC0和PC1配置到VMnet2,PC2配置到VMnet3,两个路由器虚拟机配置添加两块网卡分别设为两个网段。

设置每个终端PC

ip 地址是计算机进行网络通讯的基础,每一台联网计算机都至少具有一个 ip 地址。在日常使用中,我们通常能自动获取 ip,这是由于 DHCP 协议的作用。这次我们需要手动为配置好的虚拟网络分配 ip 地址。

打开每台机器(PC0,PC1,PC2)的终端Terminal,输入

1
ifconfig -a

将会看到如下的输出:

输出显示机器网卡还没有配置IPV4地址,我们将手动配置固定的IP地址。

为了防止DHCP协议和Network Manager的干扰,改变我们设置的IP地址,我们输入

1
sudo service network-manager stop

停用network-manager服务,这样我们设置的IP就不会被系统改变了。

Network Manager是Linux系统进行网络管理的一项服务。
Network Manager由一个管理系统网络连接、并且将其状态通过D-BUS(是一个提供简单的应用程序互相通讯的途径的自由软件项目,它是做为freedesktoporg项目的一部分来开发的。)进行报告的后台服务,以及一个允许用户管理网络连接的客户端程序。
Network Manager的优点:简化网络连接的工作,让桌面本身和其他应用程序能感知网络。

想了解network manager请自行查阅资料。

然后设置各个PC的IP,PC0和PC1由于同处192.168.2.0/24网段,所以我们将它们的IP分别设置为192.168.2.2(UT-572)和192.168.2.3(UT-573),将192.168.2.1留给路由器Route0(UT-571)使用。
设置IP地址有如下命令:(以192.168.2.2为例)

1
sudo ifconfig eth0 192.168.2.2 netmask 255.255.255.0

然后可使用ifconfig -a命令查看IP情况如图。

然后设置默认网关为该网段的路由器Route0的eth0的IP地址(192.168.2.1):

1
sudo route add default gw 192.168.2.1

这样一个终端PC就已经配置好了,它有了自己的IP地址和默认网关。

大家都知道,从一个房间走到另一个房间,必然要经过一扇门。同样,从一个网络向另一个网络发送信息,也必须经过一道“关口”,这道关口就是网关。顾名思义,网关(Gateway)就是一个网络连接到另一个网络的“关口”,也就是网络关卡(–百度百科),此时PC0的网络关口就是它的路由器Route0的eth0。

其它终端PC配置相似。

设置路由器

IP地址设置同上,

1
2
3
ifconfig -a  # 查看IP地址情况
sudo ifconfig eth0 192.168.2.1 netmask 255.255.255.0 # 设置eth0IP地址
sudo ifconfig eth1 192.168.4.1 netmask 255.255.255.0 # eth1

eth0是面向PC0和PC1的网卡,而eth1是面向另一个网段(192.168.4.0/24)的的网卡
但路由器毕竟是路由器,它还需要有一套路由转发表,以便起到路由的作用。
所以接下来设置Route0(UT-571)的路由表:

1
2
3
sudo ip route add 192.168.2.0/24 via 192.168.2.1
sudo ip route add 192.168.3.0/24 via 192.168.4.2
sudo ip route add 192.168.4.0/24 via 192.168.4.1

其中 ip route add 192.168.2.0/24 via 192.168.2.1 命令添加的规则,告诉路由目的 ip 在
192.168.2.0/24(192.168.2.1~192.168.2.255)网段内的封包经由 ip 地址为 192.168.2.1 的设备(Route0)转发出去,即下一跳的 ip 为 192.168.2.1。而 192.168.2.0/24 是 Linux 中常用的掩码表示方式。
24 表示掩码字长为 24 即掩码为 255.255.255.0, 192.168.2 为网络号, 1 ~ 254 为网络中的主机号。此外还有其他形式用于添加路由规则的命令。
而第二条规则表示告诉路由目的IP在192.168.3.0/24网段的封包要经过的下一跳IP为192.168.4.2(即VMnet4的另一端,也即Route1的eth1,因为Route1是网段192.168.3.0/24的路由器)
最后一条规则表示,告诉路由目的IP在192.168.4.0/24网段的封包将被转发的下一跳IP为192.168.4.1即Route0的eth1.

最后我们要让虚拟路由允许转发,置虚拟机 U-571 的 ip_forward 标志为 1。 这里我们需要把/proc/sys/net/ipv4/目录下的文件ip_forward值置为 1。使用命令 echo,形如:

1
echo 1 > /proc/sys/net/ipv4/ip_forward

这样我们的路由器Route0也就设置好了,以相同的步骤我们很快可以设置好Route1。
一些步骤图如下:




测试

最后我们可以在不同的虚拟机上ping别的虚拟机的IP,已测试是否实现互联互通。

PC0 ping PC1:

PC0 ping Route1 eth1 和 PC2:

PC2 ping PC0, PC1:

等等等等,容易看到,正确设置的情况下,都可以ping通,实现了两个局域网的互联互通。

wireshark抓包

在Terminal中输入

1
sudo wireshark

启动wireshark,通过下图蓝框选择要监听的设备,如eth0,然后在终端中启动ping,观测数据包的来往:

结果如下,PC0 ping PC1的包流动情况:

PC0 ping PC2的包流动情况:

点开某个包,可以看到:

协议框中显示所选分组的各层协议:物理层帧、以太网帧及其首部、 IP 协议数据报及其首部, Internet控制报文协议。原始框中则显示分组中包含的数据的每个字节。从中可以观察到原始数据,其中左边显示的是十六进制的数据,右边则是 ASCII 码。在协议框中选中一个条目,在原始框中会标记出对应的原始数据,反之在原始框中选中也一样。

完结

这样,此次虚拟网络构建就成功了。
总的来说,计算机网络这个东西,知道 和 会做 之间有着很大的距离,一些基础的网络理论知识,真正用起来却显得无比的生疏,终究还是太菜了罢~

计算机相关 | CS.Related