OpenVPN的安装和使用

来源:互联网 发布:java se技术文档 编辑:程序博客网 时间:2024/04/28 05:17

最近工作中搭建了云平台测评产品,使用到的主要框架是openStack和openVPN。其中,openStack负责搭建云平台的资源池和资源调度,openVPN是负责保障server端和client端的安全通信和二层协议的支持。这里的server端和client端是广义的,可以扩展到各自所在的局域网。

因为生产环境和测试环境的不同,这次openVPN的搭建也在操作系统两个版本上实现,分别为centos6.5 和centos7。下面的安装方法将列出个版本的操作系统中openVPN的搭建和使用,方案已经实际测试,保障可用性。
另外,本方案中的方法主要是在其他人的方案上进行了一些步骤的修改和纠错,图片也是使用他人的,按照惯例,在文章的最后,列出参考地址,以示感谢。

1.原理分析

OpenVPN 是一个基于 OpenSSL 库的应用层 VPN 实现。OpenVPN允许参与建立VPN的单点使用共享金钥,电子证书,或者用户名/密码来进行身份验证。OpenVPN所有的通信都基于一个单一的IP端口, 默认且推荐使用UDP协议通讯,同时TCP也被支持。OpenVPN连接能通过大多数的代理服务器,并且能够在NAT的环境中很好地工作。

OpenVpn的技术核心是虚拟网卡,其次是SSL协议实现。
这里先对虚拟网卡及其在OpenVpn的中的工作机理进行介绍:虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网卡,可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件(如IE)向虚拟网卡发送数据,则服务程序可以读取到该数据,如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收得到。
然后,再对SSL来做一个介绍:SSL(Secure Socket Layer) 协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。

2.centos6.5中openVPN的安装使用(centos7见第三小节)

第一步、为vps安装openvpn及所有所需软件

A:安装EPEL仓库

yum install epel-release

B:安装openvpn

yum install openvpn -y

C:安装openvpn最新的easy-rsa,该包用来制作ca证书,服务端证书,客户端证书。最新的为easy-rsa3

wget https://github.com/OpenVPN/easy-rsa/archive/master.zipunzip master.zip

如果你的机器不支持UNZIP命令可以参考”解决Linux VPS安装UNZIP组件解压文件”文章。

D:将解压得到的文件夹easy-rsa-master重命名为easy-rsa

mv easy-rsa-master/ easy-rsa/

然后将的到的easy-ras文件夹复制到/etc/openvpn/目录下

cp -R easy-rsa/ /etc/openvpn/

第二步、编辑vars文件,根据自己环境配置

A:先进入/etc/openvpn/easy-rsa/easyrsa3目录

cd /etc/openvpn/easy-rsa/easyrsa3/

B:复制vars.example 为vars

cp vars.example vars

C:修改下面字段,命令:vi vars,然后修改,最后wq保存

set_var EASYRSA_REQ_COUNTRY "CN" //根据自己情况更改set_var EASYRSA_REQ_PROVINCE "Beijing"set_var EASYRSA_REQ_CITY "Tong"set_var EASYRSA_REQ_ORG "qingliu Certificate"set_var EASYRSA_REQ_EMAIL "shuiqingliu14@gmail.com"set_var EASYRSA_REQ_OU "My OpenVPN"

第三步、创建服务端证书及key

A:进入/etc/openvpn/easy-rsa/easyrsa3/目录初始化:

./easyrsa init-pki

这里写图片描述

B:创建根证书

./easyrsa build-ca

如下:

Generating a 2048 bit RSA private key
…………………………………….+++ ……+++ writing new
private key to ‘/root/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]:qingliu

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/root/easy-rsa/easyrsa3/pki/ca.crt

注意:在上述部分需要输入PEM密码 PEM pass phrase,输入两次,此密码必须记住,不然以后不能为证书签名。还需要输入common name 通用名,这个你自己随便设置个独一无二的。

eg: Common Name (eg: your user, host, or server name) [Easy-RSA CA]:qingliu

我输入qingliu

C:创建服务器端证书

./easyrsa gen-req server nopass

如下:

[root@localhost easyrsa3]# ./easyrsa gen-req server nopass Generating
a 2048 bit RSA private key
……………………………………………………………………..+++
……………………+++ writing new private key to
‘/root/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]:shuiqingliu

Keypair and certificate request completed. Your files are: req:
/root/easy-rsa/easyrsa3/pki/reqs/server.req key:
/root/easy-rsa/easyrsa3/pki/private/server.key

该过程中需要输入common name,随意但是不要跟之前的根证书的一样

这里写图片描述

签约服务端证书:

./easyrsa sign server server

