当前位置: > Linux服务器 > VPN >

openvpn2.3.4服务器部署

时间:2016-05-26 02:04来源:linux.it.net.cn 作者:IT

一、openvpn与pptp的抉择

 

PPTP

    点对点隧道协议(pptp)是一种实现虚拟专用网络的方法。pptp使用用于封装ppp数据包的tcp及GRE隧道控制通道。

OpenVPN

    OpenVPN是一免费开源软件,以路由器或桥接配置和远程访问设备方式实现虚拟专用网络(vpn)创建安全的点 对点或站对站连接的解决方案。它使用SSL / TLS安全加密,具有穿越网络地址转换(NATs)和防火墙的功能。

PPTP与OpenVPN之比较和抉择?

    在pptp和openvpn二者之间做出选择的一个重要考虑因素,也是我们无法控制的因素,就是有时互联网服务供应商会阻止 PPTP连接。次情况下我们无计可施,只能选择使用openvpn。 pptp具有一些独 特优势,但此刻用openvpn会是不错的选择。

二、部署openvpn

    本次部署openvpn服务器,因为使用了最新的openvpn2.3.4,而这个包里面没有包含最重要的证书制作部分:easy-rsa

    openvpn官网也给出明确说明:Starting with openvpn-2.3_alpha2 easy-rsa is no longer part of the OpenVPN source or binary packages

    所以,我们需要事先下载好easyrsa,可以到GitHub上进行下载,配置过程将在下面第3步进行,本次部署使用了easy-rsa3,与easy-rsa2.0的操作完全不同,网上其它关于easy-rsa2.0的教程不适合本次部署

    在部署openvpn之前,最好用ntpdate同步一下服务器的时间,否则生成证书的时间也不准确,会造成那个什么centificate error等的错误!

1、安装lzo

    lzo是致力于解压速度的一种数据压缩算法

[root@vpn ~]# tar xf lzo-2.08.tar.gz 
[root@vpn ~]# cd lzo-2.08 
[root@vpn lzo-2.08]# ./configure && make && make install 

2、安装openvpn

[root@vpn ~]# tar xf openvpn-2.3.4.tar.gz 
[root@vpn ~]# cd openvpn-2.3.4 
[root@vpn openvpn-2.3.4]# ./configure --with-lzo-headers=/usr/local/include/ --with-lzo-lib=/usr/local/lib 
[root@vpn openvpn-2.3.4]# make && make install 
[root@vpn openvpn-2.3.4]#  
[root@vpn openvpn-2.3.4]# which openvpn 
/usr/local/sbin/openvpn      #看到这里,说明安装openvpn成功 

3、配置easyrsa服务端

    openvpn-2.3.4软件包不包含证书(ca证书,服务端证书,客户端证书)制作工具,所以还需要单独下载easy-rsa,最新的为easy-rsa3

    Starting with openvpn-2.3_alpha2 easy-rsa is no longer part of the OpenVPN source or binary packages(来源openvpn官网)

10 
11 
12 
[root@vpn ~]# unzip easy-rsa-master.zip  
[root@vpn ~]# mv easy-rsa-master easy-rsa 
[root@vpn ~]# cp -R easy-rsa/ openvpn-2.3.4/ 
[root@vpn ~]# cd openvpn-2.3.4/easy-rsa/easyrsa3/ 
[root@vpn easyrsa3]# cp vars.example vars 
[root@vpn easyrsa3]# vim vars 
set_var EASYRSA_REQ_COUNTRY "CN" 
set_var EASYRSA_REQ_PROVINCE "Beijing" 
set_var EASYRSA_REQ_CITY "Beijing" 
set_var EASYRSA_REQ_ORG "nmshuishui Certificate" 
set_var EASYRSA_REQ_EMAIL "353025240@qq.com" 
set_var EASYRSA_REQ_OU "My OpenVPN" 

4、创建服务端证书及key

(1)初始化

[root@vpn easyrsa3]# ls 
easyrsa  openssl-1.0.cnf  vars  vars.example  x509-types 
[root@vpn easyrsa3]#  
[root@vpn easyrsa3]# ./easyrsa init-pki 
  
