由于国家GW防火墙对×××的管控,不能直接通过国内与香港建立×××,如果反过来,通过open***从香港主动连接国内,就可以实现,亲测,速度和稳定性非常OK;

1、 Open***优势

1. 配置灵活,可以应付各种复杂网络环境,比如点对点,或者网对网;

2. 实用性非常强,尤其是在当下国家GW干扰×××的大环境下,open***可以非常稳定打通国内外网络,实现互联互通,而且效果非常明显,非常稳定;

3. 成本价格低,是性价比非常高的×××方案,其性能并不亚于硬件设备,只需要一台稳定的PC电脑,或者云主机上部署,尤其适合于中小企业;

4. 支持移动办公,也可以使用于手机等移动终端设备;

2、 网络拓扑图

clip_image002[8]

3、 实验目的

通过Open***来实现172.16.20.0/24网络与服务器网络B(10.99.0.0/24)的网络互联,可用于解决国外网络延迟问题。

4、 环境说明

准备两台服务器,这里分别是两台云主机,网络在供应商哪里是经过优化的,到大陆非常稳定,延迟,见图,即深圳×××服务器和香港×××服务器;

深圳×××服务器作为×××服务器,香港×××服务器作为深圳×××服务器的客户端;而客户端网络A所在的网络的PC机作为香港×××服务器的客户端;客户端网络A拨入香港×××服务器,香港×××服务器以客户端的身份再拨入深圳×××服务器,从而打通了客户端网络A的pc机访问深圳×××服务器所在的服务器网络B,即 172.16.20.0/24访问10.99.0.0/24

深圳×××服务器

eth0接口IP:10.99.0.12(此直连物理网络,非×××虚拟网络) ×××虚拟IP:172.16.10.0/24 外网IP(略)

香港×××服务器

eth0接口IP:10.0.0.5 ×××虚拟IP: 172.16.20.0/24 外网IP(略)

拨入深圳×××服务器的客户端Common Name是xgserver

注: 深圳/香港×××服务器 都是 云主机服务器;

对比拓扑图和IP地址信息,得出最终的目的是要实现

172.16.20.0/24 网络与10.99.0.0/24 互联互通;

也许你会奇怪,为什么不是客户端网络A与服务器网络B的互联互通? 其实这里关系并不大, 172.16.20.0/24与10.99.0.0/24 能通,AB网络的互通就不难了,关键是我们要理解其中的逻辑;

5、 软件安装

yum install gcc* openssl-devel net-tools lzo-devel pam-devel –y
mkdir /usr/local/open***
tar –zxvf open***-2.4.2.tar.gz
cd open***-2.4.2
./configure –prefix=/usr/local/open***
Make
Make install

6、 配置easyrsa

pen***-2.3.8及以上版本,不包含easy-rsa,需要单独下载:

git clone https://github.com/Open×××/easy-rsa
mkdir /etc/open***/server
cp –r easy-rsa /etc/open***/server
cd /etc/open***/server/easy-rsa/easyrsa3
cp vars.example vars
vi vars     #编辑vars,定位到如下配置位置,修改如下
set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "GUANGDONG"
set_var EASYRSA_REQ_CITY "SHENZHEN"
set_var EASYRSA_REQ_ORG "HUANAN"
set_var EASYRSA_REQ_EMAIL "mycompany@example.net"
set_var EASYRSA_REQ_OU "mycompany"

保存,退出

7、 创建服务器证书及key

cp –R /so ftware/easy-rsa /etc/open***/server #拷贝easy-rsa目录到此目录
cd /etc/open***/server/easy-rsa/easyrsa3 #定位到目录,此目录
./easyrsa init-pki #初始化Pki
./easyrsa build-ca #创建根证书

………….

Enter PEM pass phrase: #输入根证书密码,用于后续证书创建

Verifying - Enter PEM pass phrase: #重复输入,确认密码

…………..

./easyrsa gen-req server nopass #创建服务端书
./easyrsa sign server server #签约服务器端证书,提示输入密码,先输入前面的根证书密码,第二个密码为服务器密码;
./easyrsa gen-dh #创建Diffie-Hellman,确保key穿越不安全网络

8、 创建客户端证书

