Skip to content

siruoren/NetHub

Repository files navigation

NetHub v2.0.0

自动获取、检测、维护节点池,提供 Web 管理界面和订阅链接输出。

功能特性

  • 订阅源管理 - 数据库驱动的增删改查,每个订阅源独立配置 Crontab、延迟阈值、并发数;删除订阅源时自动清除其下所有节点
  • Crontab 定时拉取 - 每个订阅源支持 5 位 Crontab 表达式,内置随机延迟(0~10 分钟)避免多源同时更新
  • 内核转发检测 - Xray 内核转发后检测连通性,TCP/TLS 直接检测作为回退;多目标 URL 轮询 + 响应体验证 + 检测重试
  • 检测失败直接删除 - 取消失败计数累积,检测不通过的节点直接从数据库删除
  • 节点-订阅绑定 - 每个节点绑定所属 subscription_id,已存在于其他订阅的节点不重复入库
  • 纯文本订阅输出 - 每行一条原始代理 URI,参照 subdom.txt 格式;同时提供 Clash(YAML)格式
  • 多协议支持 - vmess / vless / trojan / ss / hysteria2 / socks5 / http(s) 解析、检测与 Clash 配置生成
  • 服务实例源 - 获取已连接节点数量统计(不入库),支持手工导入实例源中的订阅地址
  • 配置导出/导入 - 一键导出订阅源和实例源配置为 JSON 文件(含时间戳),导入时自动去重
  • UTC+8 时区统一 - 所有服务时间统一为东八区
  • 单文件日志 - 不归档、不保留历史日志
  • Docker 部署 - Docker Compose 一键启动

快速开始

Docker Compose(推荐)

git clone https://github.com/your-username/proxy_pool.git
cd proxy_pool

# 按需修改配置
vim config.yaml

# 启动服务
docker-compose up -d

访问 http://localhost:2020 查看 Web 界面。

本地运行

# 安装依赖
pip install -r requirements.txt

# 启动服务
python -m app.main

配置说明

编辑 config.yaml

server:
  host: "0.0.0.0"
  port: 8080
  debug: false

database:
  path: "data/proxy_pool.db"

check:
  timeout: 5.0                   # 检测超时(秒)
  max_concurrent: 50             # 全局并发检测数
  latency_threshold: 1500.0      # 全局延迟阈值(毫秒)
  check_mode: "auto"             # 检测模式: auto(优先内核转发回退TCP) / http(仅内核转发) / tcp(仅TCP/TLS)
  socks_port: 1080               # 本地 SOCKS 转发端口
  http_port: 1081                # 本地 HTTP 转发端口
  kernel_path: "xray"            # 内核可执行文件路径
  check_retries: 2               # 单次检测失败后重试次数

scheduler:
  fetch_interval: 3600           # 拉取订阅间隔(秒)
  verify_interval: 1800          # 验证节点间隔(秒)
  cleanup_interval: 7200         # 清理间隔(秒)

检测目标 URL 默认包含 Google 204、Gstatic 204、Cloudflare、Apple、华为连通性检测等,首次启动自动写入数据库,后续在页面「检测目标」中管理,修改即时生效。

环境变量

变量 说明 默认值
PROXY_POOL_PORT 服务端口 8080
PROXY_POOL_DB_PATH 数据库路径 data/proxy_pool.db

API 接口

节点

方法 路径 说明
GET /api/proxies 可用节点列表
GET /api/proxies/all 所有节点
GET /api/proxies/grouped 按 subscription_id 分组的可用节点
DELETE /api/proxies/{id} 删除节点
DELETE /api/proxies 一键清除所有节点

订阅输出

方法 路径 说明
GET /api/subscription/plain 纯文本格式(每行一条 URI)
GET /api/subscription/v2ray 纯文本格式(同 plain)
GET /api/subscription/clash Clash 格式(YAML)

订阅源管理

