p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 14.0pt; font-family: 等线 }
h1 { margin: 0cm; margin-bottom: .0001pt; text-align: justify; line-height: 30.0pt; page-break-after: avoid; font-size: 16.0pt; font-family: 等线; font-weight: bold }
h2 { margin: 0cm; margin-bottom: .0001pt; text-align: left; line-height: 30.0pt; page-break-after: avoid; font-size: 16.0pt; font-family: 楷体; font-weight: bold }
h3 { margin: 0cm; margin-bottom: .0001pt; text-align: justify; line-height: 30.0pt; page-break-after: avoid; font-size: 14.0pt; font-family: 等线; font-weight: bold }
h4 { margin-top: 14.0pt; margin-right: 0cm; margin-bottom: 14.5pt; margin-left: 0cm; text-align: justify; line-height: 156%; page-break-after: avoid; font-size: 14.0pt; font-family: "等线 Light"; font-weight: bold }
p.MsoHeader,li.MsoHeader,div.MsoHeader { margin: 0cm; margin-bottom: .0001pt; text-align: center; border: none; padding: 0cm; font-size: 9.0pt; font-family: 等线 }
p.MsoFooter,li.MsoFooter,div.MsoFooter { margin: 0cm; margin-bottom: .0001pt; text-align: left; font-size: 9.0pt; font-family: 等线 }
p.MsoTitle,li.MsoTitle,div.MsoTitle { margin-top: 12.0pt; margin-right: 0cm; margin-bottom: 3.0pt; margin-left: 0cm; text-align: center; font-size: 16.0pt; font-family: "等线 Light"; font-weight: bold }
p.MsoSubtitle,li.MsoSubtitle,div.MsoSubtitle { margin-top: 12.0pt; margin-right: 0cm; margin-bottom: 3.0pt; margin-left: 0cm; text-align: center; line-height: 130%; font-size: 16.0pt; font-family: 等线; font-weight: bold }
p { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 12.0pt; font-family: "Times New Roman", serif }
p.MsoListParagraph,li.MsoListParagraph,div.MsoListParagraph { margin: 0cm; margin-bottom: .0001pt; text-align: justify; text-indent: 21.0pt; font-size: 14.0pt; font-family: 等线 }
span.1
{ font-family: 黑体; font-weight: bold }
span.2
{ font-family: 楷体; font-weight: bold }
span.3
{ font-family: 楷体; font-weight: bold }
span.4
{ font-family: "等线 Light"; font-weight: bold }
span.a { font-family: "等线 Light"; font-weight: bold }
span.a0 { font-weight: bold }
span.a1 { font-family: 楷体 }
span.a2 { font-family: 楷体 }
.MsoChpDefault { font-family: 等线 }
div.WordSection1 { }

实验目的:

通过虚拟机模拟路由器,实现两台主机之间跨路由通信。

实验器材:

5个虚拟机,其中2个作为主机使用,3个模拟路由器使用。

本实验中所用虚拟机均为centos6。

实验步骤:

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

