一、需求说明

1、网络拓扑结构

2、环境说明

设备名称 IP地址信息 所属机房
***server

外网eth0  10.0.0.3     VMnet3

内网eth1  192.168.1.4  VMnet4

网关 机房默认网关

上海
***client

外网eth0  10.0.0.4     VMnet3

内网eth1  172.16.1.4   VMnet5

网关 机房默认网关

北京
client1

eth0 192.168.1.5       VMnet4

网关 192.168.1.4

上海
client2

eth0 172.16.1.5        VMnet5

网关 172.16.1.4

北京

3、实现目标

1、实现上海IDC机房和北京IDC机房内网机器互联,即我们可以通过client1 ping通client2

2、实现192.168.1.5和172.16.1.5互通

在实验前,请把四台虚拟机准备好,IP配置好,其中我设置的VMnet3、4、5都是仅主机模式,大家可以先把需要安装的软件安装好在修改为仅主机,因为仅主机模式不能上互联网,给电脑的VMnet4配置一个192.168.1.11,给VMnet5配置一个172.16.1.11,然后我们就可以通过连接四台虚拟机了。

3、环境搭建好之后我们检查一下联通性,正常情况下六个IP互通情况如下

192.168.1.5 192.168.1.4 10.0.0.3 10.0.0.4 172.16.1.4 172.16.1.5
192.168.1.5
192.168.1.4
10.0.0.3
10.0.0.4
172.16.1.4
172.16.1.5

这里可以使用tcpdump抓包查看过程

4、把***Server、***Client的数据包转发打开,不然数据传输不过去

# echo 1 > /proc/sys/net/ipv4/ip_forward

这里可以使用tcpdump抓包查看过程

二、Open*** Server的安装配置

1、Open***下载

通过官网下载最新版本的open***。http://open***.net/,有可能因为国家防火墙的原因,可能无法访问,我这里提供的下载地址是https://swupdate.open***.org/community/releases/open***-2.3.7.tar.gz

2、Open*** Server安装
    我的系统环境是CentOS 6.3 32位最小化安装,我的上一篇文章是使用的yum安装,http://wangzan18.blog.51cto.com/8021085/1673778,使用的是epel仓库,我还是推荐大家使用yum安装,简单方便,open***依赖一些软件,openssl提供数据加密,lzo提供数据压缩,我们都可以使用yum进行安装,这里我的open***使用源码编译安装,一些依赖的软件包大家请提前下载好。

#安装依赖的软件包
yum install openssl-devel lzo-devel pam-devel gcc wget -y
#下载open***软件
wget https://swupdate.open***.org/community/releases/open***-2.3.7.tar.gz
#编译安装open***
tar xf open***-2.3.7.tar.gz
cd open***-2.3.7
./configure --prefix=/usr/local/open*** --sysconfdir=/etc/open***

如果出现以上的内容,证明我们配置好了,下面我们就进行编译安装

make
make install
tree /usr/local/open***/

安装好的目录结构大概如下,不同版本可能有所不同

下面我们添加open***的配置文件

mkdir /etc/open***
cp sample/sample-config-files/server.conf /etc/open***/

因为我们这个版本没有提供密钥生成更具,但是他给我们提供了默认的证书,在open***-2.3.7/sample/sample-keys目录下面

3、我们这里现在密钥生成工具

#下载密钥生成工具
wget https://github.com/Open***/easy-rsa/archive/release/2.x.zip
unzip 2.x.zip
#复制我们的CA到open***配置目录下
cp -ra easy-rsa-release-2.x/easy-rsa/2.0 /etc/open***/easy-rsa
cd /etc/open***/easy-rsa

根据脚本的名字我们可以猜测到工具的功能,首先我们先修改一下vars这个文件,修改成我们相关的内容。

# vim vars

# source vars

# ./buile-ca

创建服务器证书

# ./build-key-server server

创建客户端证书

# ./build-key client

创建Diffie Hellman参数

# ./build-dh

这一步需要的时间很长,大家可以把vars文件里面的export KEY_SIZE=2048 改为1024

生产的证书全部放在easy-rsa目录下面的keys里面

4、Open*** Server的配置

我们查看一下配置文件的内容,具体每个参数的含义配置文件讲解的很详细,我这里不再陈述,为了看起来简便,我这里把注释删掉,参数不是很多,我们对其修改成我们需要的,修改后我这里是这样的。

grep -vE '^#|^;|^$' /etc/open***/server.conf

--client-config-dir /etc/open***/ccd/

通过该选项为存放客户端定制的配置文件指定一个目录,在一个***用户通过客户端验证之后,Open***将会查找这个目录,通过这些文件可以使用--ifconfig-push来指定一个固定的客户端IP地址,也可以使用--iroute指定一个客户端自己拥有的子网。

--push "route 192.168.1.0 255.255.255.0"

