CentOS 6.x搭建Open***实现双IDC互联
一、需求说明1、网络拓扑结构
http://s3.运维网.com/wyfs02/M00/70/28/wKiom1Wy-LOQavlOAAG1AJNpah8803.jpg
2、环境说明
设备名称
IP地址信息所属机房***server 外网eth010.0.0.3 VMnet3
内网eth1192.168.1.4VMnet4
网关 机房默认网关
上海***client外网eth010.0.0.4 VMnet3
内网eth1172.16.1.4 VMnet5
网关 机房默认网关
北京client1 eth0 192.168.1.5 VMnet4
网关 192.168.1.4
上海client2eth0 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.5192.168.1.410.0.0.310.0.0.4172.16.1.4172.16.1.5192.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.运维网.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***http://s3.运维网.com/wyfs02/M02/70/43/wKioL1W1xhGjEOMbAANMx5mM4ho267.jpg
如果出现以上的内容,证明我们配置好了,下面我们就进行编译安装
make
make install
tree /usr/local/open***/ 安装好的目录结构大概如下,不同版本可能有所不同
http://s3.运维网.com/wyfs02/M02/70/46/wKiom1W1xLvAgCnQAAGNMpxcDtI318.jpg
下面我们添加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-rsahttp://s3.运维网.com/wyfs02/M01/70/43/wKioL1W1ziXAqFUbAAMpNe31rk4235.jpg
根据脚本的名字我们可以猜测到工具的功能,首先我们先修改一下vars这个文件,修改成我们相关的内容。
# vim vars
http://s3.运维网.com/wyfs02/M02/70/46/wKiom1W1zFvgHo9TAAHgzNIqMfk987.jpg
# source vars
# ./buile-ca
http://s3.运维网.com/wyfs02/M01/70/57/wKioL1W2-O2SCgfrAAKn0wBFXU8130.jpg
创建服务器证书
# ./build-key-server server
http://s3.运维网.com/wyfs02/M01/70/57/wKioL1W2-UKwgzfsAAUfwSNWJ0Y994.jpg
创建客户端证书
# ./build-key client
http://s3.运维网.com/wyfs02/M00/70/5A/wKiom1W296WhSmKOAAUUyyAzyXU989.jpg
创建Diffie Hellman参数
# ./build-dh
这一步需要的时间很长,大家可以把vars文件里面的export KEY_SIZE=2048 改为1024
生产的证书全部放在easy-rsa目录下面的keys里面
http://s3.运维网.com/wyfs02/M00/70/43/wKioL1W10lDTwCdHAAIUePHqdU8489.jpg
4、Open*** Server的配置
我们查看一下配置文件的内容,具体每个参数的含义配置文件讲解的很详细,我这里不再陈述,为了看起来简便,我这里把注释删掉,参数不是很多,我们对其修改成我们需要的,修改后我这里是这样的。
grep -vE '^#|^;|^$' /etc/open***/server.confhttp://s3.运维网.com/wyfs02/M02/70/64/wKioL1W3K86TZcliAAHcdZb7Z_A356.jpg
--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/clienthttp://s3.运维网.com/wyfs02/M00/70/67/wKiom1W3K5zyJCacAABsEzSF7jE260.jpg
--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
http://s3.运维网.com/wyfs02/M00/70/68/wKiom1W3MVvClvjYAADl6I-Itu4384.jpg
客户端的配置比较简单,这里不在进行讲解。
四、服务的启动及测试
1、首先我们先查看一下***服务端和客户端的路由信息
***服务端
http://s3.运维网.com/wyfs02/M01/70/68/wKiom1W3MizSRdBtAAS6I_qyXwU577.jpg
***客户端
http://s3.运维网.com/wyfs02/M02/70/65/wKioL1W3NGeSL4vvAASj13vIWPA025.jpg
2、***服务端及客户端的启动
***服务端启动
/usr/local/open***/sbin/open*** /etc/open***/server.conf &
cat /var/log/open***/open***.loghttp://s3.运维网.com/wyfs02/M00/70/65/wKioL1W3NXuS3geQAAUfdMgEFR8570.jpg
***客户端启动
/usr/local/open***/sbin/open*** /etc/open***/client.confhttp://s3.运维网.com/wyfs02/M02/70/65/wKioL1W3NeDAsb9OAAghy4B9vck795.jpg
3、***服务端及客户端的启动后的路由信息
***服务端
http://s3.运维网.com/wyfs02/M01/70/65/wKioL1W3NlXBOxhVAAZhdqabH80252.jpg
我们可以看到增加了一个虚拟网卡,增加了几条路由。
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
***客户端
http://s3.运维网.com/wyfs02/M02/70/65/wKioL1W3NruCQchoAAZK2U74aJk069.jpg
现在***服务端和客户端都有到达对方后端子网的路由,我测试了一下,他们到对方后端子网的网络都已经联通了,我这里就不在贴图了。
这里可以使用tcpdump抓包查看过程
五、项目需求实现
1、我们在client1测试
http://s3.运维网.com/wyfs02/M00/70/68/wKiom1W3Neiz__5uAAW0zWGQ1VI101.jpg
结果显示client1可以ping通client2。
2、在client2上面测试
http://s3.运维网.com/wyfs02/M02/70/68/wKiom1W3NnnytNt9AASy80NfOKM924.jpg
我们可以看到client2和client1也是互通的,由此证明项目成功。
六、项目改进
1、不修改客户机默认网关
我们知道,上面的环境是所有的客户机网关都指向了***服务器,在很多环境场合是不允许我们修改内网客户机的网关,数量少还可以,数量多的话那就是很大的工作,并且可能会影响服务的运行,而且所有的流量都经过***也是对***服务器很大的压力。
假设所有的客户机都是现有的默认网关,我们实现的目的就是他们到达对方子网的时候经过***服务器,而访问外网还是使用自己默认的网关,其实很简单,我们只需要在每个客户机上面添加上到对方子网的路由。
2、如何添加路由
对于client1,我是这样操作,我们删掉现在的默认路由,可以不设定
route del default gw 192.168.1.4ping 172.16.1.5
connect: Network is unreachable 这时候我们是无法ping通对方子网的,下面我们添加一条路由
route add -net 172.16.1.0/24 gw 192.168.1.4http://s3.运维网.com/wyfs02/M02/70/70/wKiom1W4M7-ikAdtAAI-of8G3z0041.jpg
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系统下,现在已经不再赞成使用。
如有什么不同意见欢迎和我交流,谢谢!
页:
[1]