Note: using Easy-RSA configuration from: ./vars 
  
init-pki complete; you may now create a CA or requests. 
Your newly created PKI dir is: /root/openvpn-2.3.4/easy-rsa/easyrsa3/pki 

(2)创建根证书

10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
[root@vpn easyrsa3]# ./easyrsa build-ca 
  
Note: using Easy-RSA configuration from: ./vars 
Generating a 2048 bit RSA private key 
.............................................+++ 
........+++ 
writing new private key to '/root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/private/ca.key' 
Enter PEM pass phrase:                      #输入密码,此密码用途证书签名 
Verifying - Enter PEM pass phrase:          #确认密码 
----- 
You are about to be asked to enter information that will be incorporated 
into your certificate request. 
What you are about to enter is what is called a Distinguished Name or a DN. 
There are quite a few fields but you can leave some blank 
For some fields there will be a default value, 
If you enter '.', the field will be left blank. 
----- 
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:nmshuishui  #输入一个Common Name 
  
CA creation complete and you may now import and sign cert requests. 
Your new CA certificate file for publishing is at: 
/root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/ca.crt 

(3)创建服务器端证书

10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
[root@vpn easyrsa3]# ./easyrsa gen-req server nopass 
  
Note: using Easy-RSA configuration from: ./vars 
Generating a 2048 bit RSA private key 
................................+++ 
......+++ 
writing new private key to '/root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/private/server.key' 
----- 
You are about to be asked to enter information that will be incorporated 
into your certificate request. 
What you are about to enter is what is called a Distinguished Name or a DN. 
There are quite a few fields but you can leave some blank 
For some fields there will be a default value, 
If you enter '.', the field will be left blank. 
----- 
Common Name (eg: your user, host, or server name) [server]:nmshuishui-BJ  #该Common Name一定不要与创建根证书时的 
                                                                          #Common Name一样,这是血与泪的教训   
Keypair and certificate request completed. Your files are: 
req: /root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/reqs/server.req 
key: /root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/private/server.key 

(4)签约服务器端证书

10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
[root@vpn easyrsa3]# ./easyrsa sign server server 
  
Note: using Easy-RSA configuration from: ./vars 
  
  
You are about to sign the following certificate. 
Please check over the details shown below for accuracy. Note that this request 
has not been cryptographically verified. Please be sure it came from a trusted 
source or that you have verified the request checksum with the sender. 
  
Request subject, to be signed as a server certificate for 3650 days: 
  
subject= 
    commonName                = nmshuishui 
  
  
Type the word 'yes' to continue, or any other input to abort. 
  Confirm request details: yes        #输入yes继续 
Using configuration from /root/openvpn-2.3.4/easy-rsa/easyrsa3/openssl-1.0.cnf 
Enter pass phrase for /root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/private/ca.key:    #输入刚才创建根证书时的密码 
Check that the request matches the signature 
Signature ok 
The Subject's Distinguished Name is as follows 
commonName            :PRINTABLE:'nmshuishui' 
Certificate is to be certified until Aug 21 14:18:49 2024 GMT (3650 days) 
  
Write out database with 1 new entries 
Data Base Updated 
  
Certificate created at: /root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/issued/server.crt 

(5)创建Diffie-Hellman,确保key穿越不安全网络的命令:

[root@vpn easyrsa3]# ./easyrsa gen-dh 
  
Note: using Easy-RSA configuration from: ./vars 
Generating DH parameters, 2048 bit long safe prime, generator 2 
This is going to take a long time 
...................................................................................................................................................................................................................+..........................................................................................................................+..................................................+.....................................................+..................................................................................................................................+............+............................................................................................................+...+............+...............+..............................................+.........................+..................................+.................+............................................................+..................................+........................................................................................................................................+................................................................+.......................................+...................................................................................................................................................++*++* 
  
DH parameters of size 2048 created at /root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/dh.pem 

5、创建客户端证书

(1)在根目录下建立client目录

[root@vpn easyrsa3]# cd 
[root@vpn ~]# mkdir client 
[root@vpn ~]# cp -R easy-rsa/ client/ 

(2)初始化

