0


OpenVPN实现安全的内网互通

引言

什么是OpenVPN

在这里插入图片描述

维基百科是这么介绍的:OpenVPN是一个用于创建虚拟私人网络加密通道的软件包,最早由James Yonan编写。OpenVPN允许创建的VPN使用公开密钥、电子证书、或者用户名/密码来进行身份验证。 它大量使用了OpenSSL加密库中的SSL/TLS协议函数库。

原作者: James Yonan

开发者: OpenVPN 项目 / OpenVPN Inc

当前版本: : 2.6.9 (2024年2月13日;稳定版本);

源代码库: github.com/OpenVPN

类型: VPN

系统平台: Windows XP或以上; OS X 10.8或以上; Android 4.0或以上; iOS 6或以上; Linux; *BSD;

网站: openvpn.net

安装OpenVPN

  1. 安装客户端
  2. 安装套件

服务端安装OpenVPN、EasyRSA

  1. 使用命令安装OpenVPN apt-get install openvpn -y
  2. 获取EasyRSA

wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.1.7/EasyRSA-3.1.7.tgz

若无网络,也可以下载之后,再上传到服务器。要是访问github失败,也可以通过百度云下载

百度云链接:https://pan.baidu.com/s/1T3SoiDwsP6cE9UaRXnSjww
提取码:r141
–来自百度网盘超级会员V6的分享

若连接失效,请在评论回复

在这里插入图片描述

生成证书

server----
  1. 进入EasyRSA-3.1.7,并修改相关参数
