最近一直用的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就可以了






近期评论