Ground-Zerro/Phobos

GitHub: Ground-Zerro/Phobos

一个集成了 STUN 流量混淆功能的 WireGuard VPN 管理面板,旨在帮助用户在网络审查和 DPI 封锁环境中部署和管理安全的远程通信。

Stars: 148 | Forks: 23

# wg-easy + Phobos 混淆器 [![Build & Publish Image](https://static.pigsec.cn/wp-content/uploads/repos/cas/ca/cac97e043ceb97f3331da202bafb1ee96f056bb12e32b99e45c0bf694dce023a.svg)](https://github.com/Ground-Zerro/Phobos/actions/workflows/publish-image.yml) [![GitHub Stars](https://img.shields.io/github/stars/Ground-Zerro/Phobos)](https://github.com/Ground-Zerro/Phobos/stargazers) [![License](https://img.shields.io/github/license/Ground-Zerro/Phobos)](LICENSE) 带有内置 STUN 混淆器的 WireGuard 管理面板。从客户端到服务器的流量被伪装为 STUN 并进行 XOR 编码 —— 以便在存在网络封锁的地区绕过 DPI。

wg-easy Screenshot

## 功能 - 在单个容器中集成 WireGuard + Web UI + XOR/STUN 混淆器。 - s6-overlay 将 `node` 和 `wg-obfuscator` 作为独立的长期运行服务进行监督。 - **混淆器预设**:并行运行多个独立的混淆器监听器(不同的端口/密钥/伪装/空闲/虚拟数据),并为每个客户端选择其中一个。 - 公共 WireGuard 端口不对外暴露;仅发布混淆器的 UDP 端口。 - 针对每个客户端的 **安装链接**:一条 shell 命令即可在客户端上安装完整的 Phobos 套件(WG 配置 + 平台安装程序 + 多架构混淆器二进制文件)。 - 提供管理 UI 以针对每个预设调整预设、伪装模式、密钥和端口。 - 支持 SQLite + Drizzle、多语言 UI、2FA、基于客户端的防火墙、IPv6 以及 CIDR。 ## 快速开始(通用 Docker) ``` name: phoboswg volumes: phobos_etc_wireguard: phobos_sqlite_data: phobos_certs_data: services: phobos: image: ghcr.io/ground-zerro/phobos:latest container_name: phobos ports: - "51822-51921:51822-51921/udp" - "51831:51831/tcp" volumes: - phobos_etc_wireguard:/etc/wireguard - phobos_sqlite_data:/app/server/data - phobos_certs_data:/app/certs cap_add: - NET_ADMIN - SYS_MODULE sysctls: - net.ipv4.ip_forward=1 - net.ipv4.conf.all.src_valid_mark=1 restart: unless-stopped ``` 打开 `http://:51831`,完成初始设置并创建一个客户端。 ## 一键部署服务器 在一台全新的服务器上运行以下命令: ``` curl -fsSL https://raw.githubusercontent.com/Ground-Zerro/Phobos/main/deploy.sh | sudo bash ``` 脚本执行流程: - 安装 Docker + Compose 插件(如果尚未安装), - 从此仓库下载部署文件, - 从 `ghcr.io/ground-zerro/phobos` 拉取已构建好的项目镜像, - 无需在服务器端构建镜像,直接启动技术栈, - 启动设置向导:创建管理员账号、设置主机名并配置 TLS。 部署完成后,打开 `http://:51831/` —— 向导将引导您完成以下设置: 1. 管理员账号(用户名 + 密码) 2. 服务器主机(IP 地址或域名) 3. TLS 证书(自签名 / 导入已有证书 / 按路径导入 / 跳过) 可选参数: ``` WG_HOST= \ WG_EASY_IMAGE=ghcr.io/ground-zerro/phobos:latest \ curl -fsSL https://raw.githubusercontent.com/Ground-Zerro/Phobos/main/deploy.sh | sudo bash ``` 如需跳过向导并通过环境变量预先配置管理员凭据: ``` INIT_ENABLED=true \ INIT_USERNAME=admin \ INIT_PASSWORD=YourPassword \ WG_HOST= \ curl -fsSL https://raw.githubusercontent.com/Ground-Zerro/Phobos/main/deploy.sh | sudo bash ``` 端口说明: - Web UI: `http://:51831/` - 混淆器预设:`UDP :51822-51921`(每个预设占用一个端口,从此范围内分配) ## 工作原理 ``` Client device Server (Docker) ───────────── ──────────────── app ─► 127.0.0.1:13255 0.0.0.0: (local WG client) (wg-obfuscator instance for this preset) │ │ STUN unwrap + XOR decode │ plain WG ▼ ▼ 127.0.0.1:51820 (wg0, loopback-only) 127.0.0.1:13255 │ (wg-obfuscator client) │ WG │ ▼ │ XOR + STUN wrap FORWARD → internet ▼ UDP → : ``` 单个 `wg-obfuscator` 进程会加载 `/run/wg-obfuscator.conf`,其中服务器为每个启用的预设保留一个 `[preset-]` 段落;二进制程序会为每个段落 fork 出一个监听器。每个监听器将解码后的流量转发到同一个本地回环 WireGuard 端口 —— 因此 WG 端完全不会察觉到预设的选择。 ## 混淆器预设 预设允许您通过在同一个 WG 接口上配置带有**独立参数**的混淆器监听器,来为不同的客户端(或客户端组)提供服务。 **预设包含的内容**: - `name` — 在管理 UI 中显示的自由格式标签; - `extPort` — 监听器绑定的公共 UDP 端口,必须在 `51822–51921` 范围内(这是 docker-compose 默认发布的端口范围); - `key` — 仅与该预设的客户端共享的 XOR 密钥; - `masking` — `STUN` / `AUTO` / `NONE`; - `idle` — 空闲会话超时时间(秒); - `dummy` — 每个数据包的最大虚拟字节数; - `clientWgLocalPort` — 客户端上的本地 WG 端口(当同一台路由器上共存多个 Phobos 配置文件时此项非常重要); - `isDefault` — 只有一个预设会带有此标志;它会被所有未明确指定分配的客户端使用。 **为什么要使用它**: - 抗探测回退方案:通过带有轻度填充的 `STUN` 模式为可信用户提供服务,并在备用端口上保留一个更严格的 `AUTO` 模式预设作为后备。 - 组间隔离:将公共测试客户端的密钥与您的个人配置文件分离,这样即使其中一个安装包泄露,也无法解密另一个通道的流量。 - A/B 测试不同的混淆参数,而无需重启那些未更改设置的客户端。 **管理 UI** — *管理面板 → 混淆器预设*: - `添加预设` — Node 会在此范围内选择下一个可用端口(或由您提供),生成新密钥,应用配置并重启监听器(执行单次 `s6-svc -r`)。 - `设为默认` — 在单个事务中转移默认标志;新建及未分配的客户端会立即使用此预设。 - `重新生成密钥` / `重新生成端口` — 轮换对应的值并重新应用。 - `删除` — 仅允许对非默认预设执行;指向该预设的客户端会自动回退到默认预设(`ON DELETE SET NULL`)。 **针对客户端的分配**: - *创建客户端*对话框中有一个预设下拉菜单;默认选项是 **使用默认预设**。 - *编辑客户端*页面(`/clients/`)具有相同的下拉菜单 —— 切换后会生成一个新的安装包下载,指向所选预设的端口/密钥。 - 在列表中,非默认预设会以彩色徽章的形式显示在客户端名称旁边。 **生命周期**: - 每次创建/更新/删除/重新生成/设置默认操作都会调用 `Obfuscator.applyAll()`:它会根据数据库重新生成 `/run/wg-obfuscator.conf`,并发送 `s6-svc -r /run/service/wg-obfuscator` 指令。单次重启会重新 fork 所有监听器;现有会话将通过 `idle-timeout` 重新连接。 - 运行脚本会在 `setsid` 下启动二进制程序,以便所有 fork 出的子监听器共享同一个进程组;随后 `finish` 脚本会执行 `pkill -f /usr/local/bin/wg-obfuscator`,以确保在停止/重启时不会残留任何僵尸监听器。 ## 客户端安装 1. 管理员在 Web UI 中创建一个客户端(可选择非默认的混淆器预设)。 2. 管理员点击 **安装链接** 按钮 —— 将以下命令复制到剪贴板: curl -sL http:///api/install/ | sh 3. 管理员将此命令粘贴到目标设备上。脚本会下载 Phobos 安装包,检测系统平台,安装 `wg-obfuscator` 并配置 WireGuard。 下载的 WireGuard 配置会将预设参数作为 `[instance]` 段落附加到标准的 `[Peer]` 块中,以便客户端混淆器使用正确的密钥连接到正确的服务器端口。 ## 支持的客户端平台 - Keenetic / Netcraze (Entware + RCI API) - OpenWrt / ImmortalWrt (opkg + UCI) - Debian / Ubuntu Linux (apt + systemd) - 3x-ui 面板 (SQLite 集成) ## 远程部署脚本 `scripts/deploy/` 中提供了额外的辅助脚本,可用于基于 SSH 的远程操作和更新。 ## 开发 ``` pnpm dev ``` ## 许可证 AGPL-3.0-only — 详见 [LICENSE](LICENSE)。 本项目与 Jason A. Donenfeld、ZX2C4 或 Edge Security 没有任何隶属、关联、授权、认可关系,也未以任何方式正式建立联系。“WireGuard” 和 “WireGuard” 徽标是 Jason A. Donenfeld 的注册商标。
标签:Docker容器, DPI绕过, MITM代理, VPN, Web管理面板, WireGuard, 客户端加密, 攻击面发现, 网络流量混淆, 请求拦截