方法 路径 说明
GET /api/subscriptions 订阅源列表
POST /api/subscriptions 添加订阅源
POST /api/subscriptions/auto 自动添加(仅 URL 必填,自动拉取验证)
PUT /api/subscriptions/{sub_id} 更新订阅源
DELETE /api/subscriptions/{sub_id} 删除订阅源及其下所有节点

拉取与验证

方法 路径 说明
POST /api/fetch 拉取所有订阅
POST /api/fetch/{sub_id} 拉取指定订阅
POST /api/verify 验证所有节点
POST /api/verify/{sub_id} 验证指定订阅节点

服务实例源

方法 路径 说明
GET /api/instance-sources 服务实例源列表
POST /api/instance-sources 添加服务实例源
PUT /api/instance-sources/{source_id} 更新服务实例源
DELETE /api/instance-sources/{source_id} 删除服务实例源
POST /api/instance-sources/{source_id}/fetch 获取实例源已连接节点数
POST /api/instance-sources/{source_id}/import 导入实例源订阅

配置管理

方法 路径 说明
GET /api/config/export 导出配置(JSON)
POST /api/config/import 导入配置(JSON,自动去重)

检测目标

方法 路径 说明
GET /api/check-urls 检测目标 URL 列表
POST /api/check-urls 添加检测目标 URL
DELETE /api/check-urls/{url_id} 删除检测目标 URL

其他

方法 路径 说明
GET /api/stats 统计信息(总订阅条目数、可用节点数、平均延迟)
GET /api/health 健康检查

订阅链接使用

在节点客户端中添加以下订阅链接:

  • 纯文本: http://your-server:2020/api/subscription/plain
  • Clash: http://your-server:2020/api/subscription/clash

订阅内容仅包含延迟低于阈值的可用节点,随节点池自动更新。

支持协议

协议 订阅解析 Clash 生成
VMess
VLESS
Trojan
Shadowsocks
Hysteria2
SOCKS5
HTTP/HTTPS

socks4/socks4a 协议不再支持,拉取时自动移除。

延迟检测原理

延迟检测模拟真实上网场景:通过 Xray 内核转发访问目标检测 URL,测量完整请求延迟。

客户端 → Xray 内核转发 → 目标网站
         ├── DNS 解析
         ├── TCP 连接建立
         ├── TLS 握手(HTTPS 目标)
         └── HTTP 请求/响应
  • 检测目标包含 Google 204、Gstatic 204、Cloudflare、Apple、华为连通性检测等
  • 多个目标取最大延迟值,确保所有目标均可达
  • 响应体验证排除劫持页面和空响应
  • 单次检测失败后自动重试(默认 2 次)
  • 检测失败节点直接删除,不保留

项目结构

proxy_pool/
├── app/
│   ├── __init__.py          # 应用工厂 & 全局单例
│   ├── main.py              # 启动入口
│   ├── config.py            # YAML 配置加载
│   ├── database.py          # aiosqlite 异步数据库操作
│   ├── models.py            # 数据模型(ProxyInfo / ProxyDBRecord / SubscriptionRecord)
│   ├── parser.py            # 订阅拉取 & 解析(7 协议)
│   ├── checker.py           # 内核转发检测 + TCP/TLS 回退检测
│   ├── generator.py         # 纯文本 / Clash 订阅生成
│   ├── scheduler.py         # APScheduler 定时任务调度
│   ├── routers/
│   │   ├── api.py           # REST API 路由
│   │   └── web.py           # Web 页面路由
│   └── templates/
│       ├── base.html        # 基础模板
│       ├── index.html       # 主页面(管理 + 节点列表)
│       └── subscription.html # 订阅链接页
├── logs/                    # 日志目录(单文件,不归档)
├── data/                    # 数据库目录
├── config.yaml              # 配置文件
├── docker-compose.yaml      # Docker 编排
├── Dockerfile               # Docker 镜像
├── CHANGELOG.md             # 变更日志
└── requirements.txt         # Python 依赖

License

MIT License

About

自动获取、检测、维护节点池,提供 Web 管理界面和订阅链接输出。

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors