openvpn使用
openvpn使用
参考:
- https://blog.csdn.net/u012073617/article/details/143088900
- https://blog.csdn.net/XLBYYDS/article/details/141145409
- https://www.bilibili.com/video/BV1TW4y117sQ?spm_id_from=333.788.videopod.episodes&vd_source=3ae03810e5d4ba6e6b93c5edd6c76912&p=2
- https://www.uqugu.com/blog/article/forward-tun0-to-eth0-using-iptables-nat/
VPN说明
虚拟专用网络的诞生
internet不安全,企业专线又太贵,而且不能随地用,不灵活,vpn技术就可以很好的解决这个问题
虚拟专用网络介绍
VPN(全称Virtual Private Network)虚拟专用网络,是依靠ISP和其他的NSP,在公共网络中建立专用的数据通信网络的技术;
可以为企业之间或者个人与企业之间提供安全的数据传输隧道服务。
在VPN中任意两点之间的连接并没有传统专网所需的端到端的物理链路,而是利用公共网络资源动态组成的;
可以理解为通过私有的隧道技术在公共数据网络上模拟出来的和专网有同样功能的点到点的专线技术;
所谓虚拟是指不需要去拉实际的长途物理线路,而是借用了公共Internet网络实现。为了便于理解VPN概念,利用一个网络示意图进行说明:
优点:
- 安全性高:
在远端用户、驻外机构、合作伙伴、供应商与公司总部之间建立可靠的连接,保证数据传输的安全性。
这对于实现电子商务或金融网络与通讯网络的融合特别重要。
- 费用低廉:
利用公共网络进行信息通讯,企业可以用更低的成本连接远程办事机构、出差人员和业务伙伴。
- 支持移动:
支持出差VPN用户在任何时间、任何地点的移动接入,能够满足不断增长的移动业务需求。
- 可扩展性:
由于VPN为逻辑上的网络,物理网络中增加或修改节点,不影响VPN的部署。
虚拟专用网络分类
01 根据VPN建设单位不同进行划分:
- 租用运营厂商专线搭建VPN:
运营商的虚拟专线网络大多数都是使用MPLS VPN
;企业通过购买运营商提供的VPN专线服务实现总部和分支机构间的通信需求;VPN网关为运营商所有。
https://blog.csdn.net/LiMITV/article/details/134961629
- 企业内部自建环境搭建VPN:
企业内部自建基于Internet环境的vpn网络,常见的有IPSec VPN、GRE VPN、L2TP VPN、SSL VPN
企业自己购买VPN网络设备,搭建自己的VPN网络,实现总部和分支机构的通信,或者是出差员工和总部的通信;
02 根据VPN组网方式不同进行划分:
- 远程访问VPN:
这种方式适用于出差员工拨号接入VPN的方式,员工可以在只要有Internet的地方都可以通过VPN接入访问企业内网资源。最常见类型有:SSL VPN、L2TPVPN
- 站点之间VPN:
这种方式适合用于企业两个局域网互通的情况;例如企业的分支机构访问总部;最常见类型有:MPLS VPN、IPsecVPN
03 根据VPN工作网络层次进行划分:
应用层VPN:SSLVPN
网络层VPN:IPseC VPN、GREVPN
链路层VPN:L2TP2 VPN、PPTPVPN
隧道技术说明
VPN技术的基本原理其实就是用的隧道技术;
就类似于火车/地铁的轨道一样,从A站点到B站点都是直通的,不会堵车。对于乘客而言,就是专车;
隧道技术其实就是对传输的报文进行封装,利用公网建立专用的数据传输通道,从而完成数据的安全可靠传输;
省略了nat技术,将需要发送的数据进行封装,通过隧道到对端,对端再解封装。
环境搭建
主机 | 内网 | 外网 |
---|---|---|
CentOS 7 (openvpn服务端) | 172.16.30.102 | 192.168.174.142 |
Windows10(客户端) | N/A | 192.168.177.199 |
CentOS7(内网web服务器) | 172.16.30.101 | N/A |
服务端
准备一台CentOS 7虚拟机,配置双网卡
在CentOS 7上安装一个NetWorkManager,使用nmtui来配置网卡,配置之前的ip a看下网卡名字
可以看到ens36网卡是没有地址的
添加以太网卡,不用配网关
确认即可,然后重启网络服务
systemctl restart network |
客户端
因为vm的虚拟网卡8是nat模式,这里我就直接用本机的环境测试了,ping的通服务端即可,然后这里是ping不通内网网段的
web端
这里可以直接克隆服务端的ctos,然后修改网卡配置
进入系统进行同样的ip配置,记得克隆完不要一起启动,容易导致ip冲突,这里配置完可能需要重启才会修改网卡的ip地址
可以看到内网卡是通的,ping不通外网,简易的搭建一个web网站测试一下
记得提前关闭SELinux以及防火墙
python -m SimpleHTTPServer 80 //python2 |
在服务端是可以访问的,试试本机的windows环境
建立隧道
数据通过隧道传到openvpn服务端,openvpn服务端转发数据给web服务器,web服务器返回的数据,再通过openvpn服务端经隧道转发给客户端
操作系统基础优化配置
系统默认的selinux安全策略优化
# 临时关闭SELinux策略 |
系统默认防火墙福务优化说明
# 查看防火墙状态 |
系统软件下载优化方法
系统基础软件程序下载安装
# 企业应用基础工具程序 |
tree:
- 这是一个递归地列出目录内容的命令行工具,它会以树状图的形式显示目录结构,非常适合查看文件和文件夹的层级关系。
nmap:
- 网络映射器(Network Mapper),这是一个开源的网络扫描和安全审计工具,用于发现网络上的设备,检测开放的端口,确定运行在网络设备上的服务及其版本信息,检测潜在的安全漏洞等。
lrzsz:
- 这是一个用于在Unix和类Unix系统之间传输文件的工具集,包括
rz
(接收文件)和sz
(发送文件)两个命令。它们通过串行端口或调制解调器进行文件传输。
- 这是一个用于在Unix和类Unix系统之间传输文件的工具集,包括
dos2unix:
- 这个工具用于将DOS/Windows风格的文本文件格式转换为Unix风格的文本文件格式,主要改变文件中的换行符(CR LF转换为LF)。
nc(netcat):
- 这是一个功能强大的网络工具,用于阅读和写入数据,可用于创建网络连接、监听端口、传输文件等。它常被称为“网络瑞士军刀”。
lsof:
- 列出打开的文件(List Open Files),这是一个列出当前系统打开文件的工具。它可以用来查看哪些进程打开了哪些文件,包括常规文件、目录、网络文件系统、流管道等。
wget:
- 这是一个非交互式的文件下载工具,可以从网络上下载文件。它支持HTTP、HTTPS和FTP协议,可以递归下载,支持断点续传等。
psmisc:
- 这个包提供了一些额外的进程管理工具,最著名的是
pstree
命令,它可以以树状图的形式显示进程之间的父子关系,以及fuser
命令,用于查找访问特定文件、套接字或文件系统的进程。
- 这个包提供了一些额外的进程管理工具,最著名的是
net-tools:
- 这是一个网络工具包,包含了许多用于网络配置和诊断的工具,如
ifconfig
(用于配置和显示Linux内核中网络接口的网络参数)、netstat
(显示网络端口和路由表信息)、route
(显示和操作路由表)等。
- 这是一个网络工具包,包含了许多用于网络配置和诊断的工具,如
bash-completion:
- 这是一个为Bash shell提供自动补全功能的软件包。它允许用户在输入命令时自动补全命令、文件名、变量名等,提高命令行的效率和易用性。
vim-enhanced:
- 这是Vim编辑器的一个增强版,包含了额外的功能和插件,如语法高亮、代码折叠、自动缩进等,使得Vim更加强大和易于使用。
git:
- 这是一个分布式版本控制系统,用于跟踪代码变更、协调多人协作开发。Git是目前世界上最流行的版本控制系统,被广泛用于软件开发项目中。
证书制作
根据之前的openvpn软件工作原理说明,在部署虚拟专用网络服务之前,需要进行相关证书文件制作;
证书文件制作过程,需要使用到easy-rsa.zip工具进行制作证书。
制作证书工具下载:https://github.com/OpenVPN/easy-rsa将证书制作
工具上传到主机中:
rz -y |
编辑vars文件,这个文件是一些个人信息,用来表明身份的
# 改最底下的这部分就行 |
生产根证书文件和私钥文件
[root@localhost 2.0]# ./build-ca |
这里会让我们填写个人信息,但我们刚刚在vars文件里填写过了,所以直接回车使用默认就行,然后我们可以查看keys目录下有没有新生产的私钥和证书
[root@localhost 2.0]# ls -l keys/ |
生产服务端证书和私钥文件
[root@localhost 2.0]# ./build-key-server youzipii //youzipii可任意换 |
同样回车就行,password看这里,我这里默认为空,不影响,最后输两个y确认一下即可,然后去查看keys目录下有没有服务端证书
[root@localhost 2.0]# ll keys/ |
生成客户端证书和密钥文件
[root@localhost 2.0]# ./build-key client //客户端我就用client了,也是可以随意替换的 |
同样是一直回车,最后输入两个y确认即可,然后我们去查看下客户端的证书是否生成
[root@localhost 2.0]# ll keys/ |
可以看到同样生成了
生成密钥交换文件信息(Diffie-Hellman密钥交换算法)
这一步比较耗时间
root@localhost 2.0]# ./build-dh |
这会在keys目录下生成一个密钥文件
[root@localhost 2.0]# ll keys/ |
最终会生成重要的7哥文件,ca2个、server2个、client2个、DH一个。
OpenVPN服务配置
如果之前换源,一起换了epel源就可以直接在系统里安装下载了
[root@localhost yum.repos.d]# yum install -y openvpn |
最好是服务端和客户端版本保持一致
编写修改openvpn福务配置文件
# 建立存好openvpn服务加载证文件目录 |
编辑openvpn服务模板配置文件
[root@localhost openvpn]# vim server.conf |
tips: 命令行模式下/+要搜索的字符串,回车后可以快速查询
将相关配置文件替换为自己生成的证书和密钥
tips: vim 命令行模式下 :set nu可以显示行号
自定义隧道地址,我这里用默认的10.8.0.0
添加路由,我们可以到客户端看看,路由表是没有这条的
tips:yy复制,p粘贴
这里还有一个用来抵御DOS攻击的参数,这个文件目前
最后2.4版本后加密模式不能用CBC,得改成GCM
保存并退出,然后设置开启openvpn服务器路由转发
# 启用路由转发功能 |
建立ta.key文件,记得修改配置文件,不然启动不了
[root@localhost keys]# pwd |
遇到报错了
[root@localhost openvpn]# systemctl status openvpn@server.service |
刚刚生成ta.key没有配置进去
启动运行openvpn服务程序
[root@localhost openvpn]# openvpn --daemon --config server.conf |
因为第二天重启了虚拟机,临时配置的selinux策略恢复了,openvpn挂了
重新配置一下
setenforce 0 |
OpenVPN客户端
编写配置openvpn客户但程序配置文件
先在服务端创建一个用于汇总客户端信息的文件夹
[root@localhost ~]# mkdir client |
添加外网网卡的IP
修改加密方式
导出保存openvpn客户端证书相关文件
汇总拷贝整理客户端相关证书文件 |
将所有openvpn客户端所需文件数据打包并下载保存
[root@localhost ~]# pwd |
下载windows使用的客户端
下载好对应的文件,一直下一步即可
运行启动客户端软件程序,并将之前下载的客户端相关证书与配置文件导入到客户端软件程序中:
修改客户端程序设置中的高级选项配置信息,双击是不会跳出来的,右键右下角的隐藏图标才可以,选择选项
然后再右键这个图标,选择client节点,选择连接
在ipconfig中也可以看到配置
我们进入网络适配器看看具体信息
那说明我们服务端也该有个ip才对
测试连通性,以及问题解决
- 客户端
- 10.8.0.6
- 服务端
- 10.8.0.1
- 内网卡: 172.16.30.102
- 内网主机:172.16.30.101
客户端ping服务端
ping不通内网的web服务器。。。
试试服务端ping客户端
ping不通客户端的地址,不懂为什么,试着换了下vm的windows,就可以了
win-ipconfig
服务端配置nat转发
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -j MASQUERADE |
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ens36 -j MASQUERADE
- 这个命令添加了一条规则到
nat
表的POSTROUTING
链。 -A
表示追加(Append)规则。-s 10.8.0.0/24
指定源地址为10.8.0.0/24
子网。-o ens36
指定输出接口为ens36
。-j MASQUERADE
表示使用MASQUERADE
目标,这是一种特殊的 NAT 模式,用于动态 IP 地址转换,通常用于拨号或移动网络。
- 这个命令添加了一条规则到
iptables -I FORWARD 1 -i tun0 -o ens36 -j ACCEPT
- 这个命令向
FORWARD
链插入(-I
表示插入)了一条规则,位置在链的第1条。 -i tun0
指定输入接口为tun0
。-o ens36
指定输出接口为ens36
。-j ACCEPT
表示如果匹配这条规则,则接受(ACCEPT)数据包。
- 这个命令向
iptables -I FORWARD 1 -i ens36 -o tun0 -j ACCEPT
- 这个命令同样向
FORWARD
链插入了一条规则,位置在链的第1条。 -i ens36
指定输入接口为ens36
。-o tun0
指定输出接口为tun0
。-j ACCEPT
表示如果匹配这条规则,则接受(ACCEPT)数据包。
- 这个命令同样向
但还是ping不通,但ping 10.8.0.1是通的,监听一下网卡tun0看看
[root@localhost openvpn]# tcpdump -i tun0 |
可以看到是有数据包过来的,应该是准发规则没做好,搜了下,找到 一篇文章,重新配置过nat,就可以了
查看配置
# 查看 FORWARD |
功能测试
之前不是搭建了简单的web站点在30.101,我们现在客户端上访问试试
可以看到也是成功访问到了