搭建OpenVPN服务器(CentOS7)

OpenVPN是一个用于创建虚拟专用网络加密通道的软件包,OpenVPN允许创建的VPN使用公开密钥、电子证书、或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函数库。
目前OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Microsoft Windows以及Android和iOS上运行,并包含了许多安全性的功能。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。
OpenVPN的出现,也极大地方便了我们开发人员,在搭建OpenVPN的时候,我根据自己的实际情况,整理出相关的过程。

OpenVPN与easy-rsa的安装与配置

安装基础包

1
2
3
yum -y install openssl openssl-devel
yum -y install lzo
yum -y install openvpn easy-rsa

修改vars文件

1
2
cd /usr/share/easy-rsa/2.0/
vim vars

修改证书信息

1
2
3
4
5
6
export KEY_COUNTRY="CN"
export KEY_PROVINCE="GuangDong"
export KEY_CITY="Foshan"
export KEY_ORG="YateSun"
export KEY_EMAIL="xx@yatesun.com"
export KEY_OU="YateSun"

初始化环境变量

初始化,清除keys目录下所有与证书相关的文件,生成根证书及密钥。

1
2
3
source vars
./clean-all
./build-ca

生成服务端证书及密钥

一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次

1
./build-key-server server

生成客户端证书

每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接。为客户端生成证书和密钥。

1
./build-key client1

完美前向加密

创建迪菲·赫尔曼密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它)

1
./build-dh

生成ta.key文件

防DDos攻击、UDP淹没等恶意攻击

1
openvpn --genkey --secret keys/ta.key

至此,所有生成的证书和密钥均位于/usr/share/easy-rsa/2.0/keys

服务端配置

新建文件夹及复制配置文件

在openvpn的配置目录下新建一个keys目录,将需要用到的openvpn证书和密钥复制一份到刚创建好的keys目录中。

1
2
mkdir /etc/openvpn/keys
cp /usr/share/easy-rsa/2.0/keys/{ca.crt,server.{crt,key},dh2048.pem,ta.key} /etc/openvpn/keys/

配置文件修改

配置文件位于/etc/openvpn/server.conf
执行以下命令

1
vim /etc/openvpn/server.conf

填入如下配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
port 443
proto tcp
dev tap
ca keys/ca.crt
cert keys/server.crt
key keys/server.key # This file should be kept secret
dh keys/dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.0.0 255.255.0.0"
;push "dhcp-option DNS 208.67.222.222"
client-to-client
duplicate-cn
keepalive 10 120
tls-auth keys/ta.key 0 # This file is secret
comp-lzo
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 5

配置内核和防火墙

开启路由转发

1
2
sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf
sysctl -p

配置防火墙

1
2
3
iptables -I INPUT -p tcp --dport 443 -m comment --comment "openvpn" -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE
service iptables save

配置OpenVPN服务

1
2
service openvpn start
chkconfig openvpn on

客户端配置文件

创建客户端连接文件

1
vim client.ovpn

填入如下配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
client
dev tap
proto tcp
remote 119.29.29.29 443
resolv-retry infinite
nobind
persist-key
persist-tun
ca keys/ca.crt
cert keys/client.crt
key keys/client.key
ns-cert-type server
tls-auth keys/ta.key 1
comp-lzo
verb 5

在客户端执行以下命令:

1
openvpn client.ovpn

登录成功,OpenVPN搭建完成。