linux教程分享之openvpn2.3.4服务器部署

mage_linux03 发布于 2014/09/04 11:45
阅读 4K+
收藏 3

一、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是致力于解压速度的一种数据压缩算法

1
2
3
[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

1
2
3
4
5
6
7
[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官网)

1
2
3
4
5
6
7
8
9
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)初始化

1
2
3
4
5
6
7
8
9
[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)创建根证书

1
2
3
4
5
6
7
8
9
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)创建服务器端证书

1
2
3
4
5
6
7
8
9
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)签约服务器端证书

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
[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穿越不安全网络的命令:

1
2
3
4
5
6
7
8
[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目录

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

(2)初始化

1
2
3
4
5
6
7
8
9
[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及生成证书

1
2
3
4
5
6
7
8
9
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导入并签约证书

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
[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)文件夹

1
2
3
4
5
6
7
8
/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)

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

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

1
2
3
4
[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目录

1
2
3
[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配置的文件例子

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

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

1
2
3
4
5
6
7
8
9
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)开启系统转发功能

1
2
3
4
5
[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外网的网卡):

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

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

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

1
2
3
[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下

wKioL1P5ygHTqOz_AADMHlyTNj0870.png

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

1
2
3
4
5
6
7
8
9
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服务

1
2
3
[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输入密码连接

wKioL1P562mxztfxAADTgWdaG-0065.png

3、查看vpn状态

wKiom1P56pfzRcrEAAH23a1VGEU549.png



加载中
返回顶部
顶部