openvpn的搭建与应用

一.VPN概述:

VPN(Virtual Private NetWork,虚拟专用网络)架设在公共共享的基础设施互联网上,在非信任的网络上建立私有的安全的连接,把分布在不同地域的办公场所、用户或者商业伙伴互联起来。

在目前的实践中,常见的VPN构建技术:

  • PPTP(Point-to-Point Tunneling Protocol,点到点的隧道协议)VPN

  • IPSec(Internet Protocol Security,互联网协议安全)VPN

  • SSL/TLS(Secure Sockets Layer,安全接口层)VPN

3种常见VPN构建技术对比:

  • PPTP 需要建立2个隧道进行通信,控制和数据传输分离,其中传输数据使用GRE。在同一个局域网里面的多个内网主机需要建立多条GRE通道连接到同一台VPN服务器时,需要在防火墙或者NAT设备上进行特殊设置。

  • IPSec VPN是一个比较成熟的方案,但其配置较复杂,学习成本比较高。IPSec VPN 在商业VPN 硬件设备上实现的比较多。

  • SSL/TLS VPN 工作在用户态,不需要对内核做特殊的修改,可移植性比较高,配置简单,学习成本低(常见:OpenVPN,BadVPN)。

OpenVPN (当前主流)

功能特性:

  • 对任何IP子网或者虚拟以太网通一个UDP或者TCP端口来建立隧道。

  • 架构一个可扩展的,负载均衡的VPN集群系统,同时支持来自上千用户的连接。

  • 使用任意加密算法,可以实现简单的静态密码的传统加密,或者基于证书的公钥私钥加密算法。

  • 对数据流进行实时的压缩。

  • 支持对端节点通过DHCP动态获取IP

  • NAT 支持,对于面向连接的有状态防火墙,不需要特殊设置。

  • 客户端使用,支持Windows,Mac OS ,Linux

3种实现案例:

  • Peer-to-Peer VPN,这种场景,将Internet 两台机器(公网地址)使用VPN连接起来。

  • Remote Access VPN(远程访问),该实现方案,旨在解决,移动办公,经常出差不在办公室的,公司生产环境连接。在这个场景种远程访问者一般没有公网IP,他们使用内网地址通过防火墙设备及逆行NAT转换后连接互联网。

  • SIte-to-Site VPN ,用于连接两个或者多个地域上不同的局域网LAN,每个LAN有一台OpenVPN 服务器作为接入点,组成虚拟专用网络,使得不同LAN里面的主机和服务器都能够相互通讯。

     盗图一张:在本文中的IP会有变化

二.安装准备

OpenVPN  服务器:CetnOS7.4 (218.241.106.168)