[root@vpn ~]# cd client/easy-rsa/easyrsa3/ 
[root@vpn easyrsa3]# ls 
easyrsa  openssl-1.0.cnf  vars  vars.example  x509-types 
[root@vpn easyrsa3]# ./easyrsa init-pki 
  
Note: using Easy-RSA configuration from: ./vars 
  
init-pki complete; you may now create a CA or requests. 
Your newly created PKI dir is: /root/client/easy-rsa/easyrsa3/pki 

(3)创建客户端key及生成证书

10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
[root@vpn easyrsa3]# ./easyrsa gen-req nmshuishui 
  
Note: using Easy-RSA configuration from: ./vars 
Generating a 2048 bit RSA private key 
....................................................+++ 
.................................................................................................................................................................................+++ 
writing new private key to '/root/client/easy-rsa/easyrsa3/pki/private/nmshuishui.key' 
Enter PEM pass phrase:            #输入密码 
Verifying - Enter PEM pass phrase: 
----- 
You are about to be asked to enter information that will be incorporated 
into your certificate request. 
What you are about to enter is what is called a Distinguished Name or a DN. 
There are quite a few fields but you can leave some blank 
For some fields there will be a default value, 
If you enter '.', the field will be left blank. 
----- 
Common Name (eg: your user, host, or server name) [nmshuishui]:nmshuishui   #输入nmshuishui                      
  
Keypair and certificate request completed. Your files are: 
req: /root/client/easy-rsa/easyrsa3/pki/reqs/nmshuishui.req 
key: /root/client/easy-rsa/easyrsa3/pki/private/nmshuishui.key 

(4)将得到的nmshuishui.req导入并签约证书

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 
[root@vpn ~]# cd openvpn-2.3.4/easy-rsa/easyrsa3/ 
[root@vpn easyrsa3]#   #导入req 
[root@vpn easyrsa3]# ./easyrsa import-req /root/client/easy-rsa/easyrsa3/pki/reqs/nmshuishui.req nmshuishui 
  
Note: using Easy-RSA configuration from: ./vars 
  
The request has been successfully imported with a short name of: nmshuishui 
You may now use this name to perform signing operations on this request. 
  
[root@vpn easyrsa3]#     #签约证书 
[root@vpn easyrsa3]# ./easyrsa sign client nmshuishui 
  
Note: using Easy-RSA configuration from: ./vars 
  
  
You are about to sign the following certificate. 
Please check over the details shown below for accuracy. Note that this request 
has not been cryptographically verified. Please be sure it came from a trusted 
source or that you have verified the request checksum with the sender. 
  
Request subject, to be signed as a client certificate for 3650 days: 
  
subject= 
    commonName                = nmshuishui 
  
  
Type the word 'yes' to continue, or any other input to abort. 
  Confirm request details: yes       #输入yes 
Using configuration from /root/openvpn-2.3.4/easy-rsa/easyrsa3/openssl-1.0.cnf 
Enter pass phrase for /root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/private/ca.key:    #输入创建根证书时的密码 
Check that the request matches the signature 
Signature ok 
The Subject's Distinguished Name is as follows 
commonName            :PRINTABLE:'nmshuishui' 
Certificate is to be certified until Aug 21 12:49:40 2024 GMT (3650 days) 
  
Write out database with 1 new entries 
Data Base Updated 
  
Certificate created at: /root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/issued/nmshuishui.crt   #签约成功 

(5)服务端及客户端生成的文件

服务端:(/root/openvpn-2.3.4/easy-rsa/easyrsa3/pki)文件夹

/root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/ca.crt 
/root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/reqs/server.req 
/root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/reqs/qingliu.req 
/root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/private/ca.key 
/root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/private/server.key 
/root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/issued/server.crt 
/root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/issued/qingliu.crt 
/root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/dh.pem 

客户端:(/root/client/easy-rsa)

/root/client/easy-rsa/easyrsa3/pki/private/nmshuishui.key 
/root/client/easy-rsa/easyrsa3/pki/reqs/nmshuishui.key   #这个文件被我们导入到了服务端文件,所以那里也有 

(6)拷贝服务器密钥及证书等到openvpn目录