mkdir /etc/open***/client #创建客户端目录,用于存放客户端证书和easy-rsa
cp –r /software/easy-esa /etc/open***/client
cd /etc/open***/client/easy-rsa/easyrsa3
./easyrsa init-pki #初始化
./easyrsa gen-req sgserver 注:后面提示的密码,设置之后必须记住,配置windows/linux客户端连接的时候,需要用到;
cd /etc/open***/server/easy-rsa/easyrsa3 #定位到服务器的easy-rsa目录
./easyrsa import-req /etc/open***/client/easy-rsa/easyrsa3/pki/reqs/xgserver.req xgserver #此req文件,是上图中倒数第二行的目录,导入并签约证书
./easyrsa sign client xgserver #提示输入根证书的密码,即最开始创建根证书时设置的密码

9、 服务器和客户端生成的文件

服务器端文件:

/etc/open***/server/easy-rsa/easyrsa3/pki/ca.crt
/etc/open***/server/easy-rsa/easyrsa3/pki/dh.pem
/etc/open***/server/easy-rsa/easyrsa3/pki/issued/server.crt
/etc/open***/server/easy-rsa/easyrsa3/pki/issued/xgserver.crt
/etc/open***/server/easy-rsa/easyrsa3/pki/private/ca.key
/etc/open***/server/easy-rsa/easyrsa3/pki/private/server.key
/etc/open***/server/easy-rsa/easyrsa3/pki/reqs/server.req
/etc/open***/server/easy-rsa/easyrsa3/pki/reqs/xgserver.req

客户端文件:

/etc/open***/client/easy-rsa/easyrsa3/pki/private/xgserver.key
/etc/open***/client/easy-rsa/easyrsa3/pki/reqs/xgserver.req

10、 复制文件

拷贝服务器密钥及证书等到open***目录

cp /etc/open***/server/easy-rsa/easyrsa3/pki/ca.crt /etc/open***/server
cp /etc/open***/server/easy-rsa/easyrsa3/pki/dh.pem /etc/open***/server
cp /etc/open***/server/easy-rsa/easyrsa3/pki/issued/server.crt /etc/open***/server
cp /etc/open***/server/easy-rsa/easyrsa3/pki/private/server.key /etc/open***/server

拷贝客户端密钥及证书等到client目录

/etc/open***/client/easy-rsa/easyrsa3/pki/private/xgserver.key
/etc/open***/server/easy-rsa/easyrsa3/pki/ca.crt
/etc/open***/server/easy-rsa/easyrsa3/pki/issued/xgserver.crt

客户端文件通常需要拷贝到客户端,比如windows

注: 以上所有配置,可以深圳和香港×××服务器,基本一样,只是要注意客户端Common Name要保持不一样,以免混淆。

11、 服务器配置

深圳服务器与香港服务器配置上有些区别,

进到open***的解压目录:

cd open***-2.4.2 /sample/sample-config-files
cp server.conf /etc/open*** #两台服务器都需要复制

深圳×××服务器配置:

vi server.conf #修改服务器端配置文件

management 127.0.0.1 1196 #管理接口
port 1195 #监听端口
proto udp #使用UDP封装协议
dev tun #tun设备
ca /etc/open***/server/ca.crt #指定根证书
cert /etc/open***/server/server.crt #指定服务器证书
key /etc/open***/server/server.key #指定服务器密钥
dh /etc/open***/server/dh.pem #DH
server 172.16.10.0 255.255.255.0 #×××客户端IP
ifconfig-pool-persist ipp.txt
push "route 10.99.0.0 255.255.255.0" #推送路由给客户端
client-config-dir /etc/open***/ccd #指定定制化客户端的目录,用于控制客户端的权限
route 172.16.20.0 255.255.255.0 #在本机open***服务器上添加系统路由
client-to-client #允许客户端互访,默认只能客户端访问×××服务器
keepalive 10 120
cipher AES-128-CBC #加密协议
comp-lzo
persist-key
persist-tun
status open***-status.log
log open***.log
log-append open***.log
verb 3

配置ccd,控制xgserver客户端配置

mkdir /etc/open***/ccd
vi xgserver #文件名必须跟客户端的Common Name相同,前文说过,这个客户端是安装在香港×××服务器上,用于拨入深圳×××服务器的,而连通香港和深圳网络;

添加如下内容:

ifconfig-push 172.16.10.250 172.16.10.249 #推送给客户端的IP地址;
iroute 172.16.20.0 255.255.255.0 #添加open***的路由,这里操作系统路由不同

