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 | yum -y install openssl openssl-devel |
修改vars文件
1 | cd /usr/share/easy-rsa/2.0/ |
修改证书信息
1 | export KEY_COUNTRY="CN" |
初始化环境变量
初始化,清除keys目录下所有与证书相关的文件,生成根证书及密钥。1
2
3source 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
2mkdir /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
21port 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 | sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf |
配置防火墙
1 | iptables -I INPUT -p tcp --dport 443 -m comment --comment "openvpn" -j ACCEPT |
配置OpenVPN服务
1 | service openvpn start |
客户端配置文件
创建客户端连接文件1
vim client.ovpn
填入如下配置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15client
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搭建完成。