[root@vpn ~]# cp openvpn-2.3.4/easy-rsa/easyrsa3/pki/ca.crt openvpn-2.3.4/ 
[root@vpn ~]# cp openvpn-2.3.4/easy-rsa/easyrsa3/pki/private/server.key openvpn-2.3.4/ 
[root@vpn ~]# cp openvpn-2.3.4/easy-rsa/easyrsa3/pki/issued/server.crt openvpn-2.3.4/ 
[root@vpn ~]# cp openvpn-2.3.4/easy-rsa/easyrsa3/pki/dh.pem openvpn-2.3.4/ 

(7)拷贝客户端密钥及证书等到client目录

[root@vpn ~]# cp openvpn-2.3.4/easy-rsa/easyrsa3/pki/ca.crt /root/client  
[root@vpn ~]# cp openvpn-2.3.4/easy-rsa/easyrsa3/pki/issued/nmshuishui.crt /root/client 
[root@vpn ~]# cp /root/client/easy-rsa/easyrsa3/pki/private/nmshuishui.key /root/client 

(8)为服务端编写配置文件

当安装好openvpn时候,它会提供一个server配置的文件例子

/root/openvpn-2.3.4/sample/sample-config-files/server.conf 

将此例子拷贝openvpn目录,然后配置

10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
[root@vpn ~]# cp openvpn-2.3.4/sample/sample-config-files/server.conf openvpn-2.3.4/ 
[root@vpn ~]# vim openvpn-2.3.4/server.conf 
local 192.168.1.104    #(自己vps IP) 
port 1194 
proto udp 
dev tun 
ca /root/openvpn-2.3.4/ca.crt 
cert /root/openvpn-2.3.4/server.crt 
key /root/openvpn-2.3.4/server.key # This file should be kept secret 
dh /root/openvpn-2.3.4/dh.pem 
server 10.8.0.0 255.255.255.0 
ifconfig-pool-persist ipp.txt 
push "redirect-gateway def1 bypass-dhcp" 
push "dhcp-option DNS 8.8.8.8" 
keepalive 10 120 
comp-lzo 
max-clients 100 
persist-key 
persist-tun 
status openvpn-status.log 
verb 3 

(9)开启系统转发功能

[root@vpn ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 0  改成 net.ipv4.ip_forward = 1 
[root@vpn ~]# sysctl -p 
[root@vpn ~]# sysctl -a | grep net.ipv4.ip_forward 
net.ipv4.ip_forward = 1 

(10)封装出去的数据包(eth0是你的vps外网的网卡):

/sbin/iptables -t nat -I POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE 

三、下载openvpn客户端,并进行配置

1、将客户端密钥及证书等拷出到windows备用

[root@vpn ~]# cd client/ 
[root@vpn client]# ls 
ca.crt  easy-rsa  nmshuishui.crt  nmshuishui.key    #带后缀的这三个 

2、安装openvpn-gui工具

(1)将D:\Program Files (x86)\OpenVPN\sample-config\client.ovpn复制到D:\Program Files (x86)\OpenVPN\config

(2)将从linux中拷贝出来的三个密钥及证书放到D:\Program Files (x86)\OpenVPN\config下

3)编辑D:\Program Files (x86)\OpenVPN\config\client.ovpn,修改为

10 
11 
12 
13 
client 
dev tun 
proto udp 
remote 192.168.1.104 1194 
resolv-retry infinite 
nobind 
persist-key 
persist-tun 
ca ca.crt //这里需要证书 
cert nmshuishui.crt 
key nmshuishui.key 
comp-lzo 
verb 3 

四、启动服务、测试

1、在vpn服务器上启动openvpn服务

[root@vpn ~]# /usr/local/sbin/openvpn --config openvpn-2.3.4/server.conf & 
[root@vpn ~]# 
[root@vpn ~]# echo "/usr/local/sbin/openvpn --config /etc/openvpn/server.conf &" >>/etc/rc.local  #设为开机启动 

2、在openvpn-gui上右键Connect输入密码连接

3、查看vpn状态




(责任编辑:IT)
------分隔线----------------------------