使用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
相關文章
相關標籤/搜索