> Linux服务器 > VPN >

阿里云CentOS服务器上搭建openvpn

    为了能从办公室直接连进ECS(阿里云服务器)进行调试,所以这几天断断续续是研究开源翻墙软件pptp和openvpn,直到今天才成功.(这里很鄙视阿里云的客服和售后工程师,一会说能搭建vpn,一会说又不能,我就*了;同时也很鄙视阿里的路由表,弄的我蛋都碎光了)

    吐槽到此为止,接下来进入我们今天的正题:openvpn。

一)初识

    OpenVPN 是一个基于 OpenSSL 库的应用层 VPN 实现。和传统 VPN 相比,它的优点是简单易用。

    OpenVPN允许参与建立VPN的单点使用共享金钥,电子证书,或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库中的SSLv3/TLSv1 协议函式库。OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Windows 2000/XP/Vista上运行,并包含了许多安全性的功能。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。

二)环境    

    vpn:CentOS release 6.5 (Final) 

    客户端:win8(其他客户端安装方法,请见博文最后)

三)安装

  1. 安装基础包

 
    yum install openssl-devel pam-devel gcc -y
    wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz
 
    tar xvfz openssl-1.0.1g.tar.gz 
 
    cd openssl-1.0.1g
 
    ./config --prefix=/usr/local
 
    make && make installs
    
    wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
 
    tar zxvf lzo-2.06.tar.gz
 
    cd lzo-2.06
 
    ./configure --prefix=/usr/local
 
    make && make install

2.安装openvpn服务端

针对CentOS 5

 
rpm -ivh http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

针对CentOS 6

 
rpm -ivh http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

安装完rpmforge的repo之后,执行yum命令安装OpenVPN

 
yum install -y openvpn

 

3.生成证书

使用easy-rsa脚本产生OpenVPN所需的CA证书、CA私钥、服务端证书、服务端私钥、客户端证书、客户端私钥
先将easy-rsa脚本copy到/etc/openvpn,并添加可执行权限

cp -R /usr/share/doc/openvpn-*/easy-rsa /etc/openvpn
cd /etc/openvpn/easy-rsa/2.0
chmod +x  *

配置PKI

/etc/openvpn/easy-rsa/2.0
vi /etc/openvpn/easy-rsa/2.0/vars

找到“export KEY_SIZE=”这行,根据情况把1024改成2048或者4096

再定位到最后面,会看到类似下面这样的

export KEY_COUNTRY=”US”
export KEY_PROVINCE=”CA”
export KEY_CITY=”SanFrancisco”
export KEY_ORG=”Fort-Funston”
export KEY_EMAIL=”me@myhost.mydomain“

这个自己根据情况改一下,不改也可以运行。其实不改vars这个文件,vpn也可以跑起来。

例如:

export KEY_COUNTRY=”CN”
export KEY_PROVINCE=”SH”
export KEY_CITY=”Shanghai”
export KEY_ORG=”ucloud.cn”
export KEY_EMAIL=”xxx@xxx.cn“

注:在后面生成服务端ca证书时,这里的配置会作为缺省配置。

然后使用easy-rsa的脚本产生证书

ln -s openssl-1.0.0.cnf openssl.cnf
. vars
./clean-all
./build-ca server
./build-key-server server
./build-key client
./build-dh

4.配置服务端

 
vim /etc/openvpn/server.conf
local  
 
# 设置监听端口,必须要对应的在防火墙里面打开
port 1194
 
# 设置用TCP还是UDP协议?
;proto tcp
proto tcp
 
# 设置创建tun的路由IP通道,还是创建tap的以太网通道路由IP容易控制,所以推荐使用它;
# 但如果如IPX等必须使用第二层才能通过的通讯,则可以用tap方式,tap也就是以太网桥接
;dev tap
dev tun
 
# 这里是重点,必须指定SSL/TLS root certificate (ca),
# certificate(cert), and private key (key)
# ca文件是服务端和客户端都必须使用的,但不需要ca.key
# 服务端和客户端指定各自的.crt和.key
# 请注意路径,可以使用以配置文件开始为根的相对路径,
# 也可以使用绝对路径
# 请小心存放.key密钥文件
 
 
# 指定Diffie hellman parameters.
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
 
