模拟主机跨路由通信实验

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网段时,就不行了。

 

这就是我们本次实验的全部内容。

以上是关于模拟主机跨路由通信实验的主要内容,如果未能解决你的问题,请参考以下文章

实战作业4,实验环境下Linux主机之间实现跨网段通信

跨交换机VLAN之间的通信(基于Cisco模拟器)

路由-静态路由实现非三层转发跨网段通信

Docker容器跨主机通信之:直接路由方式

实验:主机间跨网络通信

Docker容器跨主机通信之:直接路由方式