通过虚拟机模拟路由器,实现两台主机之间跨路由通信。
5个虚拟机,其中2个作为主机使用,3个模拟路由器使用。
本实验中所用虚拟机均为CentOS 6。
1、画出构图,部署所需要的网络环境。
如图所示,R1,R2,R3为模拟的路由器,A,B为两个主机。配置IP也在图中有所说明。
2、根据构图,配置5个虚拟机的设置。
图中可以看出,我们一共需要四个网段,我们可以在虚拟机中添加新的网段,具体步骤如图:
至此,我们的网段添加完毕。
接着我们对虚拟机的网段进行设置:
我们把虚拟机进行重命名以确保我们能够清楚的分辨每台虚拟机的作用:
接着,我们以主机A的网段设置为例,来演示一下如何更改:
同理,对剩下四个虚拟机做相同操作,作为主机的两台虚拟机只需要设置一个网段,而作为路由器的三台虚拟机则需要设置两个网段,具体设置如下:
centos6.9-A eth1:VMnet11
node1 eth0:VMnet11
eth1:VMnet12
node2 eth0:VMnet12
eth1:VMnet13
node3 eth0:VMnet13
eth1:VMnet14
centos6.9-B eth0:VMnet14
全部设置完毕后,开启所有虚拟机。
3、给用于通信的两个主机添加相对应的IP和网关。
首先是centos6.9-A的eth1。我们直接修改配置文件 /etc/sysconfig/network-scripts/ifcfg-eth1。添加我们规划的IP,子网掩码和网关。
设置完毕后,我们来重启一下网络服务
图中提示错误,是因为找不到eth0这个网卡,而在本实验中,我本来就没有设置该网卡,所以可以忽视掉。
接下来我们用“route -n”看一下这个设置有没有生效
很显然,我们的设置已经生效。
至此,我们已经完成第一个通信主机的设置,接下来,我们来配置第二个通信主机:
同样的,我们直接修改配置文件 /etc/sysconfig/network-scripts/ifcfg-eth1。添加我们规划的IP,子网掩码和网关。
重启服务,并查看是否成功:
至此,我们的两台通信主机已经设置完毕。
4、进行三个路由的IP和路由表的配置。
Node1:
至此,网络IP已经配置完成。接下来,我们要来配置路由表,为了保证我们的两台主机可以连通,我们需要添加如下信息:
网络ID | 子网掩码 | 接口 | 网关 |
---|---|---|---|
10.1.0.0 | 255.255.0.0 | eth0 | |
10.2.0.0 | 255.255.0.0 | eth1 | |
10.3.0.0 | 255.255.0.0 | eth1 | 10.2.0.201 |
10.4.0.0 | 255.255.0.0 | eth1 | 10.2.0.201 |
我们使用“route -n”命令查看现有的路由表
图中发现,表中数据已经有两个存在。所以我们只需要添加另外两个进路由表就可以啦~所以我们来加吧!
至此,我们第一个路由器的配置就全部完成,接着,我们用相同的方法给剩下两个路由器做配置。方法相同~所以下面就只列出剩下两个路由器的路由表啦:
Node2:
网络ID | 子网掩码 | 接口 | 网关 |
---|---|---|---|
10.1.0.0 | 255.255.0.0 | eth0 | 10.2.0.200 |
10.2.0.0 | 255.255.0.0 | Eth0 | |
10.3.0.0 | 255.255.0.0 | eth1 | |
10.4.0.0 | 255.255.0.0 | eth1 | 10.3.0.201 |
Node3:
网络ID | 子网掩码 | 接口 | 网关 |
---|---|---|---|
10.1.0.0 | 255.255.0.0 | eth0 | 10.3.0.200 |
10.2.0.0 | 255.255.0.0 | eth0 | 10.3.0.200 |
10.3.0.0 | 255.255.0.0 | eth0 | |
10.4.0.0 | 255.255.0.0 | eth1 |
全部设置完毕后,我们可以先试一下在相邻的两个虚拟机之间ping,如下图:
在上面的几个图中我们可以看出,我们的相邻虚拟机已经可以两两ping通,那么,这是不是意味着我们的实验完成了呢?接下来我们来试一试node2来ping主机A:
咦?为什么ping不通?这就很尴尬了,我们来找找原因。
奥,原来是因为我们是把node1当做路由器,但是事实是他还是一个主机,它接收到来自node2的包发现不是自己的就扔掉了,而不会转给主机A,所以,接下来我们就要把node1,node2,node3三个路由器设置成可以转发的。具体操作如下:
echo 1 > /proc/sys/net/ipv4/ip_forward
我们在node1中输入上面的命令,然后再用node2去ping 主机A:
当当当当~已经可以ping通了~
接下来我们要在剩下的两个充当路由器的虚拟机中也输入上述命令:
好了,接下来就是见证奇迹的时刻!我们用主机B来ping主机A:
啊咧,为啥还是ping不通呢?
让我们来查一下防火墙
奥,原来是因为防火墙没有关闭,好吧,我们把5台虚拟机的防火墙都临时关闭。命令是:“iptables -F”
全部关闭以后,我们再来试着ping一下~
当当当当,已经可以啦~
现在我们也可以用mtr来动态跟踪路由状态~
看,三个路由器的端口IP都有喏,当然,也少不了我们主机B的啦。
完成了!撒花✿✿ヽ(°▽°)ノ✿
以上,我们的实验圆满成功!
当然啦,既然我们做实验,就要做得完美一点嘛~我们可以把实验的过程进行优化呀~
我们可以看到,在路由器R3(node3)的路由表记录中,有两条记录是基本一致的:
那么,我们可以把这两条记录合并成一条吗?如同下表中所示:
网络ID | 子网掩码 | 接口 | 网关 |
---|---|---|---|
0.0.0.0 | 255.255.0.0 | eth0 | 10.3.0.200 |
接着我们就来试试看:
首先,我们把这两条记录从路由表中删除,然后,我们在添加新的记录:
然后,我们用主机A来ping一下主机B,看看效果如何:
依然是可以ping通的。那么,这是为什么呢?这个是由于我们的R3是边缘路由,我们完全可以把它配置成为默认路由,只负责转发就好啦~同理,R1也可以进行这样的设置。
接下来我们来试一试另外一种操作,如果我们只给R1的路由表中添加10.4.0.0网段的路由信息,而不添加10.3.0.0网段的路由信息,那么,我们的消息可以到达10.4.0.0网段吗?我们来实验一下:
把R1路由表中的10.3.0.0网段的路由信息删掉:
删掉了以后,我们再用主机A来ping一下主机B,看看结果如何:
还是可以ping通的吖~这是为什么呢?
我们先来动态跟踪一下路由信息:
咦,有没有发现,我们的第三个是???状态,这是因为我们的R1一头连着主机A,一头连着外面,当数据发送到R1时,R1直接负责转发就可以了,通过R1到达R2,然后从R2继续向下一个路由器转发,也就是我们的R3,最终通过R3到达我们的目的网段。由于在R1中没有配置10.3.0.0的网段信息,所以我们的路由跟踪是读不出来R3的IP的。当然,如果这个实验的目的网段为10.3.0.0,就不能实现啦!
至此,我们的实验已经全部结束0.0