公司内部有些内部网站需要设置安全策略只允许固定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.shOVPN_DATA="/www/dk_project/dk_app/openvpn/openvpn_7emH/openvpn"USERS="test1 test2"for USER in $USERS; doecho "正在创建用户: $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}.ovpnecho "用户 $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" inlist)echo "已创建的用户:"docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_listclients;;add)if [ -z "$2" ]; thenecho "使用方法: $0 add 用户名 [密码]"exit 1fiUSER="$2"if [ -n "$3" ]; thendocker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full "$USER"elsedocker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full "$USER" nopassfidocker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient "$USER" > "${USER}.ovpn"echo "用户 $USER 已创建,配置文件: ${USER}.ovpn";;revoke)if [ -z "$2" ]; thenecho "使用方法: $0 revoke 用户名"exit 1fidocker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn ovpn_revokeclient "$2" removeecho "用户 $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

发表评论