OpenVPN安装配置
2. 安装
2.1安装前准备
系统:centos5.4
i686 i686 i386 GNU/Linux
把系统的Forward打开,可以通过如下命令实现
echo 1 > /proc/sys/net/ipv4/ip_forward
或者使用
sysctl -w net.ipv4.ip_forward=1
或者修改/etc/sysctl.conf文件,增加
net.ipv4.ip_forward = 1
首先检查系统是否安装lzo实时压缩工具
$rpm -qa | grep lzo
如果没有安装可以在http://www.oberhumer.com/opensource/lzo/找到并安装,安装方法详见压缩包中的 INSTALL文件,当然也可以用rpm包安装,记住一定要安装lzo-devel开头的那个包,因为OpenVPN需要使用lzo的头文件。
2.2获取软件
Wget http://down1.chinaunix.net/distfiles/openvpn-2.0.7.tar.gz
Wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
2.3安装
tar -xzvf lzo-2.03tar.gz
cd lzo-2.03
./configure
make
make install
安装openvpn
$tar -zxvf openvpn-2.07tar.gz
$cd openvpn-2.07
#./configure --with-lzo-lib=/usr/local/lib --with-lzo-headers=/usr/local/include
3.
配置
3.1创建证书配置文件
拷贝源码文件到/etc下(当然也可以生成完密钥后将kes拷过来也可)
Cd / openvpn-2.07
cp -ar easy-rsa/etc/openvpn
编辑vars文件
找到如下内容
# 定义你所在的国家,2个字符
export KEY_COUNTRY=CN
# 你所在的省份
export KEY_PROVINCE=bj
# 你所在的城市
export KEY_CITY=bj
# 你所在的组织
export KEY_ORG="OpenVPN ORG"
# 你的单位
export KEY_OU="OpenVPN"
# 你的邮件地址
export KEY_EMAIL="[email protected]"
-------------CUT Here-----------------
修改后保存,下面我们开始什成keys,以下为shell命令 "#" 为提示符
然后执行
. ./vars (注意. .之间有空格)
NOTE:when you run ./clean-all, I will be doing a rm -rf on/etc/openvpn/easy-rsa/keys(此为正确输出信息)
#./clean-all#初始化keys目录,创建所需要的文件和目录
#./build-ca#生成root CA证书。用于签发server和client证书
密匙跟openssl紧密结合.
如果没有修改的地方一路回车即可
# ls keys
ca.crt ca.key index.txt serial
我们可以看到ca.crt ca.key文件已经什成了。
下面我们为服务器生成 Diffie-Hellman 文件
# ./build-dh #TLS server 需要使用的一个文件
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
..+..............................................................+....................................................................+....+........+.........+....................................................+.+..................................................................................................................................................................+.......................................+.................................+.............+.................................................................................+.......................................................+.............................++*++*++*
创建并签发VPN Server使用的CA
3.2建立服务器的认证书和密匙
# ./build-key-server server # server
为创建后的文件名,分别为server.crtserver.key
Generating a 1024 bit RSA private key
输出我就不写了,其中有两个选择的地方,都选择y即可,如果报错comaname的错误时是你的输入的名字错误,或是重名了。修改文件名即可。
3.3建立客户端证书
如果以后要为其他Client颁发证书,直接使用build-key命令签发新证书。
# ./build-key client1
Generating a 1024 bit RSA private key
........++++++
....................++++++
writing new private key to ‘elm.key‘
-----
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(略)
Name(eg, your name or your server‘s hostname) []:client1#注意Common Name最好不要相同,如果相同[server要加duplicate-cn选项,那么Email地址也不能相同
Email Address [[email protected]]:
……………….
…………………(略,回车即可)
hecertificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
说明创建成功
为防止恶意攻击(如DOS、UDP port flooding),我们生成一个"HMAC firewall"
#openvpn --genkey --secret keys/ta.key (keys/ta.key是创建的目录和文件名)
生成证书吊销链文件,防止日后有人丢失证书,被非法用户接入VPN
#./make-crl vpncrl.pem
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
到现在为止,一切准备就绪,下面开始写配置文件,为了缩小篇幅,把原有注释都去掉了。
3.4置服务端:
创建server.conf
可以直接将源码下的server.conf拷贝过来修改即可
如:
cp/opt/openvpn/openvpn-2.0.7/sample-config-files/server.conf
/etc/openvpn/
编辑server.conf文件
;locala.b.c.d ##申明本机使用的IP地址,也可以不说明
port1194 ##申明使用的端口,默认1194
;prototcp ##申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议
protoudp
devtap ##申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备
;devtun
;dev-nodeMyTap
##OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法
ca
/etc/openvpn/easy-rsa/keys/ca.crt
#Server使用的证书文件
cert/etc/openvpneasy-rsa/keys/server.crt
#Server使用的证书对应的key,注意文件的权限,防止被盗
key/etc/openvpn/ easy-rsa/keys/server.key
#This file should be kept secret
#CRL文件的申明,被吊销的证书链,这些证书将无法登录
crl-verify vpncrl.pem
#上面提到的生成的Diffie-Hellman文件
dh/etc/openvpn /easy-rsa/keys/dh1024.pem
#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,
;server10.8.0.0 255.255.255.0
server192.168.98.0 255.255.255.0
#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址
ifconfig-pool-persistipp.txt
#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用
;server-bridge10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用(这一点很重要,这样其他服务器添加一下路由就可以登陆了,否则无效,这个最好和你的内网断一至,否则也不生效)
;push"route 192.168.10.0 255.255.255.0"
;push"route 192.168.20.0 255.255.255.0"
push"route 192.168.99.0 255.255.255.0"
;client-config-dirccd
;route192.168.40.128 255.255.255.248
route192.168.99.0 255.255.255.0
;client-config-dirccd
;route10.9.0.0 255.255.255.252
;learn-address./script
;push"redirect-gateway"
#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,
;push"dhcp-option DNS 10.8.0.1"
;push"dhcp-option WINS 10.8.0.1"
#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率
client-to-client
;duplicate-cn
#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效,
#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,
#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,
#认为连接丢失,并重新启动VPN,重新连接
#(对于mode server模式下的openvpn不会重新连接)。
keepalive10 120
#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用1
;tls-authta.key 0 # This file is secret
#对数据进行压缩,注意Server和Client一致
comp-lzo
#定义最大连接数
max-clients100
#定义运行openvpn的用户
usernobody
groupnobody
#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-key
#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,
#否则网络连接会先linkdown然后linkup
persist-tun
#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作
statusopenvpn-status.log
#记录日志,每次重新启动openvpn后删除原有的log信息
log
openvpn.log
;log-append
openvpn.log
#相当于debug level,具体查看manual
verb3
;mute20
创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn
然后运行:
#chkconfig --add openvpn
#chkconfig openvpn on
立即启动openenvpn
#/etc/init.d/openvpn start
(如果没有openvpn启动程序的话,将源码的拷过来,如:cp/opt/openvpn/openvpn-2.0.7/sample-scripts/openvpn.init /etc/init.d/openvpn)
3.5置client端
client
#dev tun
dev tap
proto udp
#proto tcp
remote ip(你的vpn的公网ip,就是用来连接服务端的ip) 1194 (服务端是什么端口这里就是什么端口)
remote-random
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
#tls-auth ta.key 1
comp-lzo
verb 3
# Silence repeating messages
;mute 20
keepalive 5 10
3.6启动服务
/etc/init.d/openvpn start
cd /etc/openvpn/easy-rsa/
openvpn--daemon --config
server.conf #有没有错误输出
openvpn --daemon --config
server.conf &#没有的话后端运行(这项是必须的否则客户端将报告连不上服务器的错误)
netstat-antlp | grep 1194 #(查看端口,如果有的话说明openvpn启动,如果没有继续查配置文件)
4.
其他服务器设置
4.1添加路由
在其他服务器上添加路由,这一项很重要,否则openvpn不能直接访问。
route add -net192.168.98.0 gw
192.168.99.209 netmask255.255.255.0 dev eth1(gw 后面的ip为你自己内网eth1设置的ip)
5.
安装windows客户端
5.1获取软件
软件下载地址:
http://swupdate.openvpn.net/community/releases/openvpn-2.2-beta3-install.exe
至于安装过程那就简单了不在叙述
5.2获取服务器生成的证书
将服务器端生成client crt 和key 还有ca。crt 下载到本地
放到openvpn的安装目录的config文件
如我安装的路径为C:\Program Files\OpenVPN\config (就把这些东西放到里边即可)
5.3 修改客户端配置文件
这里边在我配置客户端文件时已经列出了客户端的配置文件,不在描述
6
验收
6.1打开防火墙
关闭linux 服务器上的防火墙或在防火墙上打开1194端口
如:
Iptables - A INPUT -p tcp –dport 1194 -j ACCEPT
6.2 链接测试
当你的客户端安装完成后,会产生两个两个电脑的图标,一个是网卡和一个是连接终端。如图:
右键点击红色的connect 连接,如果没问题的话就可以连接了,成功后会是绿色的图标。
补充:至于linux下的客户端的配置和window下基本一样,但想连接服务器时直接运行
openvpn --daemon --config client.conf & 即可。(这个也需要安装openvpn)
7常见问题解答
1.
BIO read tls_read_plaintext error: error:14090086:SSLroutines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
认证问题key的钥匙是否正确
2.
Nov04 16:10:05 2010 C:\WINDOWS\system32\route.exe DELETE 192.168.99.0 MASK255.255.255.0 192.168.98.1
ThuNov 04 16:10:05 2010 Warning: route gateway is not reachable on any activenetwork adapters: 192.168.98.1
ThuNov 04 16:10:05 2010 Route deletion via IPAPI failed [adaptive]
ThuNov 04 16:10:05 2010 Route deletion fallback to route.exe
Theroute specified was not found.
ThuNov 04 16:10:05 2010 Closing TUN/TAP interface
ThuNov 04 16:10:05 2010 SIGTERM[soft,tun-stop] received, process exiting
这是windos 没有tap的网卡 需要安装客户端工具自己生成一个网卡
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。