OpenVPN  客户端:CetnOS7.4 (218.241.106.170)

  安装依赖包:

    yum install -y openssl openssl-devel lzo lzo-devel pam pam-devel automake pkgconfig

    安装EPEL源(这里不再具体给出),从上面找openvpn的rpm包即可,我安装的如下:

               

               在安装openvpn的过程中可能还会依赖一些包,这个需要自己找了,比如:

    pkcs11-helper-1.11-3.el7.x86_64.rpm          和       lz4-1.7.3-1.el7.x86_64.rpm

    在配置openvpn的过程中还需要安装easy-rsa ,主要用来生成秘钥。(从github上下载即可:https://github.com/OpenVPN/easy-rsa

    

    easy-rsa的3.0的版本比2.0的版本好用的多,省去了一大堆的瓶瓶罐罐  ^_^

复制代码

cd /usr/local                    easy-rsa下载在/usr/local中

unzip easy-rsa-3.0.5        解压

mv /usr/local/easy-rsa-3.0.5 /usr/local/easy-rsa    重命名

cp -rf  easy-rsa /etc/openvpn        拷贝到openvpn目录中

cd /etc/openvpn/easy-rsa/easyrsa3    

cp vars.example vars  #一般情况下,默认的配置可以满足需求,也可以根据需要修改  
./easyrsa init-pki   #建立一个空的pki结构,生成一系列的文件和目录  
./easyrsa build-ca   #创建ca  密码 和 cn那么需要记住  
./easyrsa gen-req server nopass  #创建服务端证书  common name 最好不要跟前面的cn那么一样  
./easyrsa sign server server   #签约服务端证书  
./easyrsa gen-dh  #创建Diffie-Hellman  

#下面是客户端的证书  
#首先创建一个工作的目录  
cd /home/  
mkdir client && cd client  
cp -R ~/easy-rsa/ ./   #这是解压过的easy-rsa 而不是生成了服务端证书的easy-rsa  
cd easy-rsa/easyrsa3/  
cp vars.example vars  
  
#开始生成  
./easyrsa init-pki  
./easyrsa gen-req orangleliu #用自己的名字,需要创建一个密码  和 cn name,自己用的 需要记住  
  
#现在客户端的证书要跟服务端的交互,也就是签约,这样这个用户才能使用此vpn  
#切换到server证书目录下  
cd /etc/openvpn/easy-rsa/easyrsa3/   
./easyrsa import-req /home/client/easy-rsa/easyrsa3/pki/reqs/orangleliu.req orangleliu  #导入req  
./easyrsa sign client orangleliu #用户签约,根据提示输入服务端的ca密码  

复制代码

    把这些文件放到对应的一些目录下

    服务端证书(放到配置文件一个目录,便于配置和查找)

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

    client证书(只是集中到一个文件夹下,给vpn用户使用)

mkdir /home/myclient  
cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /home/myclient/  
cp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/test.crt  /home/myclient/  
cp /home/client/easy-rsa/easyrsa3/pki/private/test.key /home/myclient/ 

    最难的部分已经过去了,下面就是配置服务,看看效果了

三.配置服务端

  vim /etc/openvpn/server.conf   具体每个配置的含义,配置文件中都有详细的解释,我的配置文件如下:

复制代码

local 218.241.106.168
port 1194
proto tcp
dev tap
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
dh /etc/openvpn/dh.pem
server 10.10.0.0 255.255.0.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
client-to-client
keepalive 10 120
comp-lzo
max-clients 100
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append  /var/log/openvpn/openvpn.log
verb 3
key /etc/openvpn/server.key
cipher AES-256-CBC
client-config-dir /etc/openvpn/ccd

复制代码

  现在再创建日志的目录:

mkdir -v /var/log/openvpn

  在创建固定IP分配的目录:

mkdir /etc/openvpn/ccd

  如果要定义分配的IP需要在目录中创建文件,例如:

vim test         (创建个文件并添加)
ifconfig-push 10.10.10.10 255.255.0.0

  使用如下方式来启动服务端:

openvpn --config /etc/openvpn/server.conf &

  可以看到新生成了一个虚拟网卡:

  

  查看一下服务端口:

  

  开启路由转发功能:

  vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

  现在服务端就算配置完成了

四.配置客户端

  在客户端上也是配置一个openvpn , 这里不再赘述

  现在就可以把刚才生成的客户端的那几个ca拷贝到客户端的openvpn的配置目录中/etc/openvpn了

  

  现在配置一下客户端/etc/openvpn/client.conf

复制代码

client
dev tap
proto tcp
remote 218.241.106.168 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/test.crt
key /etc/openvpn/test.key
comp-lzo
verb 3
cipher AES-256-CBC

复制代码

  现在就可以使用命令启动了:

openvpn --config /etc/openvpn/client.conf

  会让你输入刚才生成客户端秘钥的密码:(之前输入的那几个信息一定要记住哦)

  输入正确后,就会连接成功:

   路由策略如下:

 

现在两台服务器就可以使用私网IP通讯了。

五.测试结果

  只是相互可以通信不是目的,下面是我对配置文件进行一定的修改并得出的部分结论(我有千兆和万兆的环境):

  以下测试均使用  iperf3   工具进行传输测试得出的结果,期间未运行其他程序。

万兆网卡:

    开启  TCP,使用TUN , 关闭AES-256-CBC加密算法:70MB/s
    
    开启  TCP,使用TUN , 开启AES-256-CBC加密算法:65MB/s

    开启  UDP,使用TUN , 开启AES-256-CBC加密算法:58MB/s

    开启  UDP,使用TUN , 关闭AES-256-CBC加密算法:59MB/s

    开启  TCP,使用TAP , 关闭AES-256-CBC加密算法:67MB/s

    开启  TCP,使用TAP , 开启AES-256-CBC加密算法:69MB/s

    开启  UDP,使用TAP , 关闭AES-256-CBC加密算法:56MB/s

    开启  UDP,使用TAP , 开启AES-256-CBC加密算法:57MB/s

千兆网卡:

    开启  TCP,使用TUN , 关闭AES-256-CBC加密算法:68MB/s
    
    开启  TCP,使用TUN , 开启AES-256-CBC加密算法:68MB/s

    开启  UDP,使用TUN , 开启AES-256-CBC加密算法:57MB/s

    开启  UDP,使用TUN , 关闭AES-256-CBC加密算法:55MB/s

    开启  TCP,使用TAP , 关闭AES-256-CBC加密算法:63MB/s

    开启  TCP,使用TAP , 开启AES-256-CBC加密算法:62MB/s

    开启  UDP,使用TAP , 关闭AES-256-CBC加密算法:55MB/s

    开启  UDP,使用TAP , 开启AES-256-CBC加密算法:53MB/s

综上结果:

    openvpn在使用万兆与千兆网卡时,在速率无明显差异;

    openvpn是否开启AES-256-CBC加密算法,在速率无明显差异;

    openvpn在使用tun与tap时,在速率无明显差异;

    openvpn在使用tcp协议与udp协议时,在速率上有一定的差异,TCP协议比UDP协议大约快为10MB/s

现考虑安全方面及上述结果可采用:

    开启AES-256-CBC加密算法,使用TCP协议传输,使用TUN与TAP均可。
 

只是我个人的测试结果及结论,不对任何人构成建议。

参考文章如下:

https://www.cnblogs.com/kl876435928/p/7155354.html

https://www.cnblogs.com/kevingrace/p/6296676.html

https://wenku.baidu.com/view/b3db80e48ad63186bceb19e8b8f67c1cfad6ee11.html

https://blog.csdn.net/orangleliu/article/details/43157955

https://blog.csdn.net/skymanwww/article/details/63707082          配置文件详解参考

http://itindex.net/detail/20698-pptp-l2tp-ipsec                              PPTP、L2TP/IPSec、OpenVPN比较选择

猜你喜欢

转载自blog.csdn.net/a8039974/article/details/89352023