使用Open×××实现网通、电信机房间快速、安全通讯

1 现状
假设如今的某公司的服务器存放在广州、河北、杭州三个机房中,每一个机房使用不用的子网:
机房 子网(内部)
广州 10.1.0.0/16
河北 10.2.0.0/16
杭州 10.3.0.0/16
各机房使用不一样的网段,为使用***链接创造了有利条件。
因为电信至网通间的网络速度是否缓慢,对广州与河北机房间的数据同步带来很是大的困难。咱们找到一台即链接了网通的线路,又链接了电信线路的服务器,但却不能直接用其做为路由。若是使用porxy的方式或转发的方式又会下降同步的效率。
采用C/S结构的***方式,即解决了同步的问题,又不会影响同步的效率。
2 网络结构
下图是三个机房实现互连互通后的拓扑图:
 
从上图能够看到,该×××系统是一个C/S的结构。中间为××× SERVER;广州、河北、杭州三个机房各取出一台服务器做为××× CLIENT。
××× SERVER拥有两块网卡和两条线路(电信和网通),两个网卡均须要设置公网IP。根据实际的状况设置路由,这里我是设置电信的线路为默认路由,设置到河北机房网段的走网通的路由。
××× CLIENT能够有两块网卡也能够只用一块网卡,若是是电信的线路则链接*** server的电信的IP;若是是网通的线路则链接网通的*** server 的网通方面的IP。
3 服务器信息以及网络安全
3.1 服务器信息
在本文中咱们使用了4台服务器分别做为*** server和client。因为使用***传输数据对服务器的负载不大,因此除了*** server须要一台新的服务器外,各机房的client服务器只须要找一台负载轻的服务器来担立即可。
本文使用的四台服务器的详细信息:
机房 *** 模式 操做系统 服务器IP
*** server RedHat 9.0 公网IP1 (网通) /公网IP2(电信)
广州机房 *** client FreeBSD4.9 10.1.0.1
河北机房 *** client RedHat9.0 10.2.0.1
杭州机房 *** client FreeBsd4.9 10.3.0.1
3.2 网络安全
除*** server外,其它的机房中的*** client均无需公网IP,因此*** server须要增强安全方面的设置。
该服务器是RedHat9.0的操做系统,登录界面使用的是grub,并设置的grub密码,保证物理上的安全。
使用Iptables设置包过滤防火墙,只容许你的服务器对其进行访问:
iptables –F
iptables -A INPUT -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -s YOURNETWORK -j ACCEPT
iptables -A INPUT -p udp –dport 1194 –j DROP
4 使用open***实现南北互通
4.1 Open***简介
Open××× 是一个强大、高度可配置、基于ssl的 ××× (Virtual Private Network)Open Source 软件。它具备多种的验证方式以及许多强大的功能。
Open×××工做在OSI模型的第2或第3层,使用SSL/TLS协议进行网络传输。支持多种客户认证方法,如证书、smart cards,加上用户名密码的证书认证等。除此之外,还有强大的ACL功能限制客户的信息交换。
Open×××能够运行在多种操做系统中,包括:
Linux, Windows 2000/XP and higher, OpenBSD, FreeBSD, NetBSD, Mac OS X, and Solaris.
使用Open***,能够实现:
● 使用特定udp或tcp端口实现两台主机的之间的***链接。
● 实现C/S结构,实现多台client经过server服务器互连互通。
● 经过TLS/SSL加密保证数据传输的安全。
● 经过数据的压缩,提升数据传输的速度。
(因为其它功能在本文中并不须要使用,如想要详细了解请访问 http://open***.net
4.2 下载
从如下网址下载最新版本的open*** source包。
http://nchc.dl.sourceforge.net/sourceforge/open***/open***-2.0_rc16.tar.gz
因为open***须要使用数据压缩,因此还须要安装lzo包:
http://www.oberhumer.com/opensource/lzo/download/lzo-1.08.tar.gz
4.3 安装
Linux:
软件 编译安装
Lzo ./configure && Make && make install
Open*** ./configure -prefix=/opt/open***&&Make && make install
FreeBSD:
Lzo ./configure &&Make && make install
Open*** ./configure -prefix=/opt/open*** –with-lzo-headers=/usr/local/include –with-lzo-headers=/usr/local/include&& Make && make install
参照上面的安装方法分别在linux和freebsd主机上安装好open***。
4.4 你的操做系统支持tun吗?
从我安装过的操做系统看,RedHat9.0和FreeBSD4.9的内核默认已经支持TUN,而且已经安装tun模块。RedHat AS3则没有该模块,须要从新编译内核支持。
加载tun模块:
●Linux 2.4 or higher (with integrated TUN/TAP driver):
(1) make device node: mknod /dev/net/tun c 10 200
(2a) add to /etc/modules.conf: alias char-major-10-200 tun
(2b) load driver: modprobe tun
(3) enable routing: echo 1 >; /proc/sys/net/ipv4/ip_forward
●FreeBSD 4.1.1+:
kldload if_tap
4.5 配置C/S结构的×××网络
4.5.1 如何生成ca和cert/key?
Ca certificate
authority(认证受权),全部的server和client均使用同一个ca文件。
cert certificate(证书)。公钥,每个server和client各自独立生成的公钥。
key 私钥,每个server和client工做独立生成的私钥。
◎ server端只须要知道它本身的cert和key。它不须要知道每个能够链接到它的client的cert。
◎ server端接受的client必须拥有以server的CA产生的cert。server能使用它本身的CA私钥来确认client的cert中是否带有其CA的记号。
4.5.1.1 产生MASTER Certificate Authority(CA) 的公钥(certificate)和私钥(key)
#######
In this section we will generate a master CA certificate/key, a server certificate/key, and certificates/keys for 3 separate clients
#######
在本节,咱们会尝试创建一对master CA的cert和key,一对server端的cert和key,和3个不一样client的年的cert和keys。
UNIX:
在open***的源码中能够找到easy-rsa文件夹。
cd easy-rsa
. ./vars 创建环境变量
./clean-all 清除之前的
./build-ca 创建CA
最后一个命令会调用openssl来建立CA的公钥和私钥:
Country Name (2 letter code) [KG]:
State or Province Name (full name) [NA]:
Locality Name (eg, city) [BISHKEK]:
Organization Name (eg, company) [Open×××-TEST]:yourcorp 在此输入公司名
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:hbroute 在此输入主机名或随便输一个名字
Email Address [me@myhost.mydomain]:
其它的按默认便可。
完成后会在keys目录中建立ca.crt ca.key index.txt serial四个文件。
4.5.1.2 建立server端的cert和key文件
cd easy-rsa
./build-key-server server

Country Name (2 letter code) [KG]:
State or Province Name (full name) [NA]:
Locality Name (eg, city) [BISHKEK]:
Organization Name (eg, company) [Open×××-TEST]:yourcorp 输入公司名
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:hbrouteserver 输入主机名或随便一个名字
Email Address [me@myhost.mydomain]:
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Sign the certificate? [y/n]:y 输入y
1 out of 1 certificate requests certified, commit? [y/n]y 输入y
Write out database with 1 new entries
Data Base Updated
其它的按回车。
4.5.1.3 建立3个client端cert和key文件
与建立server端的很是类似.
./build-key gz
./build-key hb
./build-key hz
 
注意gz、hb和hz不能同样,不然两个相同名字的client只能有一个能链接进来。
若是想使用带密码的client key,可使用build-key-pass脚本。
如创建广州的:
./build-key gz
Country Name (2 letter code) [KG]:
State or Province Name (full name) [NA]:
Locality Name (eg, city) [BISHKEK]:
Organization Name (eg, company) [Open×××-TEST]:mycorp
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:gz 键入”gz”
Email Address [me@myhost.mydomain]:
Certificate is to be certified until Mar 14 08:15:16 2015 GMT (3650 days)
Sign the certificate? [y/n]:y 键入“y”
1 out of 1 certificate requests certified, commit? [y/n]y 键入“y”
Write out database with 1 new entries
Data Base Updated
4.5.1.4 创建 Diffie Hellman文件
Diffie Hellman参数必需要在open*** server中使用。
./build-dh
4.5.1.5 全部文件的列表及使用的主机
Filename Needed By Purpose Secret
ca.crt server + all clients Root CA certificate NO
ca.key key signing machine only Root CA key YES
Dh{n}.pem server only Diffie Hellman parameters NO
server.crt server only Server Certificate NO
server.key server only Server Key YES
gz.crt 广州 only gz Certificate NO
Gz.key 广州 only gz Key YES
hcrt 河北 only hb Certificate NO
hb.key 河北 only hb Key YES
hz.crt 杭州 only hz Certificate NO
hz.key 杭州 only hz Key YES
根据上表,将全部的文件拷贝到须要这些文件的主机上。
4.5.2 Open××× Server端的配置
刚安装完open***的时候,/opt/open***目录下只有sbin和man两个文件夹,为方便起见,咱们能够在该目录下创建其它的文件夹。
目录名 做用
Sbin 放置open***的主程序“open***”
Conf 放置配置文件
Ccd 放置各client的独立配置文件
Log 放置server的日志文件
Keys 放置认证文件
Man 放置man文档
配置文件:./conf/server.conf
port 1194
proto udp
dev tun
ca /opt/open***/keys/ca.crt
cert /opt/open***/keys/server.crt
key /opt/open***/keys/server.key
dh /opt/open***/keys/dh1024.pem
server 10.99.0.0 255.255.255.0
ifconfig-pool-persist /opt/open***/log/ipp.txt
client-config-dir ccd
route 10.1.0.0 255.255.0.0
route 10.2.0.0 255.255.0.0
route 10.3.0 255.255.0.0
push “route 10.10.0 255.255.0.0″
push “route 10.2.0.0 255.255.0.0″
push “route 10.3.0.0 255.255.0.0″
client-to-client
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /opt/open***/log/open***-status.log
log /opt/open***/log/open***.log
verb 6
mute 20
writepid /opt/open***/log/server.pid
Client的自定义配置:./ccd/
gz:
iroute 10.1.0.0 255.255.0.0
hz:
iroute 10.3.0.0 255.255.0.0
hb:
iroute 10.2.0.0 255.255.0.0
配置文件解释:
;local a,b,c,d listen的IP
port 1194 listen的端口
proto udp 使用UDP协议
dev tun 使用tunnel的模块
ca ca.crt 公钥(s端和c端使用相同的ca)
cert server.crt server的公钥
key server.key server的私钥(要保管好)(s端和c端使用各自的cert和key)
dh dh1024.pem 产生方法:openssl dhparam -out dh1024.pem 1024
server 10.99.0.0 255.255.255.0 设置为server模式,并指定子网的IP段,server端默认会设为.1的地址。
ifconfig-pool-persist ipp.txt 当***断开或重启后,能够利用该文件从新创建相同IP地址的链接。
push “route 10.1.0.0 255.255.0.0″ 让client端创建到另外一个子网的路由。
client-to-client 让不一样的client之间能够互相“看到”。
;max-clients 100 最多的client数量。
keepalive 10 120 每10秒ping一次,若是120秒没有回应则认为对方已经down。
user nobody
group nobody 指定运行open***的用户和组。(减小危险)。
persist-key
persist-tun
status open***-status.log 每分钟记录一次链接的状态。
log open***.log 将log记录到指定文件中
verb 3 设置日志要记录的级别。
0只记录错误信息。
4能记录普通的信息。
5和6在链接出现问题时能帮助调试
9是极端的,全部信息都会显示,甚至连包头等信息都显示(像tcpdump)
mute 20 相同信息的数量,若是连续出现20条相同的信息,将不记录到日志中。
4.5.3 Open××× Client端的配置
目录名 做用
Sbin 放置open***的主程序“open***”
Conf 放置配置文件
Keys 放置认证文件
Man 放置man文档
配置文件:./conf/client.conf
广州:
Client
dev tun
proto udp
remote ×××SERVERIP11194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca /opt/open***/keys/ca.crt
cert /opt/open***/keys/gz.crt
key /opt/open***/keys/gz.key
comp-lzo
verb 3
mute 20
杭州:
client
dev tun
proto udp
remote ×××SERVERIP1 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca /opt/open***/keys/ca.crt
cert /opt/open***/keys/hz.crt
key /opt/open***/keys/hz.key
comp-lzo
verb 3
mute 20
河北:
client
dev tun
proto udp
remote ×××SERVERIP2 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca /opt/open***/keys/ca.crt
cert /opt/open***/keys/hb.crt
key /opt/open***/keys/hb.key
comp-lzo
verb 3
mute 20
4.5.4 运行Open×××
创建脚本:
Server端:
#!/bin/sh
OPEN×××=/opt/open***/sbin/open***
CFG=/opt/open***/conf/server.conf
PID=`cat /opt/open***/log/server.pid`
case “$1″ in
start)
$OPEN××× –config $CFG &
;;
stop)
kill $PID
;;
restart)
kill $PID
sleep 5
$OPEN××× –config $CFG &
;;
*)
echo “Usage: `basename $0` {start|stop|restart}”
;;
esac
Client端:
#!/bin/sh
/opt/open***/sbin/open*** –config /opt/open***/conf/client.conf &