[root@aliyun /etc/openvpn]$ cd EasyRSA-3.1.7
[root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ cp vars.example vars
[root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ vim vars
...省略部分内容...
# In how many days should the root CA key expire?# 设置根证书有效期为100年
set_var EASYRSA_CA_EXPIRE       36500# In how many days should certificates expire?# 设置服务端证书有效期为10年
set_var EASYRSA_CERT_EXPIRE     3650...省略部分内容...

在这里插入图片描述
在这里插入图片描述

  1. 创建新的pki[root@aliyun /etc/openvpn/EasyRSA-3.1.7]$./easyrsa init-pki在这里插入图片描述
  2. 生成CA根证书[root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa build-ca nopass在这里插入图片描述证书文件:/etc/openvpn/EasyRSA-3.1.7/pki/ca.crt
  3. 生成server端证书和私钥# 生成签名请求和私钥[root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa gen-req server nopass# 签发证书[root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa sign server server

在这里插入图片描述
在这里插入图片描述

  • req: /etc/openvpn/EasyRSA-3.1.7/pki/reqs/server.req
  • key: /etc/openvpn/EasyRSA-3.1.7/pki/private/server.key
  • crt: /etc/openvpn/EasyRSA-3.1.7/pki/issued/server.crt

在OpenVPN环境中的EasyRSA工具集中,

./easyrsa gen-req

./easyrsa build-server-full

这两个命令执行的任务不同,它们分别用于不同的证书管理阶段:

  1. ./easyrsa gen-req [name]: - 这个命令是用来生成一个证书签名请求(CSR)和相应的私钥文件。- 当你需要为某个实体(如服务器或客户端)创建一个新的证书时,会运行这个命令,并提供一个唯一的名称(例如,vnserver)。- 它不会直接生成证书,而是产生一个 CSR 文件,这个文件可以被 CA(证书颁发机构)用来签发证书,同时也会生成与之对应的私钥文件,私钥由请求者保留并保密。
  2. ./easyrsa build-server-full [name]: - 这个命令则是用于在一个步骤中快速创建一个完整的服务器证书链,包括: - 生成服务器私钥- 创建 CSR- 签发服务器证书(由本地或已配置的CA签署)- 可能还包括创建DH参数文件或者生成CA证书及相关的中级证书(取决于EasyRSA版本和配置)- 相对于单独的gen-req命令,build-server-full提供了一个更便捷的方式,它一步到位地完成了从生成密钥对到获得签名证书的所有流程,特别适用于新建OpenVPN服务器场景。

总结来说,如果你只是想生成一个CSR以便提交给外部CA签名,那么使用

gen-req

;而如果你想在本地完成整个服务器证书的生成和签名过程,直接使用

build-server-full

更为方便。在OpenVPN环境中,通常会使用

build-server-full

来快速创建用于OpenVPN服务的自签名服务器证书。

  1. 生成Diffie-Hellman算法需要的密钥文件[root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa gen-dh

在这里插入图片描述

  • dh: /etc/openvpn/EasyRSA-3.1.7/pki/dh.pem
  1. 生成用于防DDOS攻击和TLS攻击文件[root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ openvpn --genkey tls-auth ta.key在这里插入图片描述
  2. 复制证书文件到server目录下[root@aliyun /etc/openvpn/server]$ cp /etc/openvpn/EasyRSA-3.1.7/pki/dh.pem /etc/openvpn/server/cp /etc/openvpn/EasyRSA-3.1.7/pki/reqs/server.req /etc/openvpn/server/cp /etc/openvpn/EasyRSA-3.1.7/pki/private/server.key /etc/openvpn/server/cp /etc/openvpn/EasyRSA-3.1.7/pki/issued/server.crt /etc/openvpn/server/cp /etc/openvpn/EasyRSA-3.1.7/pki/ca.crt /etc/openvpn/server/cp /etc/openvpn/EasyRSA-3.1.7/ta.key /etc/openvpn/server
client
  1. 生成客户端证书> 有几个客户端就需要创建几个证书,tom是我客户端的名称[root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa gen-req tom nopass[root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa sign client tom
  • req: /etc/openvpn/EasyRSA-3.1.7/pki/reqs/tom.req
  • key: /etc/openvpn/EasyRSA-3.1.7/pki/private/tom.key
  • crt: /etc/openvpn/EasyRSA-3.1.7/pki/issued/tom.crt
  1. 复制证书到tom目录下
[root@aliyun /etc/openvpn]$ mkdir tom
[root@aliyun /etc/openvpn]$ cp /etc/openvpn/EasyRSA-3.1.7/pki/reqs/tom.req /etc/openvpn/tom
cp /etc/openvpn/EasyRSA-3.1.7/pki/private/tom.key /etc/openvpn/tom
cp /etc/openvpn/EasyRSA-3.1.7/pki/issued/tom.crt /etc/openvpn/tom
cp /etc/openvpn/EasyRSA-3.1.7/pki/ca.crt /etc/openvpn/tom
cp /etc/openvpn/EasyRSA-3.1.7/ta.key /etc/openvpn/tom

在这里插入图片描述

配置文件

  1. 生成OpenVPN服务端配置文件
[root@aliyun /etc/openvpn]$ cat> /etc/openvpn/server/server.conf <<-EOF
#端口号
port 1194
#开启TCP协议,关闭UDP协议
proto tcp
#dev tun创建路由隧道,dev tap将创建一个以太网隧道
dev tun
#修改CA证书、服务端证书和服务端私钥key的文件名
ca ca.crt
cert server.crt
key server.key
#Diifle hellman文件指向。如果在建立证书时使用2048的话就用2048
dh dh.pem
#给接入的Client分配的IP地址段,注意不要和服务内网网段重合
server 10.8.0.0 255.255.255.0
#客户端与客户端之间支持通信
client-to-client
#维持客户端和虚拟IP的联系。在OpenVPN重启时,再次连接的客户端依然被分配和以前一样的IP地址
ifconfig-pool-persist ipp.txt
#以下这句使得客户端能访问服务器后面的子网机器。比如服务器子网为172.29.242.142,则添加如下内容
push "route 172.29.242.0 255.255.255.0"
#分别指定发送间隔和接收间隔。用于设置OpenVPN的心跳包。此参数可保持OpenVPN连接的稳定性
keepalive 10 120
#最多允许200个客户端连接
max-clients 200
#为防止遭到DDoS攻击,生成ta.key文件,并拷贝到服务端和每个客户端
#服务端0,客户端1
tls-auth ta.key 0
#设置重新连接时保留密钥。可避免重新连接时重新生成密钥
persist-key
#检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
persist-tun
#指定OpenVPN输出连接状态的文件,可查看OpenVPN的连接状态
status /etc/openvpn/logs/openvpn-status.log
#记录日志,每次重启OpenVPN后追加log信息
log-append /etc/openvpn/logs/openvpn.log
#重复日志记录限额
mute 20
#指定日志文件的记录详细级别,0-9,等级越高日志内容越详细
verb 3
#和keys连接VPN,一定要打开这个选项,否则只允许一 个人连接VPN
duplicate-cn
#支持密码认证-允许使用自定义脚本
script-security 3
#支持密码认证-指定认证脚本
auth-user-pass-verify /etc/openvpn/check.sh via-env
#支持密码认证-用户密码登陆方式验证
username-as-common-name
EOF
  1. 编写脚本检查文件和密码文件
# 创建认证文件[root@aliyun /etc/openvpn]$ cat> /etc/openvpn/check.sh <<-EOF
#!/bin/bash

PASSFILE="/etc/openvpn/user_passwd.txt"   #密码文件 用户名 密码明文
LOG_FILE="/etc/openvpn/logs/openvpn-password.log"  #用户登录情况的日志
TIME_STAMP=`date"+%Y-%m-%d %T"`

if [ ! -r "${PASSFILE}" ]; then
    echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
    exit 1
fi

CORRECT_PASSWORD=`awk'!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}'    ${PASSFILE}`

if [ "${CORRECT_PASSWORD}" = "" ]; then
    echo "${TIME_STAMP}: User does not exist: username=\"${username}\",password=\"${password}\"." >> ${LOG_FILE}
    exit 1
fi

if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
    echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
    exit 0
fi

echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}

exit 1
EOF# 对check.sh授予执行权限[root@aliyun /etc/openvpn]$ chmod u+x check.sh

# 创建密码文件[root@aliyun /etc/openvpn]$ cat> /etc/openvpn/user_passwd.txt <<-EOF
tom 123456
EOF
  1. 服务端开启ip转发

在这里插入图片描述

  1. 启动server端
[root@aliyun /etc/openvpn/server]$ openvpn --config server.conf

客户端安装OpenVPN

  1. 安装OpenVPN
yum install openvpn -ycd /etc/openvpn
# 将服务端创建的证书文件拉取过来scp-P2345-r [email protected]:/etc/openvpn/tom ./

在这里插入图片描述

  1. 创建配置文件client.conf
[root@k3s-main openvpn]# cat > /etc/openvpn/tom/client.conf <<-EOF#指定当前VPN是客户端
client
#使用tun隧道传输协议
dev tun
#使用tcp协议传输数据
proto tcp
#OpenVPN服务器IP地址端口号
remote 8.130.96.170 1194#指定CA证书的文件路径
ca ca.crt
#指定当前客户端的证书文件路径
cert tom.crt
#指定当前客户端的私钥文件路径
key tom.key
#断线自动重新连接,在网络不稳定的情况下非常有用
resolv-retry infinite
#不绑定本地特定的端口号
nobind
#通过keepalive检测超时后,重新启动PN,不重新读取keys,保留第一次使用的key
persist-key
#检测超时后,重新启动PN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
persist-tun
#生成防御DDos破坏的文件。客户端配置为
tls-auth ta.key 1#指定日志文件的记录详细级别,0-9,等级越高日志内容越详细
verb 3#使用用户名密码登录openvpn服务器
auth-user-pass
EOF
  1. 启动客户端
[root@k3s-main tom]# openvpn --config client.conf

在这里插入图片描述

  1. 客户端ping服务端测试

在这里插入图片描述

问题反馈

若对文中有任何的疑问,或者需要帮助可以通过以下方式进行反馈

更多内容请关注微信公众号:萱蘇的运维日常

标签: 安全 linux 网络

本文转载自: https://blog.csdn.net/qq_43629484/article/details/137016421
版权归原作者 萱蘇的运维日常 所有, 如有侵权,请联系我们删除。

“OpenVPN实现安全的内网互通”的评论:

还没有评论