一、主机准备
主机名 | 公网IP | 私有IP | 系统 | 角色 |
---|---|---|---|---|
vpnserver | 192.168.236.135 | 172.16.30.135 | centos7 | VPN服务器 |
webserver | N/A | 172.16.30.134 | centos7 | 模拟公司内部主机,无法连接外网 |
win10宿主机 | 192.168.236.1 | N/A | win11 | 模拟公司外员工电脑 |
1.1、vpnserver虚拟机配置(xshell连接)
1、设置hostname:设置完,重新开一个终端。
hostname vpnserver
2、编辑虚拟机,选择添加网络适配器
3、添加多一张网卡后,给该网卡配置网络连接为LAN区段,一开始需要先创建LAN区段
LAN网段: 172.16.30.0/24 (多个虚拟机在同一个内部网络)
4、给网络适配器选择LAN区段 模式,选择2创建的全局区段
5、启动虚拟机:修改新增的网卡配置私有IP地址:
-
查看新增网卡的名字
- ip add show
- 名字是ens32
- ip add show
-
输入编辑网卡命令
- nmtui
-
选择编辑连接
-
把有线连接删除掉
-
点击右侧添加
-
选择网卡类型:以太网
-
编辑网卡信息:
- 配置集名称和设备: ens32
-
IPv4配置:自动改手动
-
IPv4配置:点击右侧显示
-
IPv4配置:只需要配置上地址(172.16.30.135/24),其他网关和DNS都无需配置
-
最后点击确定
6、查看网络信息
ip add show
1.2、webserver 虚拟机配置(xshell连接)
1、设置hostname: 设置后,重新开启一个终端
hostname webserver
2、新增网络适配器
3、给新增的网络适配器,设置LAN区段,选择 1.1中配置好的全局区段
- 这样,vpnserver和webserver 就在同一个私有网段中了
4、启动虚拟机:查看新增网卡名字
-
ip add show
- 新增网卡名字:ens32
5、配置网卡信息
-
输入:nmtui
-
选择:编辑连接
-
删除:有线连接,名字乱码的
-
选择:添加
-
选择:以太网---创建
-
配置集名称和设备:ens32
-
IPv4配置:自动改手动
-
IPv4配置:点击<手动> 右侧的显示
-
IPv4配置:只需要配置地址(172.16.30.134/24)网关和DNS都不需要
-
点击右下角的确定
5、一路退出网络配置
6、查看是否配置成功
ip add show
7、禁用外网:当前虚拟机模拟公司内部主机,无法访问外网。
vi /etc/sysconfig/network-scripts/ifcfg-ens33
- 把ONBOOT: 设置no
8、此时宿主机就无法访问到webserver虚拟机了
1.3、连接通讯流程图
二、vpnserver主机部署
2.1、部署前的基本环境配置
1、关闭selinux安全策略
sh
#查看是否关闭
getenforce
##Enforcing 就是没有关闭,Disabled就是关闭了
#临时关闭
setenforce 0
#永久关闭
cat /etc/selinux/config
sed -i '7s#enforcing#disabled#g' /etc/selinux/config
reboot
2、关闭防火墙
sh
#关闭防火墙
systemctl stop firewalld
#禁用开机启动防火墙(永久关闭)
systemctl disable firewalld
systemctl status firewalld
#Active:inactive (dead) 就是关闭了
3、系统软件程序下载优化(配置阿里云)
sh
#配置源更新地址为阿里云的
curl -s -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
#配置epel源是阿里云地址
curl -s -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
4、系统基础软件程序下载安装
sh
yum install -y tree nmap lrzsz dos2unix nc lsof wget -y
yum install -y psmisc net-tools bash-completion vim-enhanced git -y
2.2、安装easy-rsa工具
2.2-1、安装流程
1、需要使用到easy-rsa.zip 工具制作
https://github.com/OpenVPN/easy-rsa-old
- 下载zip包
- 上传到linux服务器的 /tmp 目录下
sh
/tmp/ 目录下
2、解压:
sh
cd /tmp
#安装zip解压工具
yum install unzip -y
unzip easy-rsa-old-master.zip
3、移动到/usr/local中:
sh
cd /tmp
mv easy-rsa-old-master /usr/local/
4、配置easy文件:
sh
cd /usr/local/easy-rsa-old-master/easy-rsa/2.0
vi vars
#修改的配置
export KEY_COUNTRY="cn" #中国
export KEY_PROVINCE="guangdon" #广东
export KEY_CITY="guangzhuo" #广州
export KEY_ORG="guangshu" #组织
export KEY_EMAIL="2414155342@qq.com" #邮箱
#export KEY_EMAIL=mail@host.domain #注释,邮箱一个就行
export KEY_CN=guangshu #随意
export KEY_NAME=guangshu #随意
export KEY_OU=guangshu #随意
export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234
#最后两个无需修改,默认就行
5、加载配置:
sh
cd /usr/local/easy-rsa-old-master/easy-rsa/2.0
source ./vars
#执行
./clean-all
#会删除或创建keys目录,后期生成证书和私钥都保存在该目录下
2.2-2、生成证书文件
1、生成根证书和密钥文件
sh
cd /usr/local/easy-rsa-old-master/easy-rsa/2.0
./build-ca
#因为上面已经配置vars文件,一路回车即可
#查看是否创建了ca.crt,ca.key
ll ./keys
#两个文件
ca.crt
ca.key
2、生成服务器端证书和密钥文件
sh
cd /usr/local/easy-rsa-old-master/easy-rsa/2.0
./build-key-server vpnserver #给生成的证书一个名字,一般server,名字要记住
-
一路回车:遇到两次[y/n], 输入yes
-
查看keys目录
shll ./keys #vpnserver 有3个文件,自己创建的证书,都是假证,只需要用到crt和key vpnserver.crt vpnserver.csr vpnserver.key
3、生成客户端证书和密钥文件
sh
cd /usr/local/easy-rsa-old-master/easy-rsa/2.0
./build-key vpnclient #给生成的证书一个名字,随意,名字要记得,一般client
-
一路回车:遇到两次[y/n],都输入:yes
-
查看keys目录
shll ./keys #3个文件,只需要crt和key文件 vpnclient.crt vpnclient.csr vpnclient.key
4、生成密钥交换文件
sh
cd /usr/local/easy-rsa-old-master/easy-rsa/2.0
./build-dh
-
查看keys目录
ll ./keys/ #dh2048.pem
总结:需要用到的证书和密钥
- 根证书和密钥:ca.crt , ca.key
- 服务端证书和密钥:vpnserver.crt ,vpnserver.key
- 客户端证书和密钥:vpnclient.crt,vpnclient.key
- 密钥交换文件:dh2048.pem
2.3、安装OpenVPN服务
做了 "2.1" 中的 "3、配置epel源是阿里云地址" ,就可以直接安装。
2.3-1、安装流程
1、安装
yum install -y openvpn
2、查看安装是否成功:
# openvpn --version
2.4.12 版本
#到时候客户端的软件程序,也应该是2.4.12版本,防止兼容性问题
3、安装的目录:/etc/openvpn
4、到/etc/openvpn的目录下创建keys目录
sh
cd /etc/openvpn
mkdir keys
#把服务端要用的证书,私钥文件的一些信息,统一管理
#openvpn 到时候需要加载这些文件,
2.3-2、vpn服务端配置
1、修改openvpn服务配置文件
把之前生成的证书信息进行拷贝迁移/etc/openvpn/keys
- 服务端的crt和key
- ca的crt
- 密钥交换文件:dh2048.pem
sh
cd /etc/openvpn
cp /usr/local//easy-rsa-old-master/easy-rsa/2.0/keys/vpnserver.crt ./keys/
cp /usr/local//easy-rsa-old-master/easy-rsa/2.0/keys/vpnserver.key ./keys/
cp /usr/local//easy-rsa-old-master/easy-rsa/2.0/keys/ca.crt ./keys/
cp /usr/local//easy-rsa-old-master/easy-rsa/2.0/keys/dh2048.pem ./keys/
2、拷贝openvpn服务模板配置文件
sh
cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf /etc/openvpn
3、修改openvpn服务端配置文件server.conf
sh
#下面的keys,就是/etc/openvpn/keys目录
vim /etc/openvpn/server.conf
:set nu #设置行号
#设置传输层协议:默认udp
#35行未激活tcp,默认激活udp,看公司要求
;proto tcp
proto udp
#把78,79,80 ,85行,服务端证书的名字是vpnserver.xx
ca keys/ca.crt #根证书目录
cert keys/vpnserver.crt #服务端证书
key keys/vpnserver.key #服务端私钥
dh keys/dh2048.pem #密钥交换文件
#设置隧道接口地址:101行,可以使用默认,也可以修改
server 10.0.1.0 255.255.255.0
#设置客户端要访问的网段:141,142(这两个都没有激活)
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
#复制142一行,设置推送的给客户端的IP网段,(跟要访问的webserver的私有IP同一个网段,这样客户端才能连接上)
#配置推送路由,把私有IP推送给vpn客户端
push "route 172.16.30.0 255.255.255.0"
#244,配置后可以抵御拒绝服务攻击, 到时还是放到keys目录下(此时为未创建ta.key)
tls-auth keys/ta.key 0
#252行:加密模式
cipher AES-256-GCM
4、主机开启路由转发功能
sh
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
#执行这个命令激活内核配置文件的新配置
sysctl -p
#实现让vpn服务器具有路由器的功能,进行数据包的路由转发
5、在openvpn服务端建立ta.key文件,用来抵御服务器拒绝的攻击(dos攻击)
sh
cd /etc/openvpn/keys
openvpn --genkey --secret ta.key
6、启动openvpn服务:默认使用的端口是1194
sh
cd /etc/openvpn
#启动
openvpn --daemon --config server.conf
#验证
netstat -lntup | grep 1194
#出现下面一条:12793是vpn服务的进程id
udp 0 0 0.0.0.0:1194 0.0.0.0:* 12793/openvpn
7、使用systemctl管理vpnserver服务
sh
###关闭之前的进程
#先关闭使用6启动的进程
ps -aux | grep openvpn
#假设进程id是1367
kill 1367
###使用systemctl来管理
###服务端配置文件放到 /etc/openvpn/server.conf
#设置开机自启动
systemctl enable openvpn@server
#启动
systemctl start openvpn@server
#重启
systemctl restart openvpn@server
#停止
systemctl stop openvpn@server
#状态
systemctl status openvpn@server
#如果有多个服务端配置文件,都放到/etc/openvpn 目录下
systemctl start openvpn@配置文件名字
2.3-3、vpn客户端配置
1、编写配置openvpn客户端程序配置文件:
sh
#创建保存客户端文件信息的目录,并将客户端模板文件进行拷贝迁移
#在root目录下创建clent 目录,vpn客户端的配置存放在这里
mkdir /root/client
cd /root/client
#把客户端配置文件复制到/root/client目录下
cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/client.conf /root/client/
2、编写客户端配置文件:
sh
cd /root/client/
vi client.conf
#42和43都加上;
;remote my-server-1 1194
;remote my-server-2 1194
#新增,vpn客户端要访问的vpnserver的IP和端口
remote 192.168.236.135 1194
#88,89,90行,client改为vpnclient(当时创建时就是用这个名字),,到时候把ca和客户端证书私钥都放到/root/client 目录中,与客户端配置文件同目录即可
ca ca.crt
cert vpnclient.crt
key vpnclient.key
#116行,加密算法改为GCM,与服务端一致
cipher AES-256-GCM
3、把客户端需要的文件都复制到/root/client目录下
- vpnclient.crt、vpnclient.key、ac.crt,ta.key
sh
cp /usr/local/easy-rsa-old-master/easy-rsa/2.0/keys/vpnclient.key /root/client/
cp /usr/local/easy-rsa-old-master/easy-rsa/2.0/keys/vpnclient.crt /root/client/
cp /usr/local/easy-rsa-old-master/easy-rsa/2.0/keys/ca.crt /root/client/
cp /etc/openvpn/keys/ta.key /root/client/
4、修改客户端文件后缀名称:vpn客户端软件识别客户端配置时,只能识别.ovpn
sh
cd /root/client
mv client.conf client.ovpn
5、最后,这些文件不是放到vpnserver中,而是给win11(vpn客户端软件使用的)
三、win11安装vpn客户端软件
1、客户端程序下载地址:
https://openvpn.net/community-downloads
#选择2.4.12版本的客户端
2、选择win10版本:一路下一步就可以安装完成。
- 默认安装位置:C:\Program Files\OpenVPN
3、把vpnserver主机上的客户端配置文件下载到win11上
sh
#vpnserver就是:192.168.236.135主机(172.16.30.135)
#使用xftp连接:192.168.236.135
#进入 /root/client
#下载
ca.crt
client.ovpn
ta.key
vpnclient.crt
vpnclient.key
4、修改vpn客户端软件配置
-
双击:OpenVPNGUI 软件
-
找到电脑右下角:点击 ^
-
找到电脑加锁图标
-
-
右键点击:电脑加锁图标---> 选项
-
点击:高级
- 配置文件
- 文件夹:C:\Program Files\OpenVPN\config
- 日志文件
- 文件夹:C:\Program Files\OpenVPN\log
- 点击确定
- 配置文件
-
5、开始连接vpn服务器
- 右键:电脑加锁图标---点击:连接
-
等待几秒,图标变绿
6、查看win11的网络配置
-
网络适配器:本地连接
-
查看属性:IP是10.0.1.6
*因为在 /etc/openvpn/server.conf 配置的隧道IP网段就是10.0.1.0 #指定隧道接口地址的网段 server 10.0.1.0 255.255.255.0 #所有vpn客户端就会随机得到该网段的IP地址
四、连接测试
4.1、win11连接vpnserver私有地址
1、进入到vpnserver:192.168.236.135
-
ip add show
-
有了tun0:隧道地址
2、win11 ping 172.16.30.135(vpnserver的私有IP地址)
ping 172.16.30.135
3、说明vpn客户端与vpn服务端已经打通了。
win11 可以访问到vpn服务器的私有ip地址了。
4.2、win11连接webserver(只有内网IP地址)
1、win11 pin 172.16.30.134
ping 172.16.30.134
#显示超时
2、为什么会超时
- 此时 win11 已经可以连接到vpnserver了,数据已经转发给vpnserver
- win11的报文此时确实是能够通过vpnserver转发给到webserver(172.16.30.134)
- 但是webserver,收到消息后,其实并没有转发给vpnserver
- 因为在webserver中还确实一个路由转发规则
3、给webserver添加一条路由转发规则
sh
#进入到webserver虚拟机中
route add -net 10.0.1.0 netmask 255.255.255.0 gw 172.16.30.135
#将10.0.1.0 网段的消息转发到 vpnserver服务器(内网IP:172.16.30.135)
4、win11再次ping webserver
ping 172.16.30.134