这项指令是把***Server后端的子网推送给***Client,要不Client不知道如何到达这个子网。

--route 172.16.1.0 255.255.255.0

这项指令是给***Server添加一条路由,要不***Server不知道如何到达172.16.1.0网段。

--server 10.8.0.0 255.255.255.0

这项指令是给***Client分配IP地址。

cat /etc/open***/ccd/client

--iroute 172.16.1.0 255.255.255.0

为特定的客户端生产内部路由。

--ifconfig-push 10.8.0.4 10.8.0.5

这条指令就是给特定客户端指定分配的IP的,可以不使用,除非客户端比较多,你有必要进行区分。

到此服务端的配置告一段落

三、Open*** Client的安装配置

1、客户端的安装

客户端的安装请安装服务端的安装,过程一样

2、客户端的配置

下面我把我的客户端配置文件发送一下,首先我们需要把服务器端的证书文件拷贝过来。

# cat /etc/open***/client.conf

客户端的配置比较简单,这里不在进行讲解。

四、服务的启动及测试

1、首先我们先查看一下***服务端和客户端的路由信息

***服务端

***客户端

2、***服务端及客户端的启动

***服务端启动

/usr/local/open***/sbin/open*** /etc/open***/server.conf &
cat /var/log/open***/open***.log

***客户端启动

/usr/local/open***/sbin/open*** /etc/open***/client.conf

3、***服务端及客户端的启动后的路由信息

***服务端

我们可以看到增加了一个虚拟网卡,增加了几条路由。

Open***默认使用的net30模式,10.8.0.1是获取的一个实际IP,接受ping,10.8.0.2是Open***内部的一个虚拟IP地址,它被用作末端路由,对于这个地址,Open***不会接受ping。

我们可以在启动的时候增加一个参数--topology subnet让Open***工作在subnet模式下,使用此模式要去掉前面的选项--ifconfig-push,不然客户端会连接失败,具体net30和subnet模式的区别,大家可以参考官网文档(man open*** ,doc)或者参考本文附录。

# /usr/local/open***/sbin/open*** --config /etc/open***/server.conf --topology subnet

***客户端

现在***服务端和客户端都有到达对方后端子网的路由,我测试了一下,他们到对方后端子网的网络都已经联通了,我这里就不在贴图了。

这里可以使用tcpdump抓包查看过程

五、项目需求实现

1、我们在client1测试

结果显示client1可以ping通client2。

2、在client2上面测试

我们可以看到client2和client1也是互通的,由此证明项目成功。

六、项目改进

1、不修改客户机默认网关

我们知道,上面的环境是所有的客户机网关都指向了***服务器,在很多环境场合是不允许我们修改内网客户机的网关,数量少还可以,数量多的话那就是很大的工作,并且可能会影响服务的运行,而且所有的流量都经过***也是对***服务器很大的压力。

假设所有的客户机都是现有的默认网关,我们实现的目的就是他们到达对方子网的时候经过***服务器,而访问外网还是使用自己默认的网关,其实很简单,我们只需要在每个客户机上面添加上到对方子网的路由。

2、如何添加路由

对于client1,我是这样操作,我们删掉现在的默认路由,可以不设定

route del default gw 192.168.1.4
ping 172.16.1.5
connect: Network is unreachable

这时候我们是无法ping通对方子网的,下面我们添加一条路由

route add -net 172.16.1.0/24 gw 192.168.1.4

client2也是如此操作

route del default gw 172.16.1.4
route add -net 192.168.1.0/24 gw 172.16.1.4

3、如何更加了解数据传输过程

Linux提供一个数据抓包的命令tcpdump,如果过程中哪里有问题,数据就是传输不过去,我们可以通过抓包工具一步一步抓取,我这里简单介绍一个例子,比如我们在client1 ping client2不通,我们首先在***server上面转包看看数据吧流向,然后在***client上面抓取,然后在client2上面抓取,看看数据吧是否有回包,如果没有回包很大可能的情况就是回包路由的问题。

七、附录

在--topology mode选项中,mode有三种取值,即net30、subnet和p2p。

当运行在--dev tun模式下时,可以通过--topology mode选项来配置虚拟地址的拓扑结构。而对于--dev tap而言,该选项没有任何意义,因为在--dev tap模式下,总是使用子网拓扑。

1、net30

Open***默认的子网掩码是/30,也就是255.255.225.252。在这样的情况下,只有两个地址可以使用,一个给服务端,一个给客户端,这样地址是很浪费的。

在Open***的2.0版本中,Open***能通过虚拟一个TUN虚拟接口处理多个客户端,要处理这种技术,可以把服务器上看到的PtP连接看作是一个操作系统和Open***之间的连接,而在Open***内部还需要为每一个客户端创建另一个PtP。如何所有的O/S在TUN接口上真正的支持PtP连接,那么这将会是的Open***服务器仅使用一个IP地址,并且一个客户端也使用一个IP地址。

