部署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 即可。

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

相关推荐
程序员爱钓鱼14 小时前
Python编程实战 · 基础入门篇 | Python的缩进与代码块
后端·python
earthzhang202117 小时前
第3讲:Go垃圾回收机制与性能优化
开发语言·jvm·数据结构·后端·性能优化·golang
thinktik19 小时前
AWS EKS 集成Load Balancer Controller 对外暴露互联网可访问API [AWS 中国宁夏区]
后端·kubernetes·aws
追逐时光者19 小时前
将 EasySQLite 解决方案文件格式从 .sln 升级为更简洁的 .slnx
后端·.net
驰羽20 小时前
[GO]GORM 常用 Tag 速查手册
开发语言·后端·golang
AntBlack20 小时前
虽迟但到 :盘一盘 SpringAI 现在发展得怎么样了?
后端·spring·openai
ss27321 小时前
手写Spring第4弹: Spring框架进化论:15年技术变迁:从XML配置到响应式编程的演进之路
xml·java·开发语言·后端·spring
舒一笑1 天前
🚀 PandaCoder 2.0.0 - ES DSL Monitor & SQL Monitor 震撼发布!
后端·ai编程·intellij idea
Java中文社群1 天前
服务器被攻击!原因竟然是他?真没想到...
java·后端
helloworddm1 天前
Orleans 流系统握手机制时序图
后端·c#