接上篇https://www.nodeseek.com/post-785536-1
纯ai文,修了一些bug,新增了http api控制,出口延迟监控,出口fallback,防止tgbot挂
一键安装
curl -fsSL https://raw.githubusercontent.com/lingchenfs1/5gpn/main/quick-install.sh -o /tmp/5gpn.sh && sudo bash /tmp/5gpn.sh
之前发过 kfchost 5gpn(5G 专网) 配套的服务端透明反代网关——客户端只配一个 DNS,部分域名自动走代理,分流/出口全在网关侧。这次给它加了一个网页控制台和一套 HTTP API:现在不用 SSH、也不用只靠 Telegram,打开网页就能像 UniFi 那样管理整台网关。

仓库:https://github.com/lingchenfs1/5gpn
一句话
一个自带的、像路由器后台一样的网页控制台:看状态、看 24 小时流量与出口延迟、切出口、测延迟、写分流规则、管规则组——手机电脑都适配,深浅主题随系统,和 Telegram Bot 实时同步。
长这样
左侧导航 + 顶栏 + 仪表盘的经典后台布局:
┌──────────┬────────────────────────────────────────┐
│ 🛰 5gpn │ 概览 ● 在线 🔄 │
│ ├────────────────────────────────────────┤
│ 📊 概览 │ [当前出口][CPU][内存][硬盘][运行时间] │ ← 统计磁贴(带进度条)
│ 🌐 出口 │ ┌──── 24 小时流量趋势(折线图) ────┐ │
│ 🧭 智能分流│ ├──── 24 小时出口延迟(折线图) ────┤ │
│ 🖥 控制台 │ └──────────────────────────────┘ │
│ 🌓 主题 │ ┌──── 服务状态 ────┐ │
└──────────┴────────────────────────────────────────┘
功能一览
📊 概览仪表盘
- 服务器负载横条:CPU / 内存 / 硬盘 / 运行时间,一眼看尽。
- 24 小时流量趋势图(纯前端 canvas,零依赖):每个出口 + 本机各一条线,图例带 24h 总流量。
- 24 小时出口延迟趋势图:每个出口一条线,看哪个节点稳、哪个在抖。
- 各核心服务在线状态(dnsdist / sniproxy / quic-proxy / DNS 竞速 / Bot / API)。
🌐 出口管理
- 列出全部出口,一键切换;添加(WireGuard / SOCKS5 / socks5h 远程DNS / Shadowsocks / SS2022,密码含特殊字符直接一行粘)/删除;🩺 检查节点连通性。
- 实时延迟:每个出口后面直接显示延迟(优先 ICMP ping,被禁 ping 自动 tcping 出口端口),🟢<100ms / 🟡<250ms / 🔴 超时,一眼挑出最快的节点。
🧭 智能分流(这次重点补全)
- 分流规则:新增 / 就地修改 / 删除单条 + 关键词过滤 + 整份编辑。支持
DOMAIN-SUFFIX / DOMAIN / DOMAIN-KEYWORD / IP-CIDR / RULE-SET(外部规则集) / GEOSITE / GEOIP / FINAL。 - 规则组(分类):新建 / 改目标出口 / 改名 / 删除。每个规则组映射到一个出口或直连/拒绝;改名会自动同步改写引用它的所有规则。
- 改完即由 sing-box 校验后热生效,写错不会让路由器挂。
🎨 体验
- 白天 / 黑夜 / 跟随系统 三态主题,实时切换。
- 完整移动端适配:手机上侧边栏变抽屉,按钮 44px 触控友好,输入框不触发缩放。
- 操作有反馈、结果实时刷新;弱网/重建路由瞬断也不会误报失败。
和 Telegram Bot 的关系:同一套后端,实时同步
网页、Telegram Bot、命令行共用同一个后端(管理脚本 + 配置文件),改任意一边,另一边立刻看到。网页只是多了一个更直观的"外壳",不是另起炉灶。
安全
- 仅走 HTTPS(复用网关已有的 Let's Encrypt 证书),所有接口需
Authorization: Bearer <令牌>(常数时间比较)。 - 令牌存在服务器 root-only 文件,自动生成;不暴露卸载等危险操作;输入严格校验、固定参数、不拼接 shell。
- 网页本身只是静态页面,不含任何密钥;真正的钥匙是那串令牌——自己保管好。
怎么开
安装时会询问是否启用(可选,默认不开);或随时单独开启:
sudo ./install.sh --setup-api
执行后会打印 API 地址 和 令牌。把仓库里的 webui/index.html 放到任意能访问的地方(或本地直接双击打开),填入地址和令牌即可。Telegram Bot 里发 /api 也能随时查看地址和令牌(点一下复制)。
接口同样可单独调用(JSON):/api/status、/api/exits/*、/api/rules*、/api/policy*、/api/traffic、/api/latency 等,方便自己做监控或自动化。
适用
Ubuntu 20.04+ / Debian 11+ / CentOS·Rocky·Alma / RHEL / Fedora,x86_64 / ARM64;512MB 小内存也能跑。仅用于合法的跨境业务互通与技术研究,请遵守当地法律法规。
部署网页控制台
index.html是一个纯静态、零依赖的单文件控制台,不需要构建、也不需要它自己的后端——它只是通过浏览器调用网关的 HTTP API。所以"部署"就是"把这个 HTML 放到一个能打开的地方",怎么简单怎么来。前置条件
在网关上启用 API(它才是真正的后端):
sudo ./install.sh --setup-api执行后会打印 API 地址(
https://你的网关域名:8443)和 令牌。在 Telegram Bot 里发/api也能随时查看。确认这个 API 端口(默认
8443)能从你浏览器所在的网络访问(--setup-api已自动放行防火墙)。方式一:本地直接打开(最快,自己用)
把
index.html下载到电脑,双击用浏览器打开即可。填入 API 地址和令牌就能用,令牌存在浏览器本地,下次自动连。适合自己临时用,不想折腾服务器。
方式二:丢到任意静态托管(零成本)
把
index.html传到任何能放静态文件的地方,比如:传上去就能用,没有别的步骤。
方式三:用 nginx + 自己的域名 + HTTPS(推荐,长期用)
适合给一个固定网址、手机电脑随时打开。以 Debian/Ubuntu + nginx 为例:
1. DNS
把你的面板域名(例:
panel.example.com)解析一条 A 记录指向这台 web 服务器的公网 IP。2. 放文件 + 配 vhost
# 1) 放 HTML sudo mkdir -p /var/www/panel.example.com sudo cp index.html /var/www/panel.example.com/index.html # 2) 写一个站点配置 sudo tee /etc/nginx/sites-available/panel.example.com >/dev/null <<'EOF' server { listen 80; listen [::]:80; server_name panel.example.com; root /var/www/panel.example.com; index index.html; add_header X-Content-Type-Options nosniff always; add_header X-Frame-Options SAMEORIGIN always; location / { try_files $uri $uri/ /index.html; } } EOF sudo ln -sf ../sites-available/panel.example.com /etc/nginx/sites-enabled/panel.example.com sudo nginx -t && sudo systemctl reload nginx3. 上 HTTPS(Let's Encrypt)
sudo apt install -y certbot python3-certbot-nginx # 如未安装 sudo certbot --nginx -d panel.example.com --agree-tos --redirect -m [email protected]certbot 会自动改好 nginx 配置、签发证书、加 HTTP→HTTPS 跳转,并自动续期。
打开
https://panel.example.com,填入 API 地址 + 令牌即可。更新面板
以后
index.html有更新,覆盖一份就行:sudo cp index.html /var/www/panel.example.com/index.html安全提醒
/opt/proxy-gateway/etc/api.env里的API_TOKEN,然后systemctl restart proxy-gateway-api。别推啦,穷鬼不配
和p0波动大都没解决 还掉包 我丢
@aprilowo #2 我自己折腾着玩的