# 配置VPN使用的网段,OpenVPN会自动提供基于该网段的DHCP服务,但不能和任何一方的局域网段重复,保证唯一
 
 
# 维持一个客户端和virtual IP的对应表,以方便客户端重新连接可以获得同样的IP
#ifconfig-pool-persist ipp.txt
 
# 为客户端创建对应的路由,以另其通达公司网内部服务器
# 但记住,公司网内部服务器也需要有可用路由返回到客户端
;push "route 192.168.20.0 255.255.255.0"
#push "route 10.6.0.0 255.255.0.0"
 
# 若客户端希望所有的流量都通过VPN传输,则可以使用该语句
# 其会自动改变客户端的网关为VPN服务器,推荐关闭
# 一旦设置,请小心服务端的DHCP设置问题
 
 
# 用OpenVPN的DHCP功能为客户端提供指定的DNS、WINS等
push "dhcp-option DNS   8.8.8.8"
#push "dhcp-option WINS 10.8.0.1"
 
# 默认客户端之间是不能直接通讯的,除非把下面的语句注释掉
 
 
# 下面是一些对安全性增强的措施
# For extra security beyond that provided by SSL/TLS, create an "HMAC firewall"
# to help block DoS attacks and UDP port flooding.
#
# Generate with:
# openvpn --genkey --secret ta.key
#
# The server and each client must have a copy of this key.
# The second parameter should be 0 on the server and 1 on the clients.
tls-auth ta.key 0 # This file is secret
 
# 使用lzo压缩的通讯,服务端和客户端都必须配置
 
 
# 输出短日志,每分钟刷新一次,以显示当前的客户端
status /var/log/openvpn/openvpn-status.log
 
# 缺省日志会记录在系统日志中,但也可以导向到其他地方
# 建议调试的使用先不要设置,调试完成后再定义
log         /var/log/openvpn.log
#log-append  /var/log/openvpn/openvpn.log
 
 
# 设置日志的级别
#
# 0 is silent, except for fatal errors
# 4 is reasonable for general usage
# 5 and 6 can help to debug connection problems
# 9 is extremely verbose

5.打开服务器路由转发功能

 
vim /etc/sysctl.conf

修改以下内容

net.ipv4.ip_forward = 1 
# 然后使内核参数生效: 

 
sysctl -p
路由转发
#iptables-t nat -A POSTROUTING -s 172.1.1.0/24 -o eth1 -j MASQUERADE  
#添加NAT  172.1.1.0/24是OPENVPN的地址 10.161.xxx.xxx是阿里ECS的内网地址(ifconfig eth0)
 
iptables -tnat -A POSTROUTING -s 172.1.1.0/24 -j SNAT --to-source 10.161.XXX.XXX 
 
#保存iptables
 
service iptables save

启动openvpn

 
chkconfig openvpn on
/etc/init.d/openvpn start

四)openvpn客户端配置

对于windows客户端

    客户端安装完成后,进入到安装目录,如D:\Program Files\OpenVPN。将Linux服务端使用easy-rsa产生的客户端证书、私钥和ca证书下载到本地。即需要下载到本地的文件如下:

/etc/openvpn/easy-rsa/2.0/keys/ca.crt       #ca证书
/etc/openvpn/easy-rsa/2.0/keys/client.crt   #客户端证书
/etc/openvpn/easy-rsa/2.0/keys/client.key   #客户端私钥

    将这些文件下载到..\.\OpenVPN\config下。
编辑客户端OpenVPN配置文件client.ovpn,内容如下:

client
dev tun
proto tcp
remote 115.29.xxx.xxx 1194  #阿里云的vpn外网ip和端口
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt        #一系列证书位置
cert client.crt
key client.key
comp-lzo
verb 3
ns-cert-type server
ip-win32 dynamic 0 28800  #windows
route-method exe
route-delay 3

 

 

    到这里算是大工完成了,主要是iptables和路由表会比较蛋疼,测试和排错的过程就不展示了。

 

    下面给几个其他客服端的配置:

ubuntu:http://www.linuxidc.com/Linux/2013-06/86562.htm

Mac:

https://code.google.com/p/tunnelblick/

1.打开Tunnelblick

2.点击左下角+

3.我有设置文件

4.OpenVPN设置

5.打开私人设置文件夹

6.将key和新建的client.ovpn放到此目录下

 

本文出自 “Aaron” 博客,请务必保留此出处http://qishiding.blog.51cto.com/3381613/1613141

(责任编辑:IT)