2、subnet

subnet通过配置TUN接口的本地IP地址和子网掩码来使用一个子网,而不是点对点的拓扑结构,类似于使用--dev tap和以太网桥模式的拓扑结构。这种模式为每个客户端分配单个IP地址。

3、p2p

p2p模式使用点对点拓扑,仅适用于Windows系统下,现在已经不再赞成使用。

如有什么不同意见欢迎和我交流,谢谢!

CentOS 6.x搭建Open***实现双IDC互联相关推荐

  1. mysql之 mysql 5.6不停机主主搭建(活跃双主基于日志点复制)

    环境说明: 版本 version 5.6.25-log 主1库ip: 10.219.24.25 主2库ip:10.219.24.22 os 版本: centos 6.7 已安装热备软件:xtrabac ...

  2. php找不到gearmanClent类,centos 使用docker搭建Gearman任务分发系统 ,Gearman的安装和使用...

    第一步,centos 安装 docker,拉取docker centos 镜像(此处不赘述) https://docs.docker.com/install/linux/docker-ce/cento ...

  3. centos 6.5 搭建lnmp环境

    centos 6.5 搭建lnmp环境 建议安装顺序: mysql------->>编译php---->>编译nginx 最麻烦:编译php出各种错. 最简单:mysql 软件 ...

  4. CentOS 7下搭建LAMP并把MySQL单独分离

    CentOS 7下搭建LAMP并把MySQL单独分离 原文:http://www.linuxidc.com/Linux/2017-05/144037.htm 环境: 系统:CentOS-7-x86_6 ...

  5. CentOS 7上搭建Spark3.0.1+ Hadoop3.2.1分布式集群

    CentOS 7上搭建Spark3.0.1+ Hadoop3.2.1分布式集群 VMWare 安装CentOS 7 使用Xshell连接虚拟机 集群设置 安装JDK 1.8 SSH 免密登陆 安装ha ...

  6. centos利用nexus搭建局域网docker私有仓库

    centos利用nexus搭建局域网docker私有仓库 1.官网下载nexus oss版本 https://sonatype-download.global.ssl.fastly.net/repos ...

  7. centos dhcp 服务器搭建 多vlan

    centos dhcp 服务器搭建   多vlan centos 6.5   版本     /etc/dhcp/dhcpd.conf         服务器配置文件 /etc/rc.d/init.d/ ...

  8. linux搭建虚拟化平台报告,CentOS 7中搭建KVM虚拟化平台的方法步骤

    什么是虚拟化 虚拟化就是把硬件资源从物理方式转变为逻辑方式,打破原有物理结构,使用户可以灵活管理这些资源,并且允许1台物理机上同时运行多个操作系统,以实现资源利用率最大化和灵活管理的一项技术. 虚拟化 ...

  9. CentOS 7上搭建Spark 3.0.1 + Hadoop 3.2.1分布式集群

    CentOS 7上搭建Spark3.0.1+ Hadoop3.2.1分布式集群 VMWare 安装CentOS 7 使用Xshell连接虚拟机 集群设置 安装JDK 1.8 SSH 免密登陆 安装ha ...

最新文章

  1. PyramidBox笔记
  2. WebService大讲堂之Axis2(6):跨服务会话(Session)管理
  3. 解决Ubuntu14.04 下 E: Encountered a section with no Package: header 问题
  4. oracle事务处理 自动提交
  5. iOS开发之时间格式的转化
  6. Android开发过程中的部分经验总结
  7. 一文了解Nuget的使用
  8. 将结构体数据存储到一段字符串string中
  9. 一个简单的iBatis入门例子
  10. 余额宝技术架构及演进
  11. 通信维修专用电源_万可PRO 2电源 | 开拓性通信功能,自信迈入数字化时代
  12. 《完全写作指南》随笔
  13. 使用GRUB2制作U盘PE启动盘
  14. 丹佛机场行李系统案例分析
  15. 保存rdl文件到报表服务器,在SQL服务器上将RDL报表导出成Excel XLS XLSX SpreadsheetML格式...
  16. selenium录屏python_Selenium实现录屏的一种方法
  17. angularjs 同步請求_AngularJS 应用请求设置同步问题~
  18. ExoPlayer网速估计方法
  19. win10 卸载cuda
  20. 自动控制原理(根轨迹)

热门文章

  1. Hadoop系列之七:分布式文件系统HDFS(2)
  2. c:forEach 取 map的值
  3. xp2003服务器怎么安装系统,UEFI里启动Windows XP/Server 2003 x86教程
  4. MySQL高级 - 案例 - 系统性能优化分析
  5. MySQL查看索引使用情况
  6. 基于命令行设置lazy-queue
  7. SpringSecurity OAuth2四种模式说明
  8. SpringSecurity使用自定义认证页面
  9. what is IOC
  10. MyBatis关键配置-创建会话工厂