小白Docker搭建OpenVPN 5分钟快速上手
公司内部有些内部网站需要设置安全策略只允许固定ip访问,就想着搭建一个vpn服务器作为出口ip,然后需要限制ip的地方都添加vpn服务器ip进行放行(如果开发本地调试需要设置请求ip白名单的第三方接口,也可用这种办法来固定下出口ip)。
网上很多OpenVPN的教程看起来比较老了,然后配置一大堆东西直接劝退,使用dcoker部署新版openvpn其实还是很简单的。
- Debain12 + 宝塔V11.5
- 宝塔已安装Docker(设置加速地址 https://docker.1ms.run 后重启Docker)
- 云服务器、宝塔安全配置放行1194端口

1、在宝塔Docker应用中搜索openvpn并进行安装。

2、修改镜像生成的.ovpn配置文件

增加禁止压缩配置 comp-lzo no 保存后,就可以下载下来给openvpn客户端使用了。

3、客户端导入.ovpn配置并连接
windows客户端打开软件后,在右下角托盘里面右键图标进行导入;导入成功后可进行【连接】。

连接成功托盘图标会变成绿色,如果连接失败请检查云服务器安全组、宝塔端口安全这些是否开放!

连接成功↓


上面安装完OpenVPN后已经有默认用户了,如果还要添加用户可以继续创建用户证书(每个人一个证书),先在宝塔后台确认下面截图的OVPN_DATA与OVPN_CONTAINER值脚本里面会用到

create_users.sh这个脚本会循环创建test1用户、test2用户(注意OVPN_DATA改成你实际的路径)。
#!/bin/bash
# create_users.sh
OVPN_DATA="/www/dk_project/dk_app/openvpn/openvpn_7emH/openvpn"
USERS="test1 test2"
for USER in $USERS; do
echo "正在创建用户: $USER"
# 生成客户端证书
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full $USER nopass
# 导出配置文件
docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient $USER > ${USER}.ovpn
echo "用户 $USER 配置文件已生成: ${USER}.ovpn"
echo "最终使用需要在各.ovpn配置文件的remote-cert-tls server所在下一行增加comp-lzo no以禁用压缩"
done
最终会生成.ovpn配置文件(记得增加禁止压缩配置comp-lzo no),将其分发给需要连接的客户端导入连接即可。


manage_openvpn.sh综合管理脚本(需修改OVPN_DATA、OVPN_CONTAINER),status这种方式 查看在线状态好像会有延时,客户端已经断开了还是会显示一段时间。这个脚本创建的用户.ovpn配置文件也需要手动添加配置comp-lzo no
#!/bin/bash
# OpenVPN 用户管理脚本
OVPN_DATA="/www/dk_project/dk_app/openvpn/openvpn_7emH/openvpn"
# OVPN_CONTAINER="openvpn"
OVPN_CONTAINER="q18qinzdjnximb"
case "$1" in
list)
echo "已创建的用户:"
docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_listclients
;;
add)
if [ -z "$2" ]; then
echo "使用方法: $0 add 用户名 [密码]"
exit 1
fi
USER="$2"
if [ -n "$3" ]; then
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full "$USER"
else
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full "$USER" nopass
fi
docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient "$USER" > "${USER}.ovpn"
echo "用户 $USER 已创建,配置文件: ${USER}.ovpn"
;;
revoke)
if [ -z "$2" ]; then
echo "使用方法: $0 revoke 用户名"
exit 1
fi
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn ovpn_revokeclient "$2" remove
echo "用户 $2 访问权限已撤销"
;;
status)
echo "在线用户:"
docker exec $OVPN_CONTAINER cat /tmp/openvpn-status.log 2>/dev/null || echo "状态文件不存在"
;;
logs)
docker logs -f $OVPN_CONTAINER
;;
restart)
docker restart $OVPN_CONTAINER
;;
*)
echo "使用方法: $0 {list|add|revoke|status|logs|restart}"
echo " list - 列出所有用户"
echo " add - 添加新用户"
echo " revoke - 撤销用户访问"
echo " status - 查看连接状态"
echo " logs - 查看日志"
echo " restart - 重启服务"
;;
esac

发表评论