linux模拟实现主机跨路由通信
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模拟实现主机跨路由通信的更多相关文章
- VM中linux和windows主机进行串口通信
最近在做关于AIS的内容.为了对AIS电文进行解码,串口收发. 数据有PC机模拟发送,为了调试方便,不用次次将程序放到开发板上运行,所以利用pc主机和虚拟机进行串口通信模拟该过程. 首先需要用到一个软 ...
- Linux跨网段通信小实验
一.实验场景. 实验准备,Linux主机4台.分别是主机A,路由主机R1,路由主机R2,主机 C,主机A的ip是192.168.56.66/24,且只有一块网卡eth0:路由主机R1有两块网卡eth0 ...
- linux 单机跨进程通信
一般来说通过网络通信(比如tcp,udp)或者共享内存的方式肯定可以实现跨进程通信,但现在这里要说的是比较偏但实用的几个方法:利用unix域通信(普通网络连接),利用unix域通信(socketpai ...
- 【Chromium中文文档】跨进程通信 (IPC)
跨进程通信 (IPC) 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/I ...
- Docker跨服务器通信Overlay解决方案(下) Consul集群
承接上文 本文基于上篇文章,详细的场景说明与分析在前篇随笔中业已记录,有兴趣可以移步 Docker跨服务器通信Overlay解决方案(上) Consul单实例 本文主旨 本文为Docker使用Cons ...
- ARM 开发板嵌入式linux系统与主机PC通过串口传输文件
本文转载自http://useless20.blog.163.com/blog/static/237409982010227127576/ 嵌入式linux系统与主机通过串口传输文件 我想如果要从PC ...
- iframe跨域通信方案
概述 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦.这里把涉及到跨域的一些问题简单地整理一下: 首先什么 ...
- 跨进程通信之Messenger
1.简介 Messenger,顾名思义即为信使,通过它可以在不同进程中传递Message对象,通过在Message中放入我们需要的入局,就可以轻松实现数据的跨进程传递了.Messenger是一种轻量级 ...
- JavaScript系列----AJAX机制详解以及跨域通信
1.Ajax 1.1.Ajax简介 Ajax简介这一部分我们主要是谈一下ajax的起源,ajax是什么?因为这些是跟技术无关的.所以,大多细节都是一笔带过. Ajax的起源? Ajax一词源于2005 ...
随机推荐
- git分支管理之多人协作
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote: $ git r ...
- git分支管理之解决冲突
人生不如意之事十之八九,合并分支往往也不是一帆风顺的. 准备新的feature1分支,继续我们的新分支开发: $ git checkout -b feature1 Switched to a new ...
- 由.Net类库提供的农历计算
由.Net类库提供的农历计算(C#农历) 2007-11-21 12:47:00 标签:.Net 类库 农历计算 C#农历 休闲 ...
- ASP.NET程序运行出现WebDev.WebServer40.exe已停止工作解决方法(netsh winsock reset)
问题描述:在开发系统时候运行程序突然报出"WebDev.WebServer40.exe已停止工作"的错误,程序调试运行,发现程序在打开数据库时候报错,也就是Connection.O ...
- asp.net 程序,当发生找不到文件的错误时,如何正确定位是哪个文件?
需要在Global.asax.cs中添加Application_Error代码如下,在Log中查看是哪个文件缺失: protected void Application_Error(object se ...
- NYOJ 23.取石子(一)
取石子(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 一天,TT在寝室闲着无聊,和同寝的人玩起了取石子游戏,而由于条件有限,他/她们是用旺仔小馒头当作石子.游 ...
- 【NO.12-1】Jmeter - 在Linux执行性能测试的方法 [1]
前面讲过在Windows执行性能测试的方法,就是这篇了<jmeter - 一个完整的接口测试的脚本>, 在Windows执行性能测试之前,首先要有1个性能测试脚本嘛, 但是这个性能测试脚本 ...
- 【NO.8】jmeter-场景-上传文件-send-a-file
简要说就3点: POST请求 Request的参数都写在路径内,不写在表单里 上传的文件写在表单里 只要记住以上3点,也就避免了在设计脚本的时候走弯路.下面具体图文并茂地介绍如何使用Jmeter实现上 ...
- vi替换方法总结
1. 基本的替换 :s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky :n,$s/vivian/sky/ ...
- QT server服务端如何判断客户端断开连接
在QT编程中有时会用到server服务端与客户端进行TCP网络通信,服务端部分代码如下: 1.创建server用于监听客户端套接字 this->server = new QTcpServer(t ...