linux模拟实现主机跨路由通信的更多相关文章

  1. VM中linux和windows主机进行串口通信

    最近在做关于AIS的内容.为了对AIS电文进行解码,串口收发. 数据有PC机模拟发送,为了调试方便,不用次次将程序放到开发板上运行,所以利用pc主机和虚拟机进行串口通信模拟该过程. 首先需要用到一个软 ...

  2. Linux跨网段通信小实验

    一.实验场景. 实验准备,Linux主机4台.分别是主机A,路由主机R1,路由主机R2,主机 C,主机A的ip是192.168.56.66/24,且只有一块网卡eth0:路由主机R1有两块网卡eth0 ...

  3. linux 单机跨进程通信

    一般来说通过网络通信(比如tcp,udp)或者共享内存的方式肯定可以实现跨进程通信,但现在这里要说的是比较偏但实用的几个方法:利用unix域通信(普通网络连接),利用unix域通信(socketpai ...

  4. 【Chromium中文文档】跨进程通信 (IPC)

    跨进程通信 (IPC) 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/I ...

  5. Docker跨服务器通信Overlay解决方案(下) Consul集群

    承接上文 本文基于上篇文章,详细的场景说明与分析在前篇随笔中业已记录,有兴趣可以移步 Docker跨服务器通信Overlay解决方案(上) Consul单实例 本文主旨 本文为Docker使用Cons ...

  6. ARM 开发板嵌入式linux系统与主机PC通过串口传输文件

    本文转载自http://useless20.blog.163.com/blog/static/237409982010227127576/ 嵌入式linux系统与主机通过串口传输文件 我想如果要从PC ...

  7. iframe跨域通信方案

    概述 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦.这里把涉及到跨域的一些问题简单地整理一下: 首先什么 ...

  8. 跨进程通信之Messenger

    1.简介 Messenger,顾名思义即为信使,通过它可以在不同进程中传递Message对象,通过在Message中放入我们需要的入局,就可以轻松实现数据的跨进程传递了.Messenger是一种轻量级 ...

  9. JavaScript系列----AJAX机制详解以及跨域通信

    1.Ajax 1.1.Ajax简介 Ajax简介这一部分我们主要是谈一下ajax的起源,ajax是什么?因为这些是跟技术无关的.所以,大多细节都是一笔带过. Ajax的起源? Ajax一词源于2005 ...

随机推荐

  1. python--DenyHttp项目(1)--socket编程:服务器端进阶版socketServer

    在网上看到了SocketServer模块,于是Server端简化: #coding:utf-8 import socketserver class MyTCPHandler(socketserver. ...

  2. 安徽省2016“京胜杯”程序设计大赛_I_恶魔A+B

    恶魔A+B Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 73 Accepted: 17 Description 相信大家 ...

  3. Linux配置全局jdk

    Linux配置全局jdk 1.确保相应文件夹下有apache-tomcat和jdk的压缩文件 注意:jdk文件必须为适应Linux版本的文件 (如果已经有了相应文件,可以跳过以下第2-3个步骤) 2. ...

  4. 对图像组成不了解?这样学习Matplotlib必走弯路!

    在学习Matplotlib的过程中,大家一定会遇到这样那样的问题,比如说,背景图怎么设置?坐标轴怎么设置?坐标轴上的刻度值怎么设置?怎样在PyQt中添加Matplotlib绘图模块? 其实想要学好用好 ...

  5. 设计模式之桥接模式(Bridge模式)

    我想大家小时候都有用蜡笔画画的经历吧.红红绿绿的蜡笔一大盒,根据想象描绘出格式图样.而毛笔下的国画更是工笔写意,各展风采.而今天我们的故事从蜡笔与毛笔说起. 设想要绘制一幅图画,蓝天.白云.绿树.小鸟 ...

  6. vs2010等宽字体设置

    VS2010自带的字体非等宽,不同行的代码采用同样的缩进空格时,可能左侧未对齐. 这个里有一款字体很帮,字体名字叫Fixedsys Excelsior 3.01,下载地址:http://www.fix ...

  7. Centos定时任务

    安装crontab:yum install crontabs说明:/sbin/service crond start //启动服务/sbin/service crond stop //关闭服务/sbi ...

  8. linux 下 Fatal error: Class ‘mysqli’ not found in

    先试用这种方法 http://blog.csdn.net/u010429424/article/details/43063211 我不知道自己安装的php 没他们路径,所以用了以下这种方法处理,并且不 ...

  9. synchronized VS Lock, wait-notify VS Condition

    最近在看Java Threads第三版,收获颇多.全英文阅读,感觉真的是爽歪歪.推荐大家都看看. 这一篇想系统的讲一讲,线程之间通信的2种模式,wait-notify 和 Condition. 先上一 ...

  10. Unity 5.3.5f1 (32-bit) 的简单塔防游戏

    我以前使用过unity但是第一次写这么全面的塔防小游戏.我以后会陆续的将我跟过的一些项目的心得经验与体会发表出来希望各位能人能够给出评价,我在此感激各位的批评与赞扬.另外我只是一个学生学艺不精,粗制滥 ...