自动抓取 VPN Gate 的 SSTP 家宽/机房节点,调用检测 Worker 逐个验证可用性,按国家分组、标注住宅/机房,生成可直接粘贴进 edgetunnel 后台的链式代理清单。每 30 分钟自动更新一次。
核心价值:VPN Gate 的 SSTP 节点 30 分钟就换一批,手动测试筛选太痛苦。本仓库把它全自动了——你只需定期打开一个固定 URL 复制粘贴。
本项目建立在以下开源项目之上:
| 项目 | 用途 | 链接 |
|---|---|---|
| cmliu/edgetunnel | VLESS 代理 + 链式代理(节点备注里的链式代理指令),节点最终通过它使用 | https://github.com/cmliu/edgetunnel |
| lsh8848/cm-Workers-CheckSocks5 | 检测 Worker:验证 SSTP 节点可用性并读取出口 IP(住宅/机房判定) | https://github.com/lsh8848/cm-Workers-CheckSocks5 |
| fdciabdul/Vpngate-Scraper-API | VPN Gate 节点数据的 GitHub 镜像(官方源失效时回退) | https://github.com/fdciabdul/Vpngate-Scraper-API |
| VPN Gate | SSTP 节点数据源 | https://www.vpngate.net/ |
VPN Gate 官方源
│ (每 30 分钟,GitHub Actions 定时抓取)
▼
筛选 SSTP 节点 → 去重
│
▼
检测 Worker (CheckSocks5,部署在 Cloudflare)
│ GET /check?sstp=vpn:vpn@host:port
│ 返回 success + 出口 IP(住宅/机房判定)
▼
保留成功节点 → 按国家分组 → 住宅/机房标注 → 延迟排序
│
▼
生成 hosts.txt (走 GitHub Pages 发布)
│ 你全选复制
▼
粘贴进 edgetunnel 后台「自定义优选IP」框
│ edgetunnel 自动把链式代理指令编码进节点 path
▼
客户端订阅 edgetunnel 订阅 → 使用 SSTP 家宽节点
- 一个 Cloudflare 账号(免费即可)
- 一个 GitHub 账号
- 一个已经部署好的 edgetunnel(含自己的域名 + UUID,部署方法见 edgetunnel 文档)
下文所有「你的GitHub用户名 / 仓库名 / 域名 / UUID / Worker域名」都是占位符,替换成你自己的。
检测 Worker 负责验证「SSTP 节点能不能用」以及「出口是住宅还是机房」,必须自己部署一个:
- 打开 https://github.com/lsh8848/cm-Workers-CheckSocks5 ,点 Fork(或直接下载其中的 _worker.js)
- 进 Cloudflare 控制台 → Workers 和 Pages → 创建 → 创建 Worker
- 把 _worker.js 的全部内容粘贴进编辑器,点「部署」
- 记下这个 Worker 的域名,形如 https://xxx.你的用户名.workers.dev (也可绑自定义域名)
- 验证:浏览器打开 https://你的Worker域名/check?sstp=vpn:vpn@任意节点:端口 ,能返回 JSON 即成功
该 Worker 不需要任何环境变量、没有鉴权,部署完即用;它原生支持 SSTP 检测,无需改代码。
在 GitHub 上打开本仓库,点 Fork,复制到你账号下(变成 你的GitHub用户名/仓库名)。
进你 fork 的仓库,改下面几处:
| 文件 | 位置 | 改成什么 | 为什么 |
|---|---|---|---|
| .github/workflows/check.yml | env 里的 CHECK_WORKER | 你的检测 Worker 域名,形如 https://xxx.workers.dev/check?sstp=vpn:vpn@ | 检测统一走你自己的 Worker |
| vpngate.py | 约 515 行 EDT_DOMAIN | 你的 edgetunnel 域名 | 链式代理入口的 SNI/host |
| vpngate.py | 约 514 行 EDT_UUID | 你的 edgetunnel UUID | 链式代理编码密钥 |
| vpngate.py | 约 455 行 EDGE_HOSTS | 你测出来的优选域名 | 入口用谁,决定稳不稳 |
| vpngate.py | CHAIN_URL / HOSTS_URL / SUB_URL | 把里面写死的固定地址换成 你的用户名/仓库名 | 清单注释头里的固定地址 |
| .github/workflows/check.yml | 最后的 Show site URL | 把里面写死的站点地址换成你的 | 运行日志里显示的站点地址 |
CHECK_WORKER 通过 workflow 环境变量传给脚本、会覆盖 vpngate.py 里的默认值,所以检测 Worker 域名只需在 workflow 里改一处。EDT_DOMAIN / EDT_UUID / EDGE_HOSTS 是 vpngate.py 里的默认值,直接改源码。
- 进你 fork 的仓库 → Settings → Pages,Source 设为 GitHub Actions(首次运行 workflow 也会尝试自动开启)
- 进 Actions 页,若提示启用 Actions 就点启用
- 手动触发一次:Actions → VPN Gate Node Check → Run workflow → Run workflow
- 等它跑完(约 1 分钟),看到绿色 ✓ 即成功
跑完后,你的站点地址是:
https://你的GitHub用户名.github.io/仓库名/hosts.txt
浏览器打开,能看到一堆「优选域名:443#国家-住宅-XX …」的行,就说明全部打通了。
- 已部署 edgetunnel(自己的域名 + UUID)
- 一个客户端:v2rayN / Clash Verge / v2rayNG 等
- 打开 https://你的GitHub用户名.github.io/仓库名/hosts.txt
- 浏览器里 Ctrl+A 全选 → Ctrl+C 复制
- 进 edgetunnel 后台(你的域名/admin),找到「自定义优选IP」文本框
- 光标移到现有内容末尾,Ctrl+V 粘贴
- 点保存(右下角提示「自定义IP已保存」)
- 客户端里更新/刷新订阅(订阅地址是 edgetunnel 后台给你的那个)
- 测延迟,选一个节点用
节点名格式:国家-住宅-编号 / 国家-机房-编号,例如 日本-住宅-01、韩国-机房-02。住宅和机房各自独立编号,一眼区分。
节点每 30 分钟换一批,想换新节点时:重新打开 hosts.txt → 全选复制 → 覆盖粘贴。名字保持不变,只是背后的节点地址换了。
入口地址用的是「优选域名」,决定客户端连 Cloudflare 用哪个 IP、稳不稳。域名被墙或延迟高,可用节点就少。
- 文件:vpngate.py
- 位置:约 455 行 EDGE_HOSTS = [ ... ]
- 用测速工具(如 bestcf)测一批 Cloudflare 优选域名,挑「延迟低 + 实际能连通」的
- 打开 vpngate.py,把 EDGE_HOSTS 里的域名列表换成你测出来的(逗号分隔,格式 域名:443)
- 提交推送,等下一次自动运行(最多 30 分钟)或手动触发 Action
EDGE_HOSTS = [
h.strip()
for h in os.environ.get(
"EDGE_HOSTS",
"saas.072159.xyz:443,hzytjy.cn:443,ali.nonull.pp.ua:443,"
"auto.dolby.dpdns.org:443,cdn.cnno.de:443,saas.sin.fan:443,"
"cf.777791.xyz:443",
).split(",")
if h.strip()
]- 只留实测能通的域名:bestcf 里延迟低 ≠ 一定能通,挑「延迟低 + 实际连接成功」的
- 数量建议 5~10 个:太少单域名负担重,太多容易混进被墙的域名拖累可用率
| 常量 | 约位置 | 说明 |
|---|---|---|
| EDGE_HOSTS | 455 行 | 入口优选域名(换域名改这里) |
| EDT_DOMAIN | 515 行 | 你的 edgetunnel 域名 |
| EDT_UUID | 514 行 | 你的 edgetunnel UUID |
| EDT_FINGERPRINT | 516 行 | TLS 指纹(默认 chrome) |
| WORKER_CHECK_URL | 54 行 | 检测 Worker(本地运行默认值,Action 里用 workflow 的 CHECK_WORKER 覆盖) |
| COUNTRY_ZH | 78 行 | 国家中文名映射 |
入口优选域名大部分被墙。用 bestcf 重新测速,把 EDGE_HOSTS 换成实测能通的域名(见「三」)。
检查:edgetunnel 是否部署好、域名是否解析到 Cloudflare、UUID 是否填对、传输协议是否对得上(默认按 ws/TLS 生成)。
到 Actions 页看最近一次运行是否成功、cron 是否还在(.github/workflows/check.yml 里的 */30 * * * *)。
确认 Worker 部署成功、域名填对(workflow 里的 CHECK_WORKER),浏览器直接访问 https://你的Worker/check?sstp=... 看是否返回 JSON。
流水线:GitHub Actions(每 30 分钟 cron) → vpngate.py → 检测 Worker → GitHub Pages