本文写于 2015年。
OpenVPN 是主流的开源 VPN 解决方案。

系统环境

CentOS版本:6.4

OpenVPN版本:2.3.4

需求说明

使用VPN,实现广域网内服务器之间的安全互访。

选择OpenVPN,因为其在可靠性方面值得信赖,在后续的使用中,证明了这一点。

配置过程

1.安装依赖包

yum install openssl-devel lzo-devel pam-devel gcc

2.下载安装包

从官网下载安装包openvpn-2.3.4.tar.gz,解压

./configure
make
make install

3.安装easy-rsa

新建/etc/openvpn目录,下载easy-rsa

wget https://github.com/OpenVPN/easy-rsa/archive/release/2.x.zip

解压上述文件,进入解压后的目录

cp -r ./easy-rsa /etc/openvpn

修改/etc/openvpn/easy-rsa/2.0/var文件

# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="xx"
export KEY_PROVINCE="xx"
export KEY_CITY="xx"
export KEY_ORG="xx"
export KEY_EMAIL="xxxx"
export KEY_OU="xx"

检查本机安装的openssl版本:

rpm -q openssl

执行结果:

openssl-1.0.1e-16.el6_5.15.x86_64

重命名预置的openssl配置文件

cp /etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/2.0/openssl.cnf

4.生成key

在/etc/openvpn/easy-rsa/2.0执行下列命令

. ./vars
./clean-all
./build-ca server
./build-key-server server #服务端密钥
./build-key xxx #xxx为客户端名称
./build-dh #Diffie Hellman参数

5.开启包转发

编辑/etc/sysctl.conf,修改

net.ipv4.ip_forward = 0为net.ipv4.ip_forward = 1

保存,运行

sysctl –p

配置生效,修改防火墙策略

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source xx.xx.xx.xx (xx.xx.xx.xx为公网IP)

6.配置文件

从源码包中获取配置文件模板

cp /root/download/openvpn-2.3.4/sample/sample-config-files/server.conf /etc/openvpn/

修改配置文件

loacl xx.xx.xx.xx
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh2048.pem
push "redirect-gateway def1 bypass-dhcp"

7.服务端启动

screen启动:

openvpn --config /etc/openvpn/server.conf

后台启动:

openvpn --config /etc/openvpn/server.conf &

8.客户端配置

安装Openvpn客户端,将服务端生成的密钥文件

ca.crt
client.crt
client.key

放在客户端安装目录的config目录

修改客户端配置文件client.ovpn

remote xx.xx.xx.xx 1194 (服务端IP)
ca ca.crt
cert client.crt
key client.key

9.启动客户端

Linux

启动方式,同服务端相同

Windows

以管理员权限启动客户端OpenVPN GUI

点击Connect

10.固定客户端IP地址

打开配置

client-config-dir ccd

在/etc/openvpn新建ccd目录

在ccd目录中新建以客户端key为名称的文件,如client(无后缀名)

文件内容ifconfig-push 10.8.0.5 10.8.0.6

openvpn只支持255.255.255.252 的子网

252子网只有三个IP,客户端,服务器,广播地址

如子网10.8.0.36 主机10.8.0.37 10.8.37 广播地址10.8.0.39
子网10.8.0.40 主机10.8.0.41 10.8.42 广播地址10.8.0.43
子网10.8.0.44 主机10.8.0.45 10.8.46 广播地址10.8.0.47
子网10.8.0.48 主机10.8.0.49 10.8.50 广播地址10.8.0.51

11.客户端证书注销

进入 /etc/openvpn/easy-rsa/2.0 目录

执行 . ./vars 命令

./revoke-full xxx ( xxx 为待注销的客户端名称)

keys 目录生成一个 crl.pem

在 服务端 server.conf 配置中,增加配置

crl-verify /etc/openvpn/easy-rsa/2.0/keys/crl.pem

重启服务端生效