Docker
服务搭建
Docker-笔记类
Docker-Wiki.js
Docker-Trilium(个人云笔记)
Docker-MrDoc(觅思文档)
Docker-MinDoc(文档管理系统)
Docker-Wiz(为知笔记)
Docker-Wizard(开源文档管理系统)
Docker-siyuan(思源笔记)
Docker-Athensresearch(雅典)
Docker-Logseq(日志序列)
Docker-Joplin Server(需搭配APP)
MarkDown-进阶
Docker-AFFiNE(白板文档)
Docker-Obsidian(黑曜石)
Html-文章保护
Docker-Memos(备忘录)
Docker-Etherpad(实时协作在线编辑器)
Docker-AppFlowy
Docker-DokuWiki(维基)
Docker-小书匠
Docker-MD(微信 Markdown编辑器)
Docker-Halo(个人博客)
闲置宽带利用
甜糖
网心云
点心云
Docker-JS TOOL(京豆)
Docker-Gitea(代码托管平台)
Git使用小技巧
Git-命令推送
Git-常用命令
Docker-CentOS
Docker-iperf3(网络测速)
Docker-QingLong(青龙面板)
🚫青龙-NolanJDCloud
青龙-Ninja
青龙-京豆
青龙-互助码
青龙-WxPusher(通知)
青龙-其他脚本
青龙-bilibili
青龙-短视频金币
青龙-常见问题
青龙-迁移
青龙-快速部署
Docker-EMQX(MQTT服务器)
EMQX-高级操作
Docker-Home Assistant
Docker-RustDesk(远程桌面)
Docker-邮箱系统
Docker-SRS(直播服务器)
Docker-Bitwarden(密码服务器)
Bitwarden-TOTP(双因素认证2FA)
Docker-书签/导航
Docker-OneNav
Docker-Flare
Docker-WebStack
Docker-GEEKAPE
Docker-nav(发现导航)
Docker-Linkding(网络书签)
Docker-Wallabag(网络书签)
Docker-Benotes(书签)
Docker-LyLme Spage(六零导航页)
Docker-Homarr(浏览器仪表板)
Docker-Sun-Panel
Docker-Nginx
Docker-nginxWebUI(反向代理)
Docker-Nginx Proxy Manager
Docker-Nginx Config(配置生成器)
Docker-Nginx UI
Nginx-配置详细说明
PHP扩展
Nginx-安全
Nginx-Shell管理脚本
Docker-Redis
Docker-Jupyter(Python在线环境)
JupyterHub(支持课程管理)
Jupyter(单用户)
Jupyter-OpenCV
JupyterHub-自构建
Docker-LiveTorrent(磁力链在线解析)
Docker-OpenVPN
OpenVPN-配置注释
OpenVPN-基础部署
OpenVPN-一键脚本部署
OpenVPN-访问内部设备
OpenVPN-ovpn-admin(WebUI)
Docker-Switch联机
Docker-网站统计
Docker-Umami
Docker-Matomo
Docker-IPsecVPN
Docker-Zerotier(虚拟组网)
ZeroTier-Planet(星球)
Zerotier-Moons(月亮)
Zerotier-伪根服务器(修改UI)
ZeroTier-局域组网
Docker-Linux
Docker-Screeps 服务器
Docker-Harbor(Docker 镜像服务器)
Harbor-镜像迁移
docker-mirror(镜像转存工具)
Docker-Reader(网文阅读器)
Docker-聊天类
Docker-Rocket.chat(IM聊天系统)
Docker-Fiora(二次元聊天室)
Docker-Mattermost(开发者聊天室)
Docker-唐僧叨叨
Docker-Mastodon
Docker-VoceChat
Docker-blogChat(在线聊天室)
Docker-NASTools(影音库工具)
Docker-Lottery(抽奖程序)
Docker-VSCode Web版
Docker-临时分享类
Docker-PasteMe(自销毁小纸条)
Docker-PasteBin(临时分享)
Docker-Pingvin Share(文件分享)
Docker-Snapdrop(局域网传输)
Docker-FileCodeBox(文件快递柜)
Docker-microbin(临时分享)
Docker-PairDrop(局域网传输)
Docker-FastSend(文件快传)
Docker-internal-chat(局域网文字/文件)
Docker-Enclosed(私密安全笔记)
Docker-任务管理类
Docker-TAIGA(看板)
Docker-Focalboard(看板)
Docker-DooTask(轻量级任务管理工具)
Docker-Vikunja(待办事项)
Docker-Tasks.md(任务管理板)
Docker-Send(私密文件分享)
Docker-ScreeGo(在线多人屏幕分享)
Docker-ChatGPT
ChatGPT(伪)-部署
ChatGPT-未测试项目
ChatGPT-ChatGPT Web
🚫ChatGPT-ChatGPT Vercel
🚫ChatGPT-PandoraNext(潘多拉)
🚫ChatGPT-PandoraNext-Helper(Token管理)
Docker-kkFileView(文件在线预览)
Docker-问卷考试类
Docker-学之思(开源考试系统)
Docker-文字识别类(OCR)
Docker-OCR(Python)
Docker-Paperless-ngx(无纸化)
Docker-短链类
Docker-Yourls(短链)
Worker短链(CloudFlare)
Docker-GreaterWMS(仓管系统)
Docker-内网穿透
Docker-Frp
Docker-NPS
Frp-客户端配置工具
Docker-Frp-Panel
Docker-OpenP2P
Docker-网盘
Docker-AList(云盘直链)
🚫Docker-FileRun(个人网盘)
Docker-腾飞WebOS
Docker-Cloudreve(支持WebDAV子账户)
Docker-Seafile
Docker-ZFile
Docker-Dufs(轻量文件服务器)
Docker-FileGator
Docker-SSH/远程桌面
Docker-Guacamole(远程桌面)
Docker-Nexterm(服务器管理软件)
Docker-Sshwifty(SSH&Telnet客户端)
Docker-Next Terminal(Web终端)
Docker-CF_Tunnels(隧道)
Docker-RouYi_WMS
Docker-图形化管理工具
Docker-Portainer(图形化管理工具)
Docker-SimpleDocker(Docker控制面板)
Docker-Easypanel(易面板)
Docker-DockerUI(国内图形化)
Docker-1Panel
Docker-宝塔
Docker-lazydocker(Shell UI)
Docker-⭐DPanel(可视化管理面板)
Docker-⭐Dockge(docker-compose管理器)
Docker-Dokploy(PaaS)
Docker-UpSnap(局域网唤醒)
Docker-Watchtower(自动更新)
Docker-RunnerGo(全栈测试)
Docker-Web工具箱
Docker-Stirling-PDF(PDF工具)
Docker-IT Tools(IT工具箱)
Docker-Reference(速查神器)
Docker-Photopea(在线PS)
Docker-miniPaint(在线PS)
Docker-Morphos(文件转换)
Docker-证件照片排版
Docker-网易云解锁
Docker-nondanee_UnblockNeteaseMusic
Docker-UnblockNeteaseMusic
Docker-LX Music_Sync(数据同步)
Docker-在线白板类
Docker-Wbo(协作白板)
Docker-Excalidraw+(在线白板)
Docker-tldraw
Docker-Cook(今天吃什么)
Docker-Android
Docker-QD(自动签到)
QD-使用说明
Docker-消息推送(通知)
Docker-Wecom酱
Docker-Gotify(消息通知)
Docker-WeChatBot(微信机器人)
Docker-lumen项目部署
Docker-简历构建器
Docker-Open Resume
Docker-Reactive Resume
Docker-照片备份
Docker-Immich
Docker-vlmcsd(KMS)
Docker-Papermerge(数字档案文件管理系统)
Docker-SearXNG(搜索引擎)
Docker-Snipe-IT(资产管理)
Docker-Moments(极简朋友圈)
Docker-neko(浏览器)
Docker-AsPoem(诗词网站)
Docker-CMS(内容管理系统)
Docker-Ikaros(个人内容管家)
Docker-JPress
Docker-OneKVM(类向日葵控控)
Docker-OS(系统)
Docker-DSM(群晖)
Docker-OSX(MacOS)
Docker-Puter(云端系统)
Docker-GodoOS(内网办公操作系统)
Docker-Nextcloud
Docker-KodCloud(可道云)
Docker-MacOS
Docker-Windows
Docker-Ferry(工单系统)
Docker-HivisionIDPhotos(AI证件照)
Docker-IPTVnator(IPTV播放器)
Docker-SQL工具
Docker-SQLynx
Docker-STUN/TURN(Coturn)
Docker-gocron(定时任务管理系统)
Docker-paopao-ce(微社区)
Docker-JSON Hero(JSON浏览器)
Docker-n8n(工作流自动化)
Docker-Aria2
Docker-NTP(时间服务器)
Docker-EasyTier(异地组网)
Linux-EasyTier
EasyTier-配置文件
Docker-Domain Admin(域管理员)
Docker-WPS
卷的使用
备份与还原
各种开源项目(未测试)
限制资源
开放端口调整
更换 Docker 源
镜像转存DockerHub
DockerHub 代理加速(Cloudflare Worker)
Docker 代理加速(Cloudflare Worker)
代理加速
⭐CF-Workers-docker(DockerHub 加速)
docker run 转 docker-compose
Docker 解释
Dockerfile(自建镜像)
使用第三方构建
多阶段构建(缩小体积)
Docker的备份服务器
Kasm(Web服务)
Docker-备份与还原
Docker-volume(卷)
Docker-network(网络)
Linux 安装 Docker
Windows 安装 Docker
Win7 安装 Docker
游戏服务器搭建
Docker-Valheim(英灵神殿)
Docker-jsnes(在线NES)
Docker-7DaysToDie(七日杀)
7DaysToDie-配置文件
Docker-Conan Exiles(流放者柯南)
Docker-noname(无名杀)
Docker-Epic游戏商城每周免费游戏
Docker-Terraria(泰拉瑞亚)
泰拉瑞亚-服务器
Terrari-存档同步
Docker-Mindustry(像素工厂)
Docker-Habitica(习惯养成RPG)
Docker-RetroArch(在线模拟器)
Docker-vue-idle-game(轮回勇士传说)
Docker-Phira(Phigros 二创版)
Docker-Pterodactyl(翼龙面板⭐)
Pterodactyl-自建预设(游戏部署脚本)
Docker-GamePanelX-V3(游戏面板)
Docker-MCSManager(游戏面板⭐)
Docker-Easy-WI(游戏面板)
Docker-常见问题处理
Podman(Docker替代品)
Docker-Linux Command(Linux命令搜索引擎)
Docker-修改存储位置
Dockerc(编译为独立二进制文件)
slim(镜像瘦身)
Docker-API(远程连接)
Docker-cloudbak(云朵备份)
本文档使用 MrDoc 发布
-
+
首页
OpenVPN-ovpn-admin(WebUI)
若是启用的密码验证,该项目帐号密码是和证书绑定的,混用是无法登录的! **相关链接:** - OpenVPN: - 官网:https://openvpn.net/ - 文档:https://openvpn.net/community-resources/how-to/ - GitHub:https://github.com/OpenVPN/openvpn - 客户端下载:https://openvpn.net/client/ - openvpn-user:https://github.com/pashcovich/openvpn-user - ovpn-admin: - GitHub:https://github.com/flant/ovpn-admin - Docker:https://hub.docker.com/r/flant/ovpn-admin/ - Easy-RSA 高级参考:https://github.com/OpenVPN/easy-rsa/blob/master/doc/EasyRSA-Advanced.md - [我构建的Docker镜像](https://github.com/ai773203918/ovpn-admin):https://hub.docker.com/r/918178/ovpn-admin ## docker-compose 部署 ```bash mkdir {easyrsa,ccd} # 创建所需文件夹(若使用nginx还需额外准备其它文件) nano docker-compose.yaml # 编辑配置文件 docker-compose up -d # 部署并启动 ``` >s 相关文件:`共享盘\服务器\自构建\OpenVPN\OpenVPN-Admin(OpenVPN带WebUI管理).zip` 主要包含各配置文件 ### docker-compose.yaml 根据官方的略做调整,加`⭐`部分根据实际情况更改 ```yaml services: openvpn: # OpenVPN 服务器(OpenVPN) #build: # 使用 docker-compose up -d --build 可以强行构建(即便可以下载) #context: . # 构建镜像,指向当前目录 #dockerfile: Dockerfile.openvpn # 指定使用的 Dockerfile 文件 # image: flant/ovpn-admin:openvpn-latest # 使用官方构建好的镜像(固定tcp协议) image: 918178/ovpn-admin:openvpn-latest # 使用我编译好的镜像(ovpn-user) # image: nas.918178.xyz:10088/library/openvpn:user # 使用我编译好的镜像(openvpn) restart: always # 容器总是重启 # command: bash /etc/openvpn/setup/configure.sh # 容器启动时执行的命令(修复未指定 bash 运行) command: bash /etc/openvpn/setup/configure_zwzw.sh # 容器启动时执行的命令,更换为我完善的配置文件 cap_add: - NET_ADMIN # 添加 NET_ADMIN 权限 environment: OVPN_SERVER_NET: "10.10.0.0" # ⭐VPN网段 OVPN_SERVER_MASK: "255.255.255.0" # ⭐VPN网段子网掩码 OVPN_PASSWD_AUTH: "true" # ⭐OpenVPN密码验证(VPN连接时需要输入密码) #OVPN_SRV_PROTOCOL: "udp" # ⭐VPN协议(默认udp,我的镜像额外添加的功能,官方镜像无效) #OVPN_LOCAL_NET: "192.168.1.0" # 允许访问的内部网段(仅可添加一个,多个需要修改启动脚本或配置文件) #OVPN_LOCAL_MASK: "255.255.255.0" # 允许访问的内部网段 ports: # - 1194:1194 # OpenVPN工作端口(官方镜像固定tcp) - 1194:1194/udp # OpenVPN工作端口(udp需要指定协议,我的镜像可以切换协议) # - 8080:8080 # ovpn-admin(直接开放不安全)(若是ovpn-admin接入该容器网络,则由该容器管理) volumes: - ./easyrsa:/etc/openvpn/easyrsa # 挂载 easyrsa 到容器的 /etc/openvpn/easyrsa 目录 - ./ccd:/etc/openvpn/ccd # 挂载 ccd 到容器的 /etc/openvpn/ccd 目录 #- ./openvpn.conf:/etc/openvpn/setup/openvpn.conf # OpenVPN 服务器-配置文件 #- ./configure.sh:/etc/openvpn/setup/configure.sh # 启动脚本(非必要误覆盖) ovpn-admin: # OpenVPN Web管理(OpenVPN-Admin) #build: # 使用 docker-compose up -d --build 可以强行构建(即便可以下载) #context: . # 构建镜像,指向当前目录 # image: flant/ovpn-admin:latest # 使用官方构建好的镜像 image: 918178/ovpn-admin:admin-latest # 可以使用我编译好的镜像(ovpn-admin) # image: nas.918178.xyz:10088/library/openvpn:admin # 可以使用我编译好的镜像(ovpn-admin) restart: always # 自启 command: /app/ovpn-admin # 容器启动时执行的命令 environment: OVPN_MGMT: "openvpn:8989" # OpenVPN 管理地址(默认8989端口) OVPN_NETWORK: "10.10.0.0/24" # ⭐VPN网段/掩码位数(同 OVPN_SERVER_NET/OVPN_SERVER_MASK) OVPN_SERVER: "nas.918178.xyz:1194:udp" # ⭐外部连接 OpenVPN服务器的域名|IP,端口和协议要同openvpn配置一致 OVPN_AUTH: "true" # ⭐OpenVPN密码认证(同 OVPN_PASSWD_AUTH) OVPN_INDEX_PATH: "/mnt/easyrsa/pki/index.txt" # OpenVPN 索引文件路径 OVPN_AUTH_DB_PATH: "/mnt/easyrsa/pki/users.db" # OpenVPN 用户认证数据库路径 EASYRSA_PATH: "/mnt/easyrsa" # Easy-RSA 路径 EASYRSA_CERT_EXPIRE: "3650" # 证书到期时间 OVPN_CCD: "true" # 启用 OpenVPN CDD(Client Config Dir)功能 OVPN_CCD_PATH: "/mnt/ccd" # CDD 配置路径 #OVPN_TEMPLATES_CC_PATH: "/app/client.conf.tpl" # OpenVPN 客户端配置文件生成模版 #OVPN_DEBUG: "true" # 启用 OpenVPN 调试模式 #OVPN_VERBOSE: "true" # 启用 OpenVPN 详细日志 #LOG_LEVEL: "debug" # 日志级别设为调试模式 # network_mode: service:openvpn # 网络模式设置为接入openvpn容器的网络(由接入容器管理) ports: - 8080:8080 # ovpn-admin(直接开放不安全) volumes: - ./easyrsa:/mnt/easyrsa # 挂载 easyrsa 到容器的 /mnt/easyrsa 目录 - ./ccd:/mnt/ccd # 挂载 ccd 到容器的 /mnt/ccd 目录 #- ./client.conf.tpl:/app/client.conf.tpl # OpenVPN 服务器-配置文件 depends_on: - openvpn # 等待 openvpn-user 启动后再启动 # nginx: # 使用 nginx 反向代理来增加 web认证(若不使用则要开放ovpn-admin端口) # image: nginx # restart: always # 自启 # ports: # - '8080:8080' # 加密 ovpn-admin # volumes: # - ./nginx:/etc/nginx # 挂载本地文件(含有Nginx配置文件,SSL,密码文件) # depends_on: # - ovpn-admin # 等待 ovpn-admin 启动后再启动 ``` ### configure.sh Git项目中路径: `setup/configure.sh`,OpenVPN-User启动脚本,做了一些小修改适配 Docker部署 ```bash #!/usr/bin/env bash set -ex # 设置 EasyRSA 目录和服务器证书路径 EASY_RSA_LOC="/etc/openvpn/easyrsa" SERVER_CERT="${EASY_RSA_LOC}/pki/issued/server.crt" # 设置 OpenVPN 服务器 OVPN_SRV_NET=${OVPN_SERVER_NET:-172.16.100.0} # VPN网络 OVPN_SRV_MASK=${OVPN_SERVER_MASK:-255.255.255.0} # VPN子网掩码 # 设置 OpenVPN 协议(额外增加) OVPN_SRV_PROTOCOL=${OVPN_SERVER_PROTOCOL:-udp} # 进入 EasyRSA 目录 cd $EASY_RSA_LOC # 检查是否存在服务器证书,如果不存在则生成新的证书 if [ -e "$SERVER_CERT" ]; then echo "Found existing certs - reusing" else # 如果角色是 "slave",等待从主节点同步初始数据 if [ ${OVPN_ROLE:-"master"} = "slave" ]; then echo "等待来自主站的初始同步数据" while [ $(wget -q localhost/api/sync/last/try -O - | wc -m) -lt 1 ] do sleep 5 done else # 生成新的服务器证书 echo "生成新证书" easyrsa init-pki cp -R /usr/share/easy-rsa/* $EASY_RSA_LOC/pki echo "ca" | easyrsa build-ca nopass easyrsa build-server-full server nopass easyrsa gen-dh openvpn --genkey --secret ./pki/ta.key fi fi # 生成证书撤销列表 (CRL) easyrsa gen-crl # 配置 iptables 规则,用于网络地址转换 (NAT) iptables -t nat -D POSTROUTING -s ${OVPN_SRV_NET}/${OVPN_SRV_MASK} ! -d ${OVPN_SRV_NET}/${OVPN_SRV_MASK} -j MASQUERADE || true iptables -t nat -A POSTROUTING -s ${OVPN_SRV_NET}/${OVPN_SRV_MASK} ! -d ${OVPN_SRV_NET}/${OVPN_SRV_MASK} -j MASQUERADE # 创建 /dev/net/tun 设备 mkdir -p /dev/net if [ ! -c /dev/net/tun ]; then mknod /dev/net/tun c 10 200 fi # 复制 OpenVPN 配置文件 cp -f /etc/openvpn/setup/openvpn.conf /etc/openvpn/openvpn.conf # 如果启用了密码验证,配置相关脚本和参数 if [ ${OVPN_PASSWD_AUTH} = "true" ]; then mkdir -p /etc/openvpn/scripts/ # 创建存放脚本的目录 cp -f /etc/openvpn/setup/auth.sh /etc/openvpn/scripts/auth.sh # 复制密码验证脚本到指定目录 chmod +x /etc/openvpn/scripts/auth.sh # 赋予脚本执行权限 echo "auth-user-pass-verify /etc/openvpn/scripts/auth.sh via-file" | tee -a /etc/openvpn/openvpn.conf # 使用指定文件进行用户名和密码的验证 echo "script-security 2" | tee -a /etc/openvpn/openvpn.conf # 脚本的安全级别 echo "verify-client-cert require" | tee -a /etc/openvpn/openvpn.conf # 要求验证客户端证书 # 判断是否配置了允许内部访问地址(额外增加,OVPN_LOCAL_NET 网络,OVPN_LOCAL_MASK 子网掩码) if [[ ${OVPN_LOCAL_NET} != "null" && ${OVPN_LOCAL_MASK} != "null" ]]; then echo 'push "route '${OVPN_LOCAL_NET}' '${OVPN_LOCAL_MASK}'"' | tee -a /etc/openvpn/openvpn.conf # 添加允许访问的内部网络 else echo '没有配置允许内部访问的地址' fi openvpn-user db-init --db.path=$EASY_RSA_LOC/pki/users.db # 初始化用户数据库 fi # 设置目录和文件权限 [ -d $EASY_RSA_LOC/pki ] && chmod 755 $EASY_RSA_LOC/pki [ -f $EASY_RSA_LOC/pki/crl.pem ] && chmod 644 $EASY_RSA_LOC/pki/crl.pem # 创建 ccd 目录(用于存放客户端配置文件) mkdir -p /etc/openvpn/ccd # 启动 OpenVPN 服务器(已做修改,management 不做任何IP限制,通过容器仅部署容器间可访问) openvpn --config /etc/openvpn/openvpn.conf --client-config-dir /etc/openvpn/ccd --port 1194 --proto ${OVPN_SRV_PROTOCOL} --management 0.0.0.0 8989 --dev tun0 --server ${OVPN_SRV_NET} ${OVPN_SRV_MASK} ``` ### openvpn.conf Git项目中路径: `setup/openvpn.conf`,服务器端配置文件 其中一些注释在运行服务时会复制该文件追加进去再运行服务 ```bash # server 172.16.100.0 255.255.255.0 verb 3 tls-server ca /etc/openvpn/easyrsa/pki/ca.crt key /etc/openvpn/easyrsa/pki/private/server.key cert /etc/openvpn/easyrsa/pki/issued/server.crt dh /etc/openvpn/easyrsa/pki/dh.pem crl-verify /etc/openvpn/easyrsa/pki/crl.pem tls-auth /etc/openvpn/easyrsa/pki/ta.key key-direction 0 cipher AES-128-CBC #management 127.0.0.1 8989 keepalive 10 60 persist-key persist-tun topology subnet #duplicate-cn #proto tcp #port 1194 #dev tun0 status /tmp/openvpn-status.log user nobody group nogroup push "topology subnet" push "route-metric 9999" push "dhcp-option DNS 1.1.1.1" ``` ### client.conf.tpl Git项目中路径: `templates/client.conf.tpl`,客户端.ovpn配置生成模版 客户端.ovpn配置文件的生成模版,注意有些配置要和服务器端一致 ```bash {{- range $server := .Hosts }} remote {{ $server.Host }} {{ $server.Port }} {{ $server.Protocol }} {{- end }} verb 4 client nobind dev tun cipher AES-128-CBC key-direction 1 #redirect-gateway def1 tls-client remote-cert-tls server # uncomment below lines for use with linux #script-security 2 # if you use resolved #up /etc/openvpn/update-resolv-conf #down /etc/openvpn/update-resolv-conf # if you use systemd-resolved first install openvpn-systemd-resolved package #up /etc/openvpn/update-systemd-resolved #down /etc/openvpn/update-systemd-resolved {{- if .PasswdAuth }} auth-user-pass {{- end }} <cert> {{ .Cert -}} </cert> <key> {{ .Key -}} </key> <ca> {{ .CA -}} </ca> <tls-auth> {{ .TLS -}} </tls-auth> ``` ### nginx/nginx.conf nginx 的配置文件,自建 ```bash user nginx; # 设置 Nginx 运行的用户为 'nginx' worker_processes auto; # 根据可用的 CPU 核心数量自动设置 worker 进程的数量 error_log /var/log/nginx/error.log; # 定义错误日志的路径 pid /run/nginx.pid; # 定义 Nginx 主进程的 PID 文件路径 # 定义事件模块的配置,主要设置 worker 进程的最大连接数 events { worker_connections 1024; } # 定义 HTTP 模块的配置 http { charset UTF-8; # 设置字符集为 UTF-8 # HTTPS反向代理 server { listen 8080 ssl; # ⭐反向代理端口,要和容器一致 server_name nas.918178.xyz; # ⭐域名 # 设置用户认证 auth_basic "使用前请登录"; # 提示 auth_basic_user_file /etc/nginx/.passwd; # ⭐存放密码位置 # SSL/TLS证书和私钥路径(启用需要自行准备证书文件) #ssl_certificate /etc/nginx/key/nas.918178.xyz.cer; # ⭐证书(有些版本*需写成\*) #ssl_certificate_key /etc/nginx/key/nas.918178.xyz.key; # ⭐密钥(有些版本*需写成\*) error_page 497 =307 https://$host:$server_port$request_uri; # http自动跳转https # 遇到 HTTP 请求发到 HTTPS 时会产生的内部错误代码 497 # 返回307临时重定向(客户端应保持请求方法不变向新的地址发出请求) # 设置处理请求的 URI 路径为根路径 location / { proxy_http_version 1.1; # 设置代理服务器与后端服务器之间使用的 HTTP 协议版本为 1.1 proxy_pass http://app:8080; # ⭐连接的内部服务,可以直接写容器 proxy_pass_header Server; # 设置要传递给后端服务器的请求头字段 proxy_set_header Connection ""; # 设置传递给后端服务器的请求头中的 Connection 字段为空,保持长连接 proxy_set_header Host $http_host; # 设置传递给后端服务器的请求头中的 Host 字段为客户端请求的主机头 proxy_set_header X-Forwarded-Proto $scheme; # 设置传递给后端服务器的请求头中的 X-Forwarded-Proto 字段,表示客户端连接时使用的协议 proxy_set_header X-Real-IP $remote_addr; # 设置传递给后端服务器的请求头中的 X-Real-IP 字段,表示客户端的真实 IP 地址 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置传递给后端服务器的请求头中的 X-Forwarded-For 字段,表示客户端的原始 IP 地址 proxy_buffering off; # 关闭代理缓冲,确保及时传递后端服务器的数据给客户端 proxy_cache off; # 禁用代理缓存,确保每次请求都直接从后端服务器获取最新的数据 send_timeout 600; # 设置向客户端发送响应的超时时间为 600 秒 proxy_connect_timeout 600; # 设置与后端服务器建立连接的超时时间为 600 秒 proxy_send_timeout 600; # 设置向后端服务器发送请求的超时时间为 600 秒 proxy_read_timeout 600; # 设置从后端服务器读取响应的超时时间为 600 秒 } } } ``` ### nginx/.passwd web 简易认证的账户和密码,自建,可以用 [在线htpasswd生成器](https://www.bejson.com/encrypt/htpasswd/) 生成你所需的密码 ```bahs wj:$apr1$cb99JBhn$avFKPwMKYSsawBXWZyvbb0 ``` ## 自行构建_本地 ```bash # 使用有代理的设备进行编译 git clone https://git.918178.xyz/https://github.com/flant/ovpn-admin.git && cd ovpn-admin # 拉取并进入 nano docker-compose.yaml # 编辑配置文件(参考我上方调整过的) nano setup/configure.sh # 编辑 openvpn-user 的启动文件(参考我上方调整过的) docker-compose up -d --build # 构建部署并启动(--build 不下载镜像强行构建) ``` >d 构建中提示 `can't execute 'bash'` 这是容器启动脚本未写明使用bash启动,也有可能是没有安装bash(补装一下即可) > 构建中 `setup\configure.sh` 提示 `'\r': command not found` 是脚本换行符问题(尝试在Linux上重新创建并把原内容粘贴进去,或是在VSCode中行尾序列CRLF改成`LF`) ## docker(Alpine) 使用一个docker包含 openvpn + ovpn-admin,效果不怎么好,故只做记录不做成镜像 ```bash # 部署 alpine 并进入 docker run -itd --name openvpn -p 1194:1194/udp -p 1194:1194 -p 8080:8080 -v $PWD/:/etc/openvpn --cap-add=NET_ADMIN --device=/dev/net/tun alpine && docker exec -it openvpn sh # 下列所有命令均在 alpine 下执行 apk --no-cache add bash easy-rsa openssl openvpn coreutils nano # 安装所需软件 ln -s /usr/share/easy-rsa/easyrsa /usr/local/bin # 把 easy-rsa 软连接到执行目录(可以在任何位置执行) cd /etc/openvpn # ovpn-admin 放在 OpenVPN 项目下 wget https://git.918178.xyz/https://github.com/flant/ovpn-admin/releases/download/2.0.2/ovpn-admin-linux-amd64.tar.gz -O ovpn-admin.tar.gz # 下载最新编译后的 ovpn-admin tar -xvzf ovpn-admin.tar.gz && mv ovpn-admin-linux-* ovpn-admin # 解压并重命名 # 此处正常创建证书,证书路径为 /etc/openvpn/easyrsa/ # 此处创建OpenVPN配置文件,并测试运行 # 注意,OpenVPN配置文件(如 /etc/openvpn/server.conf)头部加上下列命令 management 127.0.0.1 8989 # 开放OpenVPN管理端口 nohup openvpn --config /etc/openvpn/server.conf & # 后台运行 ./ovpn-admin --easyrsa.index-path="/etc/openvpn/easyrsa/pki/index.txt" --ovpn.server=nas.918178.xyz:1194:udp # 运行 ovpn-admin(改成自己域名/地址,端口,协议) ``` 访问 `http://<IP>:8080` 进入 OpenVPN WebUI ## ovpn-admin 用法 ```bash 用法: ovpn-admin [<标志>] 标志: --help 显示上下文敏感的帮助(也可以尝试 --help-long 和 --help-man) --listen.host="0.0.0.0" ovpn-admin 的主机 (或 OVPN_LISTEN_HOST) --listen.port="8080" ovpn-admin 的端口 (或 OVPN_LISTEN_PORT) --listen.base-url="/" ovpn-admin web 文件的基本 URL (或 $OVPN_LISTEN_BASE_URL) --role="master" 服务器角色,master 或 slave (或 OVPN_ROLE) --master.host="http://127.0.0.1" (或 OVPN_MASTER_HOST) 主服务器的 URL --master.basic-auth.user="" 主服务器的基本身份验证用户 (或 OVPN_MASTER_USER) --master.basic-auth.password="" (或 OVPN_MASTER_PASSWORD) 主服务器的基本身份验证密码 --master.sync-frequency=600 主机数据同步频率(以秒为单位) (或 OVPN_MASTER_SYNC_FREQUENCY) --master.sync-token=TOKEN 主机数据同步安全令牌 (或 OVPN_MASTER_TOKEN) --ovpn.network="172.16.100.0/24" (或 OVPN_NETWORK) OpenVPN 服务器的 NETWORK/MASK_PREFIX --ovpn.server=HOST:PORT:PROTOCOL ... (或 OVPN_SERVER) OpenVPN 服务器的 HOST:PORT:PROTOCOL 可以有多个值 --ovpn.server.behindLB 如果你的 OpenVPN 服务器在 Kubernetes 后面,请启用 (或 OVPN_LB) 具有 LoadBalancer 类型的 Service --ovpn.service="openvpn-external" (或 OVPN_LB_SERVICE) 如果你的 OpenVPN 服务器在其后,则具有 LoadBalancer 类型的 Kubernetes Service 的名称 --mgmt=main=127.0.0.1:8989 ... (或 OVPN_MGMT) OpenVPN 服务器管理接口的 ALIAS=HOST:PORT; 可以有多个值 --metrics.path="/metrics" 暴露收集到的指标的 URL 路径 (或 OVPN_METRICS_PATH) --easyrsa.path="./easyrsa/" easyrsa 目录的路径 (或 EASYRSA_PATH) --easyrsa.index-path="./easyrsa/pki/index.txt" (或 OVPN_INDEX_PATH) easyrsa 索引文件的路径 --ccd 启用客户端配置目录 (或 OVPN_CCD) --ccd.path="./ccd" 客户端配置目录的路径 (或 OVPN_CCD_PATH) --templates.clientconfig-path="" (或 OVPN_TEMPLATES_CC_PATH) 自定义 client.conf.tpl 的路径 --templates.ccd-path="" 自定义 ccd.tpl 的路径 (或 OVPN_TEMPLATES_CCD_PATH) --auth.password 启用额外的密码授权 (或 OVPN_AUTH) --auth.db="./easyrsa/pki/users.db" (或 OVPN_AUTH_DB_PATH) 密码授权的数据库路径 --log.level 设置日志级别:trace, debug, info, warn, error(默认为 info) (或 LOG_LEVEL) --log.format 设置日志格式:text, json(默认为 text) (或 LOG_FORMAT) --storage.backend 存储后端:filesystem, kubernetes.secrets(默认为 filesystem) (或 STORAGE_BACKEND) --version 显示应用程序版本 ``` **相关教程:** [如何使用 ovpn-admin Web UI 管理 OpenVPN 服务器](https://cn.linux-console.net/?p=20733)
造物者W
2024年12月26日 11:49
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码