使用OpenVPN实现网通电信机房间快速安全通信Word格式.docx
《使用OpenVPN实现网通电信机房间快速安全通信Word格式.docx》由会员分享,可在线阅读,更多相关《使用OpenVPN实现网通电信机房间快速安全通信Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
5.3windows下的配置:
6实际应用情况
7参考文档
假设现在的某公司的服务器存放在广州、河北、杭州三个机房中,每个机房使用不用的子网:
机房子网(内部)
广州10.1.0.0/16
河北10.2.0.0/16
杭州10.3.0.0/16
各机房使用不同的网段,为使用vpn连接创造了有利条件。
由于电信至网通间的网络速度是否缓慢,对广州与河北机房间的数据同步带来非常大的困难。
我们找到一台即连接了网通的线路,又连接了电信线路的服务器,但却不能直接用其作为路由。
如果使用porxy的方式或转发的方式又会降低同步的效率。
采用C/S结构的vpn方式,即解决了同步的问题,又不会影响同步的效率。
下图是三个机房实现互连互通后的拓扑图:
从上图可以看到,该VPN系统是一个C/S的结构。
中间为VPNSERVER;
广州、河北、杭州三个机房各取出一台服务器作为VPNCLIENT。
VPNSERVER拥有两块网卡和两条线路(电信和网通),两个网卡均需要设置公网IP。
根据实际的情况设置路由,这里我是设置电信的线路为默认路由,设置到河北机房网段的走网通的路由。
VPNCLIENT可以有两块网卡也可以只用一块网卡,如果是电信的线路则连接vpnserver的电信的IP;
如果是网通的线路则连接网通的vpnserver的网通方面的IP。
在本文中我们使用了4台服务器分别作为vpnserver和client。
由于使用vpn传输数据对服务器的负载不大,所以除了vpnserver需要一台新的服务器外,各机房的client服务器只需要找一台负载轻的服务器来担当即可。
本文使用的四台服务器的详细信息:
机房Vpn模式操作系统服务器IP
VpnserverRedHat9.0公网IP1(网通)/公网IP2(电信)
广州机房VpnclientFreeBSD4.910.1.0.1
河北机房VpnclientRedHat9.010.2.0.1
杭州机房VpnclientFreeBsd4.910.3.0.1
除vpnserver外,其它的机房中的vpnclient均无需公网IP,所以vpnserver需要加强安全方面的设置。
该服务器是RedHat9.0的操作系统,登陆界面使用的是grub,并设置的grub密码,保证物理上的安全。
使用Iptables设置包过滤防火墙,只允许你的服务器对其进行访问:
iptables–F
iptables-AINPUT-s10.0.0.0/8-jACCEPT
iptables-AINPUT-sYOURNETWORK-jACCEPT
iptables-AINPUT-pudp--dport1194–jDROP
OpenVPN是一个强大、高度可配置、基于ssl的VPN(VirtualPrivateNetwork)OpenSource软件。
它具有多种的验证方式以及许多强大的功能。
OpenVPN工作在OSI模型的第2或第3层,使用SSL/TLS协议进行网络传输。
支持多种客户认证方法,如证书、smartcards,加上用户名密码的证书认证等。
除此以外,还有强大的ACL功能限制客户的信息交换。
OpenVPN可以运行在多种操作系统中,包括:
Linux,Windows2000/XPandhigher,OpenBSD,FreeBSD,NetBSD,MacOSX,andSolaris.
使用OpenVpn,可以实现:
●使用特定udp或tcp端口实现两台主机的之间的vpn连接。
●实现C/S结构,实现多台client通过server服务器互连互通。
●通过TLS/SSL加密保证数据传输的安全。
●通过数据的压缩,提高数据传输的速度。
(由于其它功能在本文中并不需要使用,如想要详细了解请访问)
从以下网址下载最新版本的openvpnsource包。
由于openvpn需要使用数据压缩,所以还需要安装lzo包:
Linux:
软件编译安装
Lzo./configure&
&
Make&
makeinstall
Openvpn./configure-prefix=/opt/openvpn&
Make&
makeinstall
FreeBSD:
Openvpn./configure-prefix=/opt/openvpn--with-lzo-headers=/usr/local/include--with-lzo-headers=/usr/local/include&
参照上面的安装方法分别在linux和freebsd主机上安装好openvpn。
从我安装过的操作系统看,RedHat9.0和FreeBSD4.9的内核默认已经支持TUN,并且已经安装tun模块。
RedHatAS3则没有该模块,需要重新编译内核支持。
加载tun模块:
●Linux2.4orhigher(withintegratedTUN/TAPdriver):
(1)makedevicenode:
mknod/dev/net/tunc10200
(2a)addto/etc/modules.conf:
aliaschar-major-10-200tun
(2b)loaddriver:
modprobetun
(3)enablerouting:
echo1>
;
/proc/sys/net/ipv4/ip_forward
●FreeBSD4.1.1+:
kldloadif_tap
Cacertificate
authority(认证授权),所有的server和client均使用同一个ca文件。
certcertificate(证书)。
公钥,每一个server和client各自独立生成的公钥。
key私钥,每一个server和client工作独立生成的私钥。
◎server端只需要知道它自己的cert和key。
它不需要知道每一个可以连接到它的client的cert。
◎server端接受的client必须拥有以server的CA产生的cert。
server能使用它自己的CA私钥来确认client的cert中是否带有其CA的记号。
#######
InthissectionwewillgenerateamasterCAcertificate/key,aservercertificate/key,andcertificates/keysfor3separateclients
在本节,我们会尝试建立一对masterCA的cert和key,一对server端的cert和key,和3个不同client的年的cert和keys。
UNIX:
在openvpn的源码中可以找到easy-rsa文件夹。
cdeasy-rsa
../vars建立环境变量
./clean-all清除以前的
./build-ca建立CA
最后一个命令会调用openssl来创建CA的公钥和私钥:
CountryName(2lettercode)[KG]:
StateorProvinceName(fullname)[NA]:
LocalityName(eg,city)[BISHKEK]:
OrganizationName(eg,company)[OpenVPN-TEST]:
yourcorp在此输入公司名
OrganizationalUnitName(eg,section)[]:
CommonName(eg,yournameoryourserver'
shostname)[]:
hbroute在此输入主机名或随便输一个名字
EmailAddress[******************]:
其它的按默认即可。
完成后会在keys目录中创建ca.crtca.keyindex.txtserial四个文件。
./build-key-serverserver
yourcorp输入公司名
hbrouteserver输入主机名或随便一个名字
Pleaseenterthefollowing'
extra'
attributes
tobesentwithyourcertificaterequest
Achallengepassword[]:
Anoptionalcompanyname[]:
Signthecertificate?
[y/n]:
y输入y
1outof1certificaterequestscertified,commit?
[y/n]y输入y
Writeoutdatabasewith1newentries
DataBaseUpdated
其它的按回车。
与创建server端的非常相似.
./build-keygz
./build-keyhb
./build-keyhz
注意gz、hb和hz不能一样,否则两个相同名字的client只能有一个能连接进来。
如果想使用带密码的clientkey,可以使用build-key-pass脚本。
如建立广州的:
mycorp
gz键入"
gz"
CertificateistobecertifieduntilMar1408:
15:
162015GMT(3650days)
y键入“y”
[y/n]y键入“y”
DiffieHellman参数必须要在openvpnserver中使用。
./build-dh
FilenameNeededByPurposeSecret
ca.crtserver+allclientsRootCAcertificateNO
ca.keykeysigningmachineonlyRootCAkeyYES
Dh{n}.pemserveronlyDiffieHellmanparametersNO
server.crtserveronlyServerCertificateNO
server.keyserveronlyServerKeyYES
gz.crt广州onlygzCertificateNO
Gz.key广州onlygzKeyYES
hcrt河北onlyhbCertificateNO
hb.key河北onlyhbKeyYES
hz.crt杭州onlyhzCertificateNO
hz.key杭州onlyhzKeyYES
根据上表,将所有的文件拷贝到需要这些文件的主机上。
刚安装完openvpn的时候,/opt/openvpn目录下只有sbin和man两个文件夹,为方便起见,我们可以在该目录下建立其它的文件夹。
目录名作用
Sbin放置openvpn的主程序“openvpn”
Conf放置配置文件
Ccd放置各client的独立配置文件
Log放置server的日志文件
Keys放置认证文件
Man放置man文档
配置文件:
./conf/server.conf
port1194
protoudp
devtun
ca/opt/openvpn/keys/ca.crt
cert/opt/openvpn/keys/server.crt
key/opt/openvpn/keys/server.key
dh/opt/openvpn/keys/dh1024.pem
server10.99.0.0255.255.255.0
ifconfig-pool-persist/opt/openvpn/log/ipp.txt
client-config-dirccd
route10.1.0.0255.255.0.0
route10.2.0.0255.255.0.0
route10.3.0255.255.0.0
push"
route10.10.0255.255.0.0"
route10.2.0.0255.255.0.0"
route10.3.0.0255.255.0.0"
client-to-client
keepalive10120
comp-lzo
usernobody
groupnobody
persist-key
persist-tun
status/opt/openvpn/log/openvpn-status.log
log/opt/openvpn/log/openvpn.log
verb6
mute20
writepid/opt/openvpn/log/server.pid
Client的自定义配置:
./ccd/
gz:
iroute10.1.0.0255.255.0.0
hz:
iroute10.3.0.0255.255.0.0
hb:
iroute10.2.0.0255.255.0.0
配置文件解释:
locala,b,c,dlisten的IP
port1194listen的端口
protoudp使用UDP协议
devtun使用tunnel的模块
caca.crt公钥(s端和c端使用相同的ca)
certserver.crtserver的公钥
keyserver.keyserver的私钥(要保管好)(s端和c端使用各自的cert和key)
dhdh1024.pem产生方法:
openssldhparam-outdh1024.pem1024
server10.99.0.0255.255.255.0设置为server模式,并指定子网的IP段,server端默认会设为.1的地址。
ifconfig-pool-persistipp.txt当vpn断开或重启后,可以利用该文件重新建立相同IP地址的连接。
route10.1.0.0255.255.0.0"
让client端建立到另一个子网的路由。
client-to-client让不同的client之间可以互相“看到”。
max-clients100最多的client数量。
keepalive10120每10秒ping一次,如果120秒没有回应则认为对方已经down。
groupnobody指定运行openvpn的用户和组。
(减少危险)。
statusopenvpn-status.log每分钟记录一次连接的状态。
logopenvpn.log将log记录到指定文件中
verb3设置日志要记录的级别。
0只记录错误信息。
4能记录普通的信息。
5和6在连接出现问题时能帮助调试
9是极端的,所有信息都会显示,甚至连包头等信息都显示(像tcpdump)
mute20相同信息的数量,如果连续出现20条相同的信息,将不记录到日志中。
./conf/client.conf
广州:
Client
remoteVPNSERVERIP11194
resolv-retryinfinite
nobind
cert/opt/openvpn/keys/gz.crt
key/opt/openvpn/keys/gz.key
verb3
杭州:
client
remoteVPNSERVERIP11194
cert/opt/openvpn/keys/hz.crt
key/opt/openvpn/keys/hz.key
河北:
remoteVPNSERVERIP21194
cert/opt/openvpn/keys/hb.crt
key/opt/openvpn/keys/hb.key
建立脚本:
Server端:
#!
/bin/sh
OPENVPN=/opt/openvpn/sbin/openvpn
CFG=/opt/openvpn/conf/server.conf
PID=`cat/opt/openvpn/log/server.pid`
case"
$1"
in
start)
$OPENVPN--config$CFG&
stop)
kill$PID
restart)
sleep5
*)
echo"
Usage:
`basename$0`{start|stop|restart}"
esac
Client端:
/opt/openvpn/sbin/openvpn--config/opt/openvpn/conf/client.conf&
●client-config-dirccd
添加一个ccd的文件夹,里面的文件名为client的名字(如gz,hb)