如下:

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 = shuiqingliu Type the word ‘yes’ to continue, or
any other input to abort. Confirm request details: yes Using
configuration from /root/easy-rsa/easyrsa3/openssl-1.0.cnf Enter pass
phrase for /root/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:’shuiqingliu’ Certificate is
to be certified until Apr 20 06:02:10 2024 GMT (3650 days)

Write out database with 1 new entries Data Base Updated

Certificate created at: /root/easy-rsa/easyrsa3/pki/issued/server.crt

该命令中.需要你确认生成,要输入yes,还需要你提供我们当时创建CA时候的密码。如果你忘记了密码,那你就重头开始再来一次吧。

这里写图片描述

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

./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
/etc/openvpn/easy-rsa/easyrsa3/pki/dh.pem

第四步、创建客户端证书

A:进入root目录新建client文件夹,文件夹可随意命名,然后拷贝前面解压得到的easy-ras文件夹到client文件夹,进入下列目录

cd /root/mkdir clientcd clientcp -R easy-rsa/ client/cd client/easy-rsa/easyrsa3/

B:初始化

./easyrsa init-pki

C:创建客户端key及生成证书(记住生成是自己输入的密码)

./easyrsa gen-req qingliu //名字自己定义

这里写图片描述

D:将的到的qingliu.req导入然后签约证书

a.进入到/etc/openvpn/easy-rsa/easyrsa3/

cd /etc/openvpn/easy-rsa/easyrsa3/

b.导入req

./easyrsa import-req /root/client/easy-rsa/easyrsa3/pki/reqs/qingliu.req qingliu

c.签约证书

./easyrsa sign client qingliu

//这里生成client所以必须为client,qingliu要与之前导入名字一致

上面签约证书跟server类似,就不截图了,但是期间还是要输入CA的密码

E:这步很重要,现在说一下我们上面都生成了什么东西

服务端:(etc/openvpn/easy-rsa/文件夹)

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

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

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

a.这一步就是拷贝这些文件放入到相应位置。将下列文件放到/etc/openvpn/ 目录执行命令:

cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /etc/openvpncp /etc/openvpn/easy-rsa/easyrsa3/pki/private/server.key /etc/openvpncp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/server.crt /etc/openvpncp /etc/openvpn/easy-rsa/easyrsa3/pki/dh.pem /etc/openvpn

这样就将上述四个文件放入到了/etc/openvpn目录下

b.这一步将下列文件放到/root/client 目录下执行命令:

cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /root/clientcp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/qingliu.crt /root/clientcp /root/client/easy-rsa/easyrsa3/pki/private/qingliu.key /root/client

这样就将上述三个文件复制到了/root/client目录,包括:ca.crt、qingliu.crt、qingliu.key, 此处注意第三个文件的路径和上面两个不同。

第五步、为服务端编写配置文件

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

/usr/share/doc/openvpn-2.3.2/sample/sample-config-files

下会有一个server.conf文件,我们将这个文件复制到/etc/openvpn

cp /usr/share/doc/openvpn-2.3.2/sample/sample-config-files/server.conf /etc/openvpn

然后修改配置vi server.conf如下:

local 192.227.161.xx(跟自己vps IP)
port 1194
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
# This file should be kept secret
dh /etc/openvpn/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

每个项目都会由一大堆介绍,上述修改,openvpn提供的server.conf已经全部提供,我们只需要去掉前面的注释#,然后修改我们自己的有关配置。

第六步、下载openvpn客户端,并进行配置

A:用sftp将我们在vps生成的客户端证书和key下载到客户端电脑

ca.crt qingliu.crt qingliu.key //这三个文件

B:去官网下载openvpn客户端进行安装,然后安装目录找到simple-config

D:\Program Files\OpenVPN\sample-config\client.ovpn

将client.ovpn 复制到D:\Program Files\OpenVPN\config下,当然我把客户端装在了D盘你根据自己情况选择.

将下载到的三个文件放入D:\Program Files\OpenVPN\config下然后如下:

这里写图片描述

编辑配置文件:

client
dev tun
proto udp
remote 192.227.161.xx 1194 //主要这里修改成自己vps ip
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt //这里需要证书
cert qingliu.crt
key qingliu.key
comp-lzo
verb 3

我们只需要以上项目每行一个。

第七步、测试排错

A:启动vps上的openvpn服务

service openvpn start

Oh,不幸的是出现service start failed!!!

但是当你运行:

openvpn /etc/openvpn/server.conf

又可以运行,解决办法:

删除/etc/openvpn/下的ipp.txt openvpn-status.log

然后就可以启动服务了。如果你还不能解决,那就去var/log中找message慢慢分析原因

B:启动客户端

