模拟主机跨路由通信实验
Posted Linuxbugs(卡西莫多伯伯)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟主机跨路由通信实验相关的知识,希望对你有一定的参考价值。
实验器材:
五台虚拟机,其中两台作为通信双方主机,三台主机作为路由器使用
通信主机使用的是centOS6.9。
另外三台也是centOS6.9,但是是最小化安装的。
本实验使用命令请参考 网络配置之基本网络配置
我们以下图为例,来实现我们这次实验:
在试验中,我们需要四个网段,所以,我们需要在虚拟机上添加四个网段,以便我们可以完成实验:VMnet11,VMnet12,VMnet13,VMnet14
由于我们只是独立的环境进行模拟,所以我们使用的全部都是仅主机模式,这一点一定要清楚,然后,我们要做的是给这五台主机先配置网段:
每一个都需要进行设置,作为路由器的几个虚拟机需要配置两个网段,而作为通信主机的两个虚拟机,只需要设置一个网段,我使用的是eth1,作为通信主机的接口。
我的配置:
CT6.9_1 eth1:Vmnet11
node1 eth0:Vmnet11
eth1:Vmnet12
node2 eth0:Vmnet12
eth1:Vmnet13
node3 eth0:Vmnet13
eth1:Vmnet14
CT6.9_2 eth0:Vmnet14
接下来,我们要做的就是要给通信双方主机和路由添加相对应的IP和网关。
首先是CT6.9_1 eth1,我们在/etc/sysconfig/network-scripts/配置IP地址和网关,然后看它是否生效。
生效了:
我们刚刚配置完一个通信主机,接下来,我们将对第二个通信向主机进行配置。
CT6.9_2 eth0,我们在/etc/sysconfig/network-scripts/配置IP地址和网关,然后看它是否生效。
至此,我们的两台通信主机已经配置完成,接下来,我们将会对三个路由器进行配置。包括ip的配置和路由表的配置。
node1:
网络IP配置完成,由于它充当的是路由器,所以光配置网络IP是不够的,接下来我们需要给他配置路由手动添加路由信息:
网络ID |
子网掩码 |
接口 |
网关 |
10.5.0.0 |
255.255.0.0 |
eth0 |
|
10.6.0.0 |
255.255.0.0 |
eth1 |
|
10.7.0.0 |
255.255.0.0 |
eth1 |
10.6.0.200 |
10.8.0.0 |
255.255.0.0 |
eth1 |
10.6.0.200 |
由上图我们可以知道,当我们在配置完IP之后,相邻的两个网段的路由信息就会直接存入路由表中,也就是实际上我们添加两条路由信息就够了。
添加如下:
配置方法和如上所示,node2和node3的网络和路由配置过程不再显示,基本和上面相同,我只把其他的两个路由表给写出来,仅供参考。
node2:
网络ID |
子网掩码 |
接口 |
网关 |
10.5.0.0 |
255.255.0.0 |
eth0 |
10.6.0.100 |
10.6.0.0 |
255.255.0.0 |
eth0 |
|
10.7.0.0 |
255.255.0.0 |
eth1 |
|
10.8.0.0 |
255.255.0.0 |
eth1 |
10.7.0.200 |
node3:
网络ID |
子网掩码 |
接口 |
网关 |
10.5.0.0 |
255.255.0.0 |
eth0 |
10.7.0.100 |
10.6.0.0 |
255.255.0.0 |
eth0 |
10.7.0.100 |
10.7.0.0 |
255.255.0.0 |
eth0 |
|
10.8.0.0 |
255.255.0.0 |
eth1 |
我们在完成配置之后,首先要进行的是对相邻的两台 机器之间进行ping操作,看是否连通:
有上面的几张图片我们可以发现,两两之间都可以相互 ping通,这是不是意味着,我们的主机A和主机B就可以进行通信了呢?我们可以试一下:
实际上,我们发现,根本不行,这是为什么呢,这是由于中间三台机器是linux虚拟机充当的路由器,并不是真正的路由器,这些主机在收到包以后,如果发现不是给自己的包,就会直接丢弃,而不是去做转发,如果要让它有转发功能,我们需要做一个操作:(中间作为路由的机器都要操作)
echo 1 > /proc/sys/net/ipv4/ip_forward
这个时候我们再看:
发现依旧是有问题的,我查看一下防护墙设置,发现防火墙开着的,然后,我就把防火前给关掉,命令:
centos6
chkconfig iptables off
servcie iptables stop
centos7
systemctl disable firewalld
systemctl stop firewalld
然后,我们使用主机A去ping主机B:
此时,我们基本已将完成了本次实验。
我们可以在CT6.9_1使用命令 mtr 10.8.0.1 动态跟踪路由
我们接下来能不能对我们这次实验进行一下简单的优化呢,当然是可以的,我们可以看到,在路由R3(node3)上的路由信息,我们发现我们添加的两条路由信息,除了目的网络ID外都是一样的,这样的话,我们能不能将两条信息合成一条呢,答案是可以的。由于R3是一个处于边缘的路由,我们完全可以当它是一个默认路由,可以把我们添加的那两条记录改成如下:
网络ID |
子网掩码 |
接口 |
网关 |
0.0.0.0 |
255.255.0.0 |
eth0 |
10.7.0.100 |
我们进行操作,先删除路由表中的原来添加的信息:
然后把上面的一条路由信息添加进去:(添加默认路由)
route add –net 0.0.0.0/0 gw 10.7.0.100或route add defualt gw 10.7.0.100
我们可以按照这个方法,把R1(node1)的也给改掉。
接下来,我们在看一个东西,如果此时我们在R1上面只给加上通往10.8.0.0的路由信息,不给加通往10.7.0.0网段的路由信息,我们的消息可以到达10.8.0.0网段吗? 我们可以试一下。
我们先删除刚添加的默认路由的信息:
接下来,我们ping一下10.8.0.100:
我们发现,居然是ping通的,这是为什么呢,因为R1一边连主机A一边连着外界,我们的数据包没有到达10.7.0.0网段的,所以,当路由器R1收到包以后,只管向外转发就行了,让后再由R2转发给R3到达目的网段,所以,我们可以不配置到达10.7.0.0网段的路由信息,但是当我们的数据包是要到达10.7.0.0网段时,就不行了。
这就是我们本次实验的全部内容。
以上是关于模拟主机跨路由通信实验的主要内容,如果未能解决你的问题,请参考以下文章