一、VPN概述(OpenVpn)

        VPN是Virtual Private Network(虚拟私人网络)的缩写。它是一种通过公用网络建立安全、加密通信的技术。VPN的主要功能是创建一个虚拟的专用网络,使得用户可以在这个网络中访问外部网络资源,同时也可以保护用户的网络流量,防止被外界窃取或者监听。

        OpenVPN是一种基于SSL/TLS协议实现的开源VPN解决方案。它是一款跨平台的VPN软件,可以在Windows、Linux、MacOS、Android等多种操作系统上运行,并且支持多种加密算法和认证方式。OpenVPN可以通过配置文件定制化设置,具有高度的灵活性和可扩展性。

        总的来说,VPN技术和OpenVPN是为了实现安全、私密、高效的网络通信而开发的解决方案。通过使用VPN和OpenVPN,用户可以在公共网络上安全地访问互联网、加密网络流量、保护个人隐私和数据安全。

二、VPN环境搭建(OpenVpn环境配置)

        为了方便读者学习和理解,我在这里画了一个VPN实现原理的直观图,本次环境配置信息与上图一致。

1、安装openvpn和easy-rsa

        openvpn上面已经介绍过了,这就不多赘述,这里主要说一下Easy-RSAEasy-RSA是一款用于生成和管理公共密钥基础设施(PKI)的开源工具。它是一种简单易用的证书管理工具,常用于创建和维护SSL/TLS证书,以及用于VPN等安全通信协议的证书。Easy-RSA是OpenVPN项目的一部分,用于创建OpenVPN服务器和客户端的证书。它通常作为OpenVPN安装包的一部分提供,但也可以单独下载和使用。

        我们这里通过yum源的方式安装上述两个软件包(也可以去GitHub上下载到本地进行安装)。

sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm                 #安装epel仓库源 详细教程可参考yum源环境配置

 yum repolist         #查看epel源仓库,这里可以看出我们通过epel源增加了13777个包

 yum install -y openvpn        #安装openvpn

 yum install -y easy-rsa        #安装easy-rsa

 whereis easy-rsa                #这里我们用whereis命令查看easy-rsa所在目录(默认目录一般为:/usr/share/easy-rsa)

到这里我们服务端的软件安装步骤就操作完了

2、虚拟专用网络证书制作

 cd /usr/share/easy-rsa/3         

 #进入easy-rsa目录,我们可以看见文件夹中的文件,这里简单解释一下,easy-rsa不同版本的软件包中的内容不同,制作证书的命令也稍有区别,这里以   本次安装的easy-rsa包为例。

 touch vars         #在/usr/share/easy-rsa/3目录下创建vars文件(该步骤非必要操作,可选,低于3.0版本easy-rsa进行配置),vars是一个信息说明的文件。

 vi vars              #编辑vars文件内容如下(根据实际情况自行调整即可)

        export KEY_COUNTRY="CN"
        export KEY_PROVINCE="JiLin"
        export KEY_CITY="Changchun"
        export KEY_ORG="song"
        export KEY_EMAIL="song1827@163.com"
        export KEY_OU="My OpenVPN"

source ./vars        #加载vars文件

 注:不建议在3.x以上版本使用vars文件

从Easy-RSA 3.x版本开始,不再使用vars文件。这是因为Easy-RSA 3.x版本引入了新的配置文件格式,用于更灵活地配置证书颁发机构(CA)。

在Easy-RSA 3.x中,使用vars文件来设置环境变量已经不再必要,而是使用.cnf文件来配置CA的选项。.cnf文件是一个文本文件,包含了CA的配置信息,包括密钥长度、签名算法、证书到期时间等。

此外,Easy-RSA 3.x还支持使用命令行选项来设置CA的选项,从而避免了需要手动编辑.cnf文件的麻烦。

总之,从Easy-RSA 3.x版本开始,使用vars文件不再是必须的,而是可以通过.cnf文件或命令行选项来配置CA的选项。

虽然在Easy-RSA 3.x版本中,vars文件已经不再是必需的配置文件。但是,如果你想使用vars文件来设置环境变量,Easy-RSA 3.x仍然支持使用它。

默认情况下,Easy-RSA 3.x版本中没有vars文件。如果你想使用它,你需要手动创建并编辑vars文件,并在使用Easy-RSA时指定它的位置。