注: 且看route 172.16.20.0 255.255.255.0 和 iroute 172.16.20.0 255.255.255.0,这两者之间有什么区别呢,为什么要同时配置呢?

答: 这两个参数非常重要,是×××两端的网络互联的关键;route和iroute参数,在这里分别控制着不同的路由,route是控制系统路由的,即给操作系统添加路由;iroute是控制系统路由之外的Open***内部路由,其本质是告诉open***通过对等方创建一条内部open***路由到达对端网络,每个客户端所在的网络并不相同,所以,这是每个客户端的配置;这就是open***的网对网的灵活之处,维护和定位每个客户端所在子网以及所连接的子网,可以任意控制客户端所在的子网访问或者不能互访,随意控制虚拟网络的终点和起点;

如何查看open***的内部路由呢?

在服务器上,打开Open***的管理端口,即management控制的参数;

telnet 127.0.0.1 1196

进入之后,再输入status,看如下:

clip_image004[8]

香港×××服务器配置:

local 10.0.0.5
management 127.0.0.1 1196
port 1195
proto udp
dev tun
ca /etc/open***/server/ca.crt
cert /etc/open***/server/server.crt
key /etc/open***/server/server.key
dh /etc/open***/server/dh.pem
server 172.16.20.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.99.0.0 255.255.255.0"
push "route 172.16.10.0 255.255.255.0"
client-to-client
keepalive 10 120
cipher AES-128-CBC
comp-lzo
persist-key
persist-tun
status open***-status.log
log open***.log
log-append open***.log
verb 3

12、 开启路由转发

vim /etc/sysctl.conf
net.ipv4.ip_forward = 0 改成 net.ipv4.ip_forward = 1

13、 iptables配置

/sbin/iptables -t nat -I POSTROUTING -s 172.16.20.0/255.255.255.0 -o ens33 -j MASQUERADE #对于来源为×××虚拟IP访问配置未指定的网络时,通过物理网口eth0的nat转发出去,通常是公网网络
iptables -I FORWARD 1 -j ACCEPT #默认转发是禁止的,允许转发;这条很重要,网上太多资料都没有这一条,不是本机的网络,要允许防火墙转发;

注:配置了以上策略,要记得保存iptables-save

14、 启动open***服务

深圳×××服务器:

/usr/local/open***/sbin/open*** --config /etc/open***/server/server.conf &

香港×××服务器:

/usr/local/open***/sbin/open*** --config /etc/open***/server/server.conf &

启动客户端(linux系统,在香港×××服务器上)

Linux下,客户端的安装方法,跟服务器端安装方法,不过,客户端不需要配置easy-rsa;

mkdir /etc/open***/szconnection
cp /software/open***-2.4.2/sample/sample-config-files/client.conf /etc/open***/szconncection/ #从open***源码包中,拷贝客户端配置文件;

把xgserver这个客户端的证书密钥 以及根证书拷贝这个目录(具体文件,请参照 10、 复制文件的客户端证书和密钥所提到的三个文件,通过一些方法(比如scp)拷贝/etc/open***/szconncection/目录),最终目录如下:

clip_image006[8]

配置文件内容如下:

client
dev tun
proto udp
remote 211.154.139.8 1094
resolv-retry infinite
nobind
persist-key
persist-tun
ca /etc/open***/szconnection/ca.crt
cert /etc/open***/szconnection/xgserver.crt
key /etc/open***/szconnection/xgserver.key
remote-cert-tls server
cipher AES-256-CBC
comp-lzo
verb 3

保存

启动

/usr/local/open***/sbin/open*** --config /etc/open***/szconnection/client.conf &

注: 这里启动 通常需要输入密码,linux无法保存此密码,下面提供了一个脚本可以保存密码,供参考;

脚本内容:

#!/usr/bin/expect
set timeout 30
spawn /usr/local/open***/sbin/open*** --config /etc/open***/szconnection/client.conf
expect "Password:" { send "WIN2net\r" }
expect eof

注: 需要先安装expect

15、 客户端安装

客户端的安装,非常简单,可以自行百度,也可以参考其他博客;

16、 测试

从客户端网络A中,任意一台PC安装×××客户端,ping服务器网络B网段,在服务器网络B中,有一台windows服务器,其IP是10.99.0.10;

先在windows服务器,添加路由:

route add –p 172.16.20.0 mask 255.255.255.0 10.99.0.12

然后从客户端网络A中,ping 10.99.0.10

clip_image008[8]