5 其它配置
5.1 让多个client的子网间互通
●client-config-dir ccd
添加一个 ccd的文件夹,里面的文件名为client的名字(如gz,hb)。当一个新client链接到server上时,程序会检查ccd文件夹,看 是否有一个文件的名字与client的名字一致。若是有,进程会读该文件里面的指令并将这些指令应用于该名字的client。
●在ccd文件夹中建立一个文件hz,该文件中包括:
iroute 10.3.0.0 255.255.0.0 这会告诉hz client,不要在本机添加10.3.0.0网段(由于杭州原本就是10.23/16网段)。
●在server的配置文件中加入:
route 10.3.0.0 255.255.0.0
若是想两个client能够互通,请在server的配置文件中加入:
client-to-client
push “route 10.3.0.0 255.255.0.0″
记得在各子网内的机器上设置路由(若是server和client机器不是做为默认网关的话)。
5.2 控制运行中的open***进程
在配置文件中加入writepid参数指定pid文件。
SIGUSR1–以非root的身份重启open***进程。
SIGHUP–重启
SIGUSR2–输出链接统计到log文件
SIGTERM,SIGINT–exit。
5.3 windows下的配置:
windows版本的open***下载地址:
http://nchc.dl.sourceforge.net/sourceforge/open***/open***-2.0_rc17-install.exe
安装方法很简单,和其它windows下的软件无异。
我安装到c:\program file\open***下。
在config中创建配置文件win.o***
Client
dev tun
proto udp
remote ×××SERVER1 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ../keys/ca.crt
cert ../keys/win.crt
key ../keys/win.key
comp-lzo
verb 3
mute 20
从server中生成ca.crt ,win.crt,win.key文件并拷贝到windows上。生成文件的方法请参考章节5.5.1.3。
在命令行运行:
open*** –config win.o***
若是要将open***作成服务,运行:
open***sev.exe -install
这样就能够在服务中找到open***服务了。
当open***做为服务时,会到config文件夹寻找o***后缀的配置文件。生成的日志会放在log文件夹中。
6 实际应用状况
从实际应用的状况看,×××采用的加密的方式并无影响到数据传输的速度,从流量图中能够看出,流量最大能够达到14Mbits/s(电信的线路只有10Mbits/s)。
 
 
本文来自CSDN博客,转载请标明出处: http://blog.csdn.net/threewells_14/archive/2007/11/14/1885890.aspx
相关文章
相关标签/搜索