最近一直用的OpenVPN服务到期了,然后自己在VPS上面搭建了一个OpenVPN服务,发现速度还不错。看Youtube HD毫无压力。将配置记录如下。

首先需要的是制作证书。服务器端必须生成证书和密钥,而客户端可以选择使用证书或者是密码验证的方式。这里给出的配置是使用证书验证的方法。

生成证书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 这里使用easy-rsa工具来生成证书
$cp /usr/share/openvpn/easy-rsa/ ~/easy-rsa
$cd $_
 
#修改vars文件中的下面那几个变量,这些都会显示到证书里面的,建议还是修改下
# export KEY_COUNTRY="CN"
# export KEY_PROVINCE=""
# export KEY_CITY=""
# export KEY_ORG=""
# export KEY_EMAIL=""
$ vim vars
 
#初始化变量
$ source ./vars
 
#初始化
$ ./clean-all
 
#制作CA证书
#最后会在keys目录下生成 ca.crt(根证书文件) 和 ca.key(根证书私钥文件)
$ ./build-ca
 
#制作服务器端证书
#最后会在keys目录下生成 server.crt(证书文件) 和 server.key(私钥文件)、server.csr(证书请求文件)
$ ./build-key-server server
 
#制作客户端证书
#最后会生成客户端使用的证书
$ ./build-key client1
 
#如果某个客户端证书不需要用了,可以注销客户端证书
$ ./revoke-full client1
 
#创建Diffie Hellman参数
$ ./build-dh

然后将服务器的证书拷贝到/etc/openvpn下面,客户端证书拷贝到客户端配置文件同一个目录下。

OpenVPN配置

服务器端配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 服务器的端口
port 1194
 
# 使用udp还是tcp协议,选啥都一样
proto tcp
;proto udp
 
# tap和tun二选一,没有特殊需求不用变
;dev tap
dev tun
 
# 指定证书、密钥
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
 
# 服务器在vpn连接中的地址
server 10.8.0.0 255.255.255.0
 
ifconfig-pool-persist ipp.txt
 
# 转发客户端的数据
push "redirect-gateway def1 bypass-dhcp"
# 告诉客户端换成8.8.8.8的dns服务器
push "dhcp-option DNS 8.8.8.8" 
 
# 是否允许同一个证书的多个客户端登陆,注释掉的话后登陆的客户端会把前面一个挤掉
duplicate-cn
 
keepalive 10 120
 
# 使用数据压缩
comp-lzo
 
persist-key
persist-tun
status openvpn-status.log
verb 3

将该配置文件保存为/etc/openvpn/server.conf,然后再重启openvpn服务就可以了:

1
 sudo /etc/init.d/openvpn restart

 

客户端配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
client
 
;dev tap
dev tun
 
proto tcp
;proto udp
 
# 指定服务器地址
remote server.com 1194
 
resolv-retry infinite
 
nobind
 
persist-key
persist-tun
 
;mute-replay-warnings
 
# 指定客户端使用的证书和密钥
ca ca.crt
cert client1.crt
key client1.key
 
ns-cert-type server
 
comp-lzo
 
verb 3
 
;mute 20
 
redirect-gateway
route-method exe
route-delay 2
route-up "net stop dnscache"
route-up "net start dnscache"
route-up "ipconfig /flushdns"
route-up "ipconfig /registerdns"

配置数据转发

为了能够让服务器真正将数据转发出去,还需要一点点防火墙的配置:

1
2
3
# iptables -t nat -A POSTROUTING -s $LOCAL_NETWORK -o eth0 -j MASQUERADE
# cat 1 > /proc/sys/net/ipv4/ip_forward
# iptables -A INPUT -i tun0 -j ACCEPT

iptable的设置在重启以后会丢失,可以用如下命令将它们保存下来:

1
# rc.d save iptables

同时可以编辑/etc/sysctl.conf中的设置:

1
net.ipv4.ip_forward=1

这样重启以后只需要直接启动openvpn的daemon就可以了