注意,如果你使用vars文件来设置环境变量,那么在vars文件中设置的值将会覆盖在.cnf文件中设置的值。因此,如果你同时使用vars文件和.cnf文件来配置CA的选项,请确保它们之间没有冲突。

重点来了:

./easyrsa init-pki                #初始化,这里我们可以看见生成pki文件夹,用于存放证书文件

./easyrsa build-ca                #生成ca根证书,这里需要输入两次根证书密码,和common name通用名,自己配置合理即可。

 ./easyrsa gen-req server nopass               

#创建服务器端证书,nopass表示不加密私钥文件,生成过默认,这里我们需要输入 server端的common name通用名,合理即可(区分根证书的common name)

./easyrsa sign server server        #签约服务端证书,这里我们需要按照提示输入yes和ca根证书的密码,下图也可以看见我们文件生成的路径

./easyrsa gen-req client           

 #创建客户端证书,这里需要输入客户端PEM密码,同时也要输入客户端common name通用名(这里也可以用 ./easyrsa gen-req client nopass 类似于服务端操作,nopass表示不加密私钥文件,生成过程中直接回车默认)

./easyrsa sign client client                #给client端证书签名,这里需要根据提示输入yes和ca根证书密码 

./easyrsa gen-dh           #创建Diffie-Hellman文件,秘钥交换时的Diffie-Hellman算法,确保key穿越不安全网络的命令,这里可能需要点时间才能执行完

好了,到这里证书文件就做好了

3、OpenVpn服务端配置

yum install -y tree         #这里为了方便我们安装并使用tree命令,此步骤可忽略。

tree pki        #我们使用tree命令直观的查看一下我们生成的密钥相关的文件

拷贝证书到openvpn主配置文件目录下

cp -r /usr/share/easy-rsa/3/pki/ca.crt /etc/openvpn/
cp -r /usr/share/easy-rsa/3/pki/issued/server.crt  /etc/openvpn/
cp -r /usr/share/easy-rsa/3/pki/private/server.key /etc/openvpn/
cp -r /usr/share/easy-rsa/3/pki/dh.pem  /etc/openvpn/

把服务端配置文件server.conf 复制到 /etc/openvpn下

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

vi server.conf

        port 1194                         #服务端口
        proto udp                         #协议(这里也可以采用tcp协议,相比于upd,tcp更加可靠,但是udp访问更快)
        dev tun                            #采用路由隧道模式tun
        ca ca.crt                          #ca证书文件位置(此处为ca.crt文件存放位置,如果不与server.conf文件在同一路径下,要标出文件位置),加载目录
        cert server.crt                  #服务端公钥文件位置,加载目录
        key server.key                 #服务端私钥文件位置,加载目录
        dh dh.pem                       #秘钥交换交换证书文件位置,加载目录

        server 10.0.2.0 255.255.255.0                   #给客户端分配地址池,这里要区分openvpn服务器的其他网段
        push "route 172.16.2.0 255.255.255.0"      #允许客户端访问内网172.16.2.0网段,推送路由信息

        ifconfig-pool-persist ipp.txt                          #地址池记录文件位置
        keepalive 10 120                                        #存活时间,表示为10秒ping一次,120 如未收到响应则视为断线,默认配置即可

        tls-auth ta.key 0 # This file is secret           #拒绝dos攻击,提高VPN安全性,这里要在/etc/openvpn 下生成该文件,下文会生成该文件

        cipher AES-256-GCM                                 #这里是该服务使用的加密方式;默认为CBC,这里需要修改成GCM,v2.4版本以后客户端需要修改
        max-clients 100                                           #最多允许100个客户端连接,默认配置即可
        status openvpn-status.log                           #日志文件位置
        verb 3                                                          #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
        client-to-client                                              #客户端与客户端之间支持通信
        log /var/log/openvpn.log                              #openvpn日志文件位置
        persist-key                                                  #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys。
        persist-tun                                                  #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup

 上述配置为常用配置及参数说明

grep '^[^#|;]' /etc/openvpn/server.conf     #查看server.conf配置文件生效内容(可参考此处,此处为本次实验环境配置内容)

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf                                    #开启路由转发功能

sysctl -p                                                                                                     #激活内核中新增的配置文件信息使路由转发功能生效

 openvpn --genkey --secret ta.key                                #创建配置文件中抵御dos攻击的文件