打开openvpn gui启动,注意在启动后需要输入创建qingliu.key时候的密码!我前面让你记住过的。然后进入如下界面

这里写图片描述

当不能长时间连接的时候你需要查看出错误log,我第一链接时候出错了,tls的某个错但是我已经解决了就是注释掉客户端配置文件中的#ns-cert-type server,这样就不会出错了。我提供给你的配置选项一修复问题。

鉴于以上操作,你的openvpn已经应该可以争取运行了如下:

这里写图片描述

注意,若小图标显示绿色表示openVPN正常启动并连接。若小图标为黄色,表示openVPN正在启动或者连接故障。

3.centos7中openVPN的安装使用

(1)安装epel仓库

yum install epel-release

(2)安装openVPN

yum install openvpn -y

(3)安装easy-rsa

yum install easy-rsa -y

(4)配置openVPN

cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf  /etc/openvpn

打开文件编辑

vi /etc/openvpn/server.conf

需要更改以下几项内容,若没有则自己添加,若文件中自带该配置项,把注释去掉。保证配置项内容如下所示:

dh dh2048.pempush "redirect-gateway def1 bypass-dhcp"push "dhcp-option DNS 8.8.8.8"push "dhcp-option DNS 8.8.4.4"user nobodygroup nobody

保存文件并退出
(5)生成密钥和证书

mkdir -p /etc/openvpn/easy-rsa/keyscp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsavi /etc/openvpn/easy-rsa/vars

按照自己的实际情况修改文件,下面给出一个样例

. . .# These are the default values for fields# which will be placed in the certificate.# Don't leave any of these fields blank.export KEY_COUNTRY="US"export KEY_PROVINCE="NY"export KEY_CITY="New York"export KEY_ORG="unixmen"export KEY_EMAIL="jijojamestj@gmail.com"export KEY_OU="Community"# X509 Subject Fieldexport KEY_NAME="server". . .export KEY_CN=openvpn.unixmen.com. . .

更改openssl文件名称,防止版本号匹配错误

cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

生成密钥和证书

cd /etc/openvpn/easy-rsasource ./vars./clean-all ./build-ca./build-key-server server./build-dh 

上面的过程就完成了密钥和证书的生成工作,下面我们把这些文件拷贝到openvpn的工作目录中

cd /etc/openvpn/easy-rsa/keyscp dh2048.pem ca.crt server.crt server.key /etc/openvpn

为客户端生成证书

cd /etc/openvpn/easy-rsa./build-key client

(6)配置路由
添加路由表转发规则,以使得openvpn到达客户端子网。

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

进入配置文件,确保ipv4转发开启

vi /etc/sysctl.confnet.ipv4.ip_forward = 1

重启网络服务

systemctl restart network.service

(7)启动openvpn服务

systemctl -f enable openvpn@server.servicesystemctl start openvpn@server.service

(8)配置client端openvpn(以win7为例)
在openvpn官网下载openvpn的windows安装版并安装。安装完成后,
把以下几个文件拷贝到client端的机器上。其路径位置为(以win7为例,…/config/目录下,…代表openvpn的安装目录)

/etc/openvpn/easy-rsa/keys/ca.crt/etc/openvpn/easy-rsa/keys/client.crt/etc/openvpn/easy-rsa/keys/client.key

到openvpn安装目录下的sample-config文件夹下,找到client.ovpn文件,拷贝到…/config/目录下,并修改以下几项

clientdev tunproto udpremote your_server_ip 1194resolv-retry infinitenobindpersist-keypersist-tuncomp-lzoverb 3ca /path/to/ca.crtcert /path/to/client.crtkey /path/to/client.key

点击图标,启动openvpn,完成连接。

注:
1.openvpn可以完成各种复杂的网络对端配置,包括单服务端-单客户端、单服务端-多客户端,以及客户端对客户端的私密通信。这里的服务端和客户端依然是广义的,包括物理主机在的局域网络。
2.若出现openvpn启动和连接正常,客户端正常访问服务端,但是客户端主机无法访问公网的问题,是因为server端以下的配置造成的,去掉该配置即可。第一句是将client端的网段改变,第二句是重定向了网关。这两句都是强行把网络配置推送client端,从而改变了client端的网络配置。

push "route 192.168.10.0 255.255.255.0"push "redirect-gateway def1 bypass-dhcp"

3.若openvpn的虚拟网卡分配的IP地址和本地网络冲突,可在server端的server.conf中更改配置,这句话是规定了分配给openvpn的地址网段。

server 10.8.0.0 255.255.255.0

参考文献:
1.http://www.tuicool.com/articles/V3aIF3v
2.http://ju.outofmemory.cn/entry/71676
3.http://openvpn.net/

0 0
原创粉丝点击