部署OpenVPN并使用多用户管理

引言

OpenVPN能方便我们打通内网以及保障服务的安全,但是官方部署openvpn的方式较为繁琐。

在github找到了一个star最多的openvpn部署脚本,十分便捷,特此记录。

安装

使用 github.com/angristan/o... 的openvpn安装脚本来快速部署openvpn服务器,同时他还集成了证书签发、撤销以及卸载功能。

bash 复制代码
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh
./openvpn-install.sh

执行后会打开交互终端,询问你一些相关信息,用于生成配置:

  • 首先是IP配置,如果你是配置在云服务器上,并且有公网IP,此处改成公网IP。
  • 一般不需要IPv6支持,此处选否
  • 此处按需选择OpenVPN服务端口,一般保持默认即可
  • 选择传输层协议,一般使用UDP,除非你的网络不支持
  • 选择DNS,如果没有特殊需要,保持默认即可
  • 可选是否进行数据包压缩,官方貌似不推荐,选否
  • 选择是否定制加密选项,默认的即可,除非有特殊需求 之后就会开始安装OpenVPN,并进行相关配置

安装完成后生成客户端证书,会询问你客户端名,我们填写client;由于我们采用用户管理的方式,所以不需要客户端密码

到此OpenVPN服务端架设完毕,同时证书也生成在Home目录,拷贝给客户端使用即可。

多用户管理

用户较多时我们通常使用多用户单证书的方式管理客户端,此时客户端与服务端都需要修改配置。

服务端

  • 创建密码文件 /etc/openvpn/psw-file,用户名密码空格隔开,如 user 123456
bash 复制代码
echo user 123456 > /etc/openvpn/psw-file
bash 复制代码
PASSFILE="/etc/openvpn/psw-file"
LOG_FILE="/var/log/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
  • 编辑 /etc/openvpn/server.conf 加入以下内容
conf 复制代码
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
client-cert-not-required  
username-as-common-name 

最后重启OpenVPN systemctl restsart openvpn

客户端

打开 client.ovpn ,加入一行 auth-user-pass 即可。

连接时会询问你用户名和密码,证书输入后便可登录。

相关推荐
红尘散仙4 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记5 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
会编程的土豆6 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
喵个咪6 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
basketball6166 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
qq_2518364576 小时前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
zhangxingchao7 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
IT_陈寒8 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端
ayqy贾杰9 小时前
基层管理的三板斧,在AI时代行不通了
前端·后端·团队管理
Apifox9 小时前
Apifox 5 月更新|Postman 导入优化、Runner 支持非 root 运行、请求代码自动带鉴权
前端·后端·安全