到此处服务端配置文件已经完成(ca.crt、dh.pem、server.conf、server.crt、server.key、ta.key)

 

 openvpn --daemon --config server.conf           #开启openvpn服务,--daemon参数表示后台运行,不加该参数前台会被占用,需要开新窗口

 验证服务是否启动成功:

 yum install -y net-tools        #这里我们需要使用到netstat命令进行查看,使用yum源安装

 netstat -lntup | grep 1194    #ss -nutl | grep 1194                #查看1194端口服务,验证成功

ip a         #验证查看生成的tun0网卡,该网络用于openvpn通讯

 4、openvpn服务端配置

cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/client.conf /etc/openvpn/client        #拷贝客户端配置文件到/etc/openvpn/client(也可以放置在其他目录,这里默认生成了client文件夹,如果使用其他版本,可自行创建client目录)

 vi /etc/openvpn/client/client.conf        #编辑客户端配置文件

        client                                     #指定当前VPN是客户端
        dev tun                                  #使用tun隧道传输协议
        proto udp                               #使用udp协议传输数据
        remote 192.168.2.6 1194      #openvpn服务器IP地址端口号
        resolv-retry infinite                 #断线自动重新连接,在网络不稳定的情况下非常有用
        nobind                                   #不绑定本地特定的端口号
        ca ca.crt                                 #指定CA证书的文件路径
        cert client.crt                          #指定当前客户端的证书文件路径
        key client.key                         #指定当前客户端的私钥文件路径
        verb 3                                    #指定日志文件的记录详细级别,0-9,等级越高日志内容越详细
        persist-key                             #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
        persist-tun                              #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup

下图为本次环境客户文件配置

 #把客户端所需的证书文件拷贝到/etc/openvpn/client下

 cp -r /usr/share/easy-rsa/3/pki/private/client.key /etc/openvpn/client/
 cp -r /usr/share/easy-rsa/3/pki/issued/client.crt /etc/openvpn/client/
 cp -r /usr/share/easy-rsa/3/pki/ca.crt /etc/openvpn/client/
 cp -r /etc/openvpn/ta.key /etc/openvpn/client/

 mv client.conf client.ovpn        #客户端配置文件为.ovpn结尾的文件,这里需要修改文件后缀

 cd /etc/openvpn

 yum install -y zip 

 zip client.zip ./client/*                #把客户端文件打包

 使用sftp工具把client下载到本地Windows系统上(xftp、FZ、WinSCP、MobaXterm等),也可以使用命令传输:

 yum -y install lrzsz

 sz -y client.zip                        #将linux系统中的文件下载到Window中,但是需要提前设置好工具文件传输的路径

5、本地Windos 10系统安装客户端软件

本此测试环境安装的客户端软件为openvpn-install-2.4.7-I606-Win10.exe(可以在网络上下载,最好下载同openvpn服务端相同版本,避免出现兼容性问题)可以使用本次测试环境使用的客户端——链接: https://pan.baidu.com/s/1e-XqtvuyjxMmxet8oEt3TA 提取码: yf7s

默认安装到Window操作系统中即可,我这里直接安装到c盘目录下 C:\OpenVPN,安装完成后我们把从Linux服务端传输出来的client文件放置到C:\OpenVPN\config目录下,打开openvpn客户端软件,输入密码即可连接成功

连接成功后会出现提示和显示,如下图所示,表示客户端已连接到openvpn服务端

 

 6、测试验证

在Windows系统上执行Win+R打开运行输入cmd,打开命令行窗口,执行ipconfig和route print查看openvpn服务端分配的10.0.2.0端的ip及访问内网环境172.16.2.0段的路由。

ipconfig     #查看网卡

 

 route print        #查看路由表信息

        测试OpenVPN环境的搭建总体来说并不困难,只是过程相对来说稍微繁琐了些,搭建 OpenVPN 环境可以为企业和个人提供更加安全、隐私和自由的网络环境。 搭建 OpenVPN 环境需要一定的技术和经验,但是相对于商业 VPN 服务来说,搭建自己的 OpenVPN 环境可以更好地掌握和保护个人数据的安全。搭建 OpenVPN 环境是一项值得尝试的技术,不仅可以提高网络安全性,还可以提供更好的网络体验,需要的小伙伴们赶快收藏起来一起学习吧!!!

发布于:2023/04/24 星期一  JiLin Chuangchun 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