一、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-RSA,Easy-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 环境是一项值得尝试的技术,不仅可以提高网络安全性,还可以提供更好的网络体验,需要的小伙伴们赶快收藏起来一起学习吧!!!
有话要说