Skip to content

About

GitHub 加速器 | GitHub accelerator —— Windows 本机代理,免插件、免服务器、零账号。内置 GitHub 真实 IP 表绕过 DNS 污染,BoringSSL(Chrome 同款 TLS 指纹)+ 伪装 SNI 直连官方边缘,clone / push / Release / raw / 网页全场景加速,公共镜像链兜底大文件,退出自动还原。GitHub proxy & mirror for China mainland.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

35 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitPort GitHub —— GitHub 加速器 · 跨站加速代理

中国大陆访问 GitHub 的本地加速器 —— 免插件、免服务器、后台仅 12MB。 clone、push、网页上传、Release 下载、raw 文件、头像、网页浏览全场景加速,其余网站流量完全不受影响。 直连流量本机直达 GitHub 官方边缘,不经任何第三方;大文件镜像链虽经公共镜像,凭据(Cookie/Authorization + 签名查询串)一律剥离或拒绝转发,不外泄。

这是什么

本机跑一个代理(127.0.0.1:7810)+ 一个管理页面(127.0.0.1:7811)。它只接管 GitHub 系域名:

  • 不查 DNS:内置 GitHub 真实 IP 表(plans.json),DNS 污染直接绕过
  • 连不上就换:IP 按表逐个试,坏的垫底自动降级,单点故障只慢不掉
  • TLS 指纹是 Chrome 同款:用 BoringSSL(Chrome 自己的 TLS 库)+ 伪装 SNI,绕过针对明文域名的阻断
  • 大文件多一条路:Release/源码包走镜像串行链,直连全灭时仍能下载

与常见方案对比:

方案 免插件 免服务器/账号 clone/push 后台占用 只碰 GitHub
GitPort GitHub ✅ PAC 一键 ✅ ✅ ~12MB ✅
改 hosts ✅ ✅ 部分 — ✅ 但 IP 失效即瘫
gh-proxy 网页镜像 — 靠第三方 ✗ — —
Watt Toolkit ✅ ✅ 部分 较高 ✅(多站点)
通用代理/VPN 视工具 ✗(需节点) ✅ 视工具 ✗ 全部流量

快速上手(3 步)

  1. 双击 gitport-github.exe(或 .\gitport-github.exe -tray 驻留托盘)
  2. 首次启动在 exe 同目录自动生成:ca.crt/ca.key(MITM 证书)、plans.json(IP 表)、settings.json(开关)——所有开关默认全关,逐项自己打开
  3. 打开工作台:先开「GitHub 分流接管」(写系统 PAC)→ 需要内容域直连/流式直通再开「MITM」(一键 certutil 装证书根)

不开 MITM 也能用(纯透传加速);开了 MITM 解锁内容域直连与流式直通,证书根由 WebUI 一键 certutil 安装。 系统代理接管在退出/关机时自动还原;崩溃强杀后的残留由下次启动自愈。

为什么选它

  • 隐私边界清晰 —— 直连腿本机直达 GitHub 官方边缘,不经任何第三方;镜像链剥凭据;不开 MITM 时纯透传,代理看不到内容
  • 后台常驻 12MB —— 关窗到托盘后整个 WebView2 释放,托盘态占用 ≈ headless
  • 全场景覆盖 —— 网页 / clone / push / Release / raw / 头像 / WebSocket
  • 故障自愈 —— 换 IP / 换 SNI 形态 / 换镜像 / 系统 DNS 兜底腿,GitHub 迁边缘 IP 也能自愈
  • 零服务器零账号 —— 双击即用,卸载就是删文件夹
  • 不依赖 DNS —— 内置 IP 表,污染免疫
  • 只碰 GitHub 流量 —— 不改其他软件的代理设置,退出自动还原

已知边界

做不到 原因 应对
支持 macOS / Linux 桌面框架是 Windows 专属 macOS 用户推荐 Watt Toolkit / Clash Verge
大文件上传快 伪装 SNI 链路上行为每流限速(2026-10-18 实测:单流 ~119KB/s;3 流并发聚合 1.52MB/s,每流还更快)——但 git push 的 pack 与 release 单附件都是单流协议(GitHub 无分片上传 API),聚合容量无法利用 多附件同时传即享并发(本就支持,无全局闸门);大文件优先走 release 附件上传(uploads.github.com 真名直拨单流实测 1.30MB/s,比 push 快 11 倍);中断后 git 整体重传
一劳永逸 GitHub 边缘 IP 会迁移 种子补缺 + 系统 DNS 兜底腿自动自愈,极端情况手改 plans.json
完全无门槛 开 MITM 需装本地根证书 WebUI 一键 certutil 安装;不装也能用(纯透传)
加速所有网站 只路由 GitHub 系域名 Google / YouTube 等请用通用代理
私库 release 附件走镜像 镜像链剥凭据 + 拒绝带签名查询串的请求(防 Cookie/token 外泄,2026-10-17 审计加固) 公库无感;私库附件 signed URL 镜像腿拒收,等直连恢复
内容域新建连接偶发被掐 GFW 对 Fastly 内容边缘(.133/.154/.215,真名 SNI)的间歇性阻断:新建 TCP 黑洞、已建连接复用正常(表现为 raw 图/头像/图表"忽快忽死") DNS 兜底腿 + 镜像链自动接管;窗口过去后自动恢复直连(2026-10-17 实测记录)
MITM 下用 schannel 系 CLI 工具 本地叶子证书无 OCSP/CRL 吊销信息(certgen.rs ocsp: None),Windows 系统 TLS 栈吊销检查硬失败(CRYPT_E_NO_REVOCATION_CHECK):curl.exe 直接拒绝握手,git 走默认 schannel 后端同样失败 curl --ssl-no-revoke;git config --global http.schannelCheckRevoke false(或 git 换 openssl 后端);浏览器吊销检查是软失败,网页使用无感。根治需本地 CRL/OCSP 端点,暂以客户端配置绕过
设置/工作区切换"秒开" 设置页与工作区切换在 GitHub 就是整页 HTML 服务端现生成——2026-10-18 实测(12 次连续点击全部复用连接、零握手)每次文档 545-878ms = 一个跨洋往返 + 服务器渲染,HTML 内容含会话状态无法缓存,GitHub 未提供客户端路由 代理已把它压到"1 RTT + 渲染"的物理下限(保活免握手 + gzip);直连约快 0.2-0.3s/次,但同样不是秒开

常见问题

git push 大包很慢怎么办?

伪装 SNI 链路的上行带宽有限(实测 ~115KB/s 级),与代理机制无关。流式直通已保证不 502 不堆积; 中断后重试即整体重传。详见「工作原理 → 大请求体与 git push」。

raw 文件偶发 6~8 秒才打开?

raw 的真名 SNI 被点名 RST,连败几个候补才拨通。内容域直连熔断(120s)+ 镜像兜底已就位, 之后自动走镜像,无需干预。

浏览器报证书风险?

MITM 开着但本地根证书未装/浏览器未重启。WebUI 开关自动 certutil 装根;装完重启浏览器一次。 不想要 MITM 就在 WebUI 关掉,退回纯透传。

和别的代理/工具端口冲突?

默认占 7810(代理)+ 7811(WebUI)。用 .\gitport-github.exe -port 7812 -webui 7813 换端口即可。

页面显示「暂时不可用」每 8 秒刷新?

真处于封锁窗口期(直连与镜像同时被波及),代理正在按表自动重试。窗口一过自动恢复,本页会自动刷新。

为什么 macOS 不支持?

桌面框架(tao/wry/托盘/tray-icon)按 Windows 实现(WebView2、certutil 装根、注册表 PAC)。 跨平台在 Roadmap,目前 macOS 用户推荐 Watt Toolkit。

工作原理

请求全流程(一张图)

从浏览器点开仓库到字节回到屏幕的完整链路:PAC 分流 → 代理入口 → 明文分流 → 上游拨号 → 失败兜底 → 回传压缩,外加旁路组件。

flowchart TB
    %% ===== ① 客户端 =====
    subgraph L1["① 客户端"]
        B["浏览器"]
        G["git / curl / CLI"]
    end

    %% ===== ② PAC =====
    subgraph L2["② 系统代理接管(PAC,可在 WebUI 关闭)"]
        P1{"域名判定"}
        WL["直连白名单:不入池、不过代理<br/>objects-origin · uploads.github.com · viewscreen"]
        PX["PROXY 127.0.0.1:7810"]
        OD["其余站点:直连"]
    end
    B --> P1
    G --> P1
    P1 -->|"白名单"| WL
    P1 -->|"池内域名(core / api / edge 三池)"| PX
    P1 -->|"其他"| OD

    %% ===== ③ 代理入口 =====
    subgraph L3["③ 本地代理 127.0.0.1:7810"]
        C1["CONNECT / 明请求"]
        M1{"MITM 开启 且 域名在池?"}
        PASS["纯透传 CONNECT<br/>裸 TCP 双向搬字节"]
        MITM["MITM<br/>本地终结 TLS → 明文请求"]
    end
    PX --> C1
    C1 --> M1
    M1 -->|"否(白名单 / 非池)"| PASS
    M1 -->|"是"| MITM
    PASS --> SD["系统 DNS 直拨<br/>上传 PUT 与 mermaid 渲染走这里"]

    %% ===== ④ 明文分流 =====
    subgraph L4["④ 明文分流"]
        Q{"路径判定"}
        S1["流式直通<br/>git 智能协议 / 声明体积超 1MB"]
        S2["大文件:镜像 only<br/>codeload · objects · release-assets · archive"]
        S3["内容域直连<br/>avatars · raw · camo · gist · media"]
        S4["主站 / api / auth"]
    end
    MITM --> Q
    Q --> S1
    Q --> S2
    Q --> S3
    Q --> S4

    %% ===== ⑤ 上游拨号 =====
    subgraph L5["⑤ 上游拨号(所有直连腿共用)"]
        D1["串发:三池一个 IP 一个试<br/>core 35 个主站边缘 · api · edge"]
        T1["boring Chrome TLS 指纹<br/>主站族 = 伪装 SNI · Fastly .133 = 真名 SNI"]
        H1["h2 多路复用 + 复用优先<br/>活跃窗口每 30s PING 保活(静默 5 分钟停)"]
    end
    S1 --> D1
    S3 --> D1
    S4 --> D1
    D1 --> T1
    T1 --> H1

    %% ===== ⑥ 兜底链 =====
    subgraph L6["⑥ 失败兜底(逐级尝试,绝不并发)"]
        GH["直连成功:数据到手"]
        GD["gh_defuse<br/>拦截页 → 该 IP 垫底,换下一个"]
        MK["镜像链(串行逐家)<br/>大文件全链 · 内容域限长前 5 家 · 单家 5s"]
        BRK["整链全灭 → 熔断 60s<br/>窗口内同域毫秒级失败"]
        DNSL["系统 DNS 直连腿(仅 GET / HEAD)"]
        E502["502 提示页<br/>GET 导航每 8s 自动刷新"]
    end
    H1 --> GH
    S2 --> MK
    S3 -.->|"直连全灭"| MK
    S4 -.->|"命中拦截页"| GD
    GD -.->|"全表全灭"| DNSL
    MK -->|"成功"| GH
    MK -->|"全灭"| BRK
    BRK -->|"内容域"| DNSL
    BRK -->|"大文件域:不回落直连,直接失败"| E502
    DNSL -->|"失败"| E502

    %% ===== ⑦ 回传与旁路 =====
    subgraph L7["⑦ 回传与旁路组件"]
        R1["回传压缩:github.com / api 强制 gzip 取上游<br/>解压嗅探前 4KB 判拦截页 · 原始压缩帧原样转发<br/>其余域名放行浏览器 br / zstd"]
        R2["响应注入 X-GitPort-Route / X-GitPort-Upstream 诊断头"]
        CA["本地 CA(certgen)→ Windows 证书库"]
        WUI["WebUI 7811<br/>状态 · 日志 · 池序 · 镜像校准 · 开关"]
        PLAN["plans.json(池序 + 镜像链)<br/>2s 去抖落盘,可手改"]
        TRAY["托盘 + WebView2 桌面壳(-tray / -headless)"]
        LOG["日志环形 2000 条 + 崩溃捕获"]
    end
    GH --> R1
    R1 --> R2
    R2 --> B
    MITM -.->|"按需现签叶子证书"| CA
    WUI --> PLAN
    WUI --> LOG
    TRAY --> WUI
    WUI -.->|"校准重排镜像链"| PLAN
Loading

拨号的记账细则(成功置顶 / 失败垫底 / 全灭熔断)见下节「串发拨号与 IP 轮换」;白名单判据见「直连白名单」。

直连白名单:有些域名不归代理管

三个域名被排除在代理之外,PAC 直接返回 DIRECT,浏览器用自己的解析直连,代理完全不参与:

  • objects-origin.githubusercontent.com(网页上传 Release 的落点):该 vhost 只由 GitHub 的 GLB 族 (140.82.11x.21/.22)服务,主站网页边缘对它一律 301 且不带 CORS 头——浏览器的跨域预检会直接失败, 文件一个字节都发不出去
  • uploads.github.com(API 式上传源站 alambic):直连让 DNS 交给源站本尊,等价 gh CLI 的已知可用路径
  • viewscreen.githubusercontent.com(mermaid 服务端渲染):走代理要用真名 SNI 拨 Fastly 内容边缘, 被间歇掐断且无镜像兜底(图表要等);浏览器直连有 DoH + ECH 加密 SNI,实测一进仓库即出图

与其在表里猜"哪个 IP 服务它",不如把这份知识还给 DNS。

进白名单的硬前提(判据):任何域名想直连,先查两件事——① 系统 DNS 有没有被污染;② 真名 SNI 会不会被 GFW 重置。 经验规律:

  • 解析到主站 GLB / 源站家族的域名(objects-origin、viewscreen → 140.82.11x.21/.22;uploads.github.com → alambic .161) → 无 DNS 污染、无 SNI 重置,可直连
  • 落在 Fastly 内容边缘 .133 的域名(raw / camo / avatars)→ 真名 SNI 被 RST(实测 TLS 握手失败: 远程主机强迫关闭了一个现有的连接 (10054))→ 必须走代理,直连必挂

2026-10-17 实测对照:

域名 系统 DNS 真名 SNI 结论
objects-origin 无污染(→ GLB 140.82.114.22) 无阻断 直连 ✅
viewscreen(mermaid) 无污染(→ GLB 140.82.114.22) 无阻断 直连 ✅
uploads.github.com 无污染(→ alambic .161) 无阻断 直连 ✅
raw 无污染(→ 185.199.110.133) 被 RST 走代理
camo 无污染(同一 IP) 间歇黑洞 走代理

判定原则:vhost → 边缘的映射只有 GitHub 的 DNS 知道;代理只接管"表能可靠覆盖"的域名 (主站 / API / Fastly 三族),其余交给系统 DNS。这条原则也解释了为什么"越多的 IP 假设"反而越脆弱。

串发拨号与 IP 轮换(核心细节)

每个请求的拨号都走下面这个循环。成功必须由数据层认证——握手通不算成功,拿到真实数据才算;失败则分层记账:

flowchart TD
    S["需要拨号 host=github.com"] --> T{"该池冷却中?<br/>(全灭后 30s)"}
    T -->|"是"| TERR["快速失败: 冷却剩余约 Ns"]
    T -->|"否"| U["取表快照, 从表头开始"]
    U --> V{"还有没试过的对口条目?<br/>(不对口直接跳过, 不试也不垫底)"}
    V -->|"否, tried=0"| W["无对口候选, 快速失败"]
    V -->|"否, 试过一圈"| W1["绕表全灭: 内容域不冷却<br/>其他池冷却 30s"]
    V -->|"是"| X["TCP 连 ip:443, 预算 3s"]
    X -->|"超时/拒绝"| Y["【拨号失败】该条目沉表尾<br/>试下一条"]
    X -->|"通"| Z["TLS 握手: boring 伪装SNI<br/>GREASE + ALPN, 必须协商出 h2, 预算 3s"]
    Z -->|"失败/被RST"| Y
    Z -->|"成功"| AA["发完整 HTTP 请求, 总预算 8s"]
    AA -->|"预算超时 或 零回包"| AB["【noreply】IP 垫底<br/>仅 GET/HEAD 记账; POST 不重发直接报错"]
    AA -->|"拿到真实数据"| AC["【ok】该 IP 整体置顶<br/>+ 入连接缓存: 同 host 下次复用 h2 免握手"]
    AA -->|"403 restricted / 400 Whoa 拦截页"| AE["【block】IP 垫底<br/>+ 清该 host 连接缓存防乒乓<br/>gh_defuse 换 IP 重试到全表"]
    Y --> V
    AB --> V
    AE --> V
    AC --> DONE["返回响应"]
Loading

轮换规则速查表(serial_move 的全部行为):

触发事件 判定层 动作 写盘与日志
拨号成功且拿到数据 数据层 ok 该 IP 整体置顶(组内相对序不变) 顺序真变更才置 dirty,2s 内原子写盘(tmp+rename);表头变了打一行轮换日志
TCP 连不上 / TLS 握手失败 拨号层 该单条沉表尾 同上
握手通但零回包 / 预算超时 数据层 noreply IP 垫底(仅 GET/HEAD 记账,POST 失败不污表) 同上
拦截页 403/400 数据层 block IP 垫底 + 清该 host 的连接复用槽(防"垫底→复用→再垫底"乒乓) 同上
同 IP 重复置顶(顺序没变) — no-op:不写盘、不打日志 否
请求预算到期(用户等不及) ctx 取消 只掐正在试的那条,不垫底、不冷却 否
绕表全灭,内容域 — 不冷却(镜像链兜底),直连熔断 120s 打一行日志
绕表全灭,其他池 — 冷却 30s 快速失败 打一行日志

对口规则(entry_serves,防止不同类请求互相污染池序):

host 类型 只认哪类条目 SNI 形态
*.githubusercontent.com 内容域 Fastly 末段 .133 真名(伪装会被该边缘挂起)
*.githubassets.com 静态资源 Fastly 末段 .154 / .215 伪装(抗 SNI 阻断)
github.io / *.github.io Fastly 末段 .153 伪装
主站 / api / auth 主机 非 Fastly 段 伪装 baidu.com

不对口的条目跳过不试也不垫底——否则每类请求都会把另一类的 IP 试败沉底,排序永远乒乓。

连接复用(快路径)

每 host 一个单槽缓存:完整成功过一次的链路(host→IP→h2 连接)才入槽。命中 = 零拨号零握手直接发请求; 失败 = 清槽重走串发。池序演化不主动切连接——缓存的连接活着就一直用,死了才换。

并发冷启动(一波页面几十个请求同时未命中缓存)走拨号单飞:只放一个进串发拨号,其余在 host 锁上排队; 首拨成功入槽后,排队者立即放锁、锁外并发复用(拨号锁只罩拨号等待,不罩请求发送——持锁到发送 会把单页 129 个并发资源压成逐个 RTT 串行,实测曾致首屏绘制 34 秒)。

活跃窗口内保活(2026-10-17):上游 h2 连接会被边缘按空闲回收(实测 50-65 秒),跨页面导航时 就变成"重新握手 1.3 秒"——表现为进入新页面的轻微换页感。对策:有请求后每 30 秒对所有已缓存的 连接(主站 / API / 头像图片样式族)发一个 h2 PING 帧(不发 HTTP 请求、不触风控、对端 ACK 即验活), 只续命真实请求建立过的连接、绝不预建新通道;静默 5 分钟后自动停——连续浏览时页面导航走缓存连接 (~300ms 首包,头像/图片同理),空闲时没有任何定时器,进程照常纯睡。

压缩传输

上游请求的 accept-encoding:github.com / api.github.com 强制 gzip(2026-10-17 起), 其余域名一律放行浏览器原生 br/zstd——GitHub 页面的 HTML/CSS/JS 全程压缩传输 (实测仓库页 327KB → 44.5KB、单页资源合计 3.7MB → 约 550KB)。 gh_defuse 的拦截页嗅探不受影响:代理侧边收边解压判前 4KB 明文,已消费的原始压缩帧原样转发 给浏览器(不重压缩、不改 content-length,解压由浏览器负责)。配合上游 h2 流控窗口 (流 1MB / 连接 4MB)与并发复用,这是"进仓库快"的完整链路——大仓库的大文档同样走 5-7 倍压缩。

镜像链(串行逐家;内容域限长前 5 家)

镜像链覆盖 9 个 host:8 个内容域(raw / gist / avatars / user-images / codeload / objects / release-assets / media) 加 github.com(专供 /archive 与 /releases/download 路径)。 CSS/JS 与 github.io 不过镜像(实测全 404),归 edge 直连池。

与直连串发同一哲学:一家失败再试下一家,绝不并发。 内容域小文件(头像/图片/gist/media) 只试链上前 5 家(每家 5s 预算)——把一张坏图标的最坏等待从"11 家逐家超时"收窄; 大文件走全链(逐家拉,不并发,避免多份大流量)。流程见上图「⑥ 失败兜底」。

链序从哪来:内置默认序(8 host × 11 镜像实测 TTFB 排好)→ UI「校准」按钮半自动重排 → 手改 plans.json。

校准两模式(2026-10-18,链序以校准为准,不写死任何一家):

  • 大文件校准(github.com / codeload / objects / release-assets 四链):5MB 真实下载竞速——四链串行、 链内 11 家并发、固定窗口 12 秒、每家上限 5MB,按窗口内实收字节数排名(先到 5MB 的是冠军,被窗口 掐掉的慢镜像按已收字节排后),字节读完即弃不落盘。TTFB 快 ≠ 下载快,大文件必须按吞吐排。 一轮流量约 30-50MB
  • 图片校准(raw / gist / avatars / user-images / media 五链):响应头测速——图片小,首包时间就是主要成本
  • host 之间严格串行:同一镜像服务多条链,跨链并发校准会让测量互相污染
  • 两种校准都是后台任务:点按钮立即返回,关窗进托盘任务继续跑完,防重入(进行中再点会被拒绝); 过程与报告见「运行日志」页,完成后新链序自动保存。注意:托盘右键退出会终止进行中的校准 镜像腿连接复用(2026-10-18):镜像请求改走共享连接池(每镜像最多 4 条空闲连接、60 秒回收、带空闲回收 定时器),同一镜像的后续请求免重新握手——图片批量加载与 Range 断点续传不再逐次付握手;日志里 [镜像拨号] 只在真正新建连接时出现,可直接观察复用是否生效。大文件单流吞吐由镜像本身决定,复用不改变它。 新镜像上线自动补到各链尾部。

多图仓库(README 塞 20+ 张图的)撞上直连+镜像双全灭窗口时,每张图原本都要串行烧完 11 家镜像才认输, 页面转圈几分钟;镜像熔断后第 2 张起毫秒级快速失败,窗口一过自动恢复。

大请求体与 git push(流式直通)

对请求体一刀切缓冲且有上限会让 git push 的大 pack 必挂,因此按下面规则转流式直通: 请求体不进内存,边收边泵给上游(h2 按对端授予的发送窗口分片,单次发送严禁超窗口), GB 级也不堆积(实测 28MB 泵送期间代理常驻内存仅 +3MB)。

请求形态 走法
POST …/git-receive-pack(push)/ POST …/git-upload-pack(fetch 协商) 必流式(无论大小)
声明 content-length > 1MB 的其他请求(PUT 上传等) 必流式
声明未超限、实际读着读着超了 缓冲转流式:已读的 ≤1MB 前缀作为首块续泵,不丢请求
GET / HEAD / 常规小体 原有缓冲路径(可重放重试),行为不变

关键语义:

  • 响应头一到立即交付客户端——上游可能收到一半就拒绝(如 413),客户端必须拿到 GitHub 的真实响应而不是代理的 502
  • 截断保护:客户端上传中途断开,泵弃流不补 EOS——git pack 尾部带校验和,截断包必须被服务端拒绝,绝不能被当完整包处理
  • 单次尝试:与既有"非简单方法不重发"一致;连接失效且体未动时允许换新拨重试一次,泵启动后不重试(git 客户端自身会重试)
  • 流式响应头预算 1800 秒(git push 大包时服务端收完包并解包校验才应答)

术语速查

网络与封锁

名词 大白话
域名 / IP 地址 域名是"名字",IP 是"门牌号"。github.com 是名字,140.82.112.3 是门牌
DNS 查号台:把名字翻译成门牌。查号台可被投毒(给你假门牌)——本程序根本不问它,内置了一张 GitHub 真门牌表(plans.json)
TCP 连接 电话拨通。拨不通 = 这个 IP 当下不可用
TLS 握手 / HTTPS 电话接通后先对暗号、换加密频道,之后通话内容外人听不懂
SNI 握手第一句里明文写的"我要找 xx 域名"。审查就盯着这一句看
ALPN / h2 对暗号时顺便约定讲哪种方言(HTTP/2 还是老的 1.1)。GitHub 边缘要求必须协商出 h2
RST 掐断电话:连接被中途强制挂断
黑洞 石沉大海:包发出去永远没有回音
CONNECT 隧道 浏览器对 HTTPS 站点用的方式:代理只负责"接通电话然后搬运加密箱",箱里是什么看不见
MITM(中间人) 代理持有本地钥匙,把箱子拆开看明文、必要时换条路重发,再重新装箱给浏览器。需要浏览器信任代理自办的"工作证"(CA 证书)
CA 证书 自办工作证。ca.crt 装进系统"受信任的根"后,浏览器才认代理现签的证书
指纹(JA3) TLS 握手第一句的"笔迹"——套件顺序、扩展排列。笔迹像个脚本库会被认出来;本程序用 boring(BoringSSL = Chrome 自己在用的 TLS 库),笔迹天然是 Chrome 同款,不是仿的
封锁 原理 本程序的绕法
DNS 污染 查号台给假门牌 不查号,内置真 IP 表
SNI 阻断 盯握手第一句的明文域名,看到 github 就掐 伪装 SNI:第一句写 baidu.com,证书却按真域名验证(SNI 与校验名解耦)。例外:185.199.x.133 这个边缘伪装会被挂起,只能真名
IP 黑洞 门牌本身被断路 串发换 IP:按表逐个试,坏的垫底换下一个
风控 服务器认得你,故意回拦截页(403 restricted / 400 Whoa) gh_defuse:本地认出拦截页,该 IP 垫底,换 IP 重试到全表

本项目机制词

名词 大白话
IP 池 某类域名的候选 IP 排队名单,存 plans.json。三个池:core(主站)/ api / edge(授权+静态+内容域)
表头 名单第一名 = 现在正在用的
串发 排队逐个试,一把锁不开换下一把(对比:竞速 = 全部一起试,会打爆公共镜像,已弃用)
置顶 / 垫底 排队次序调整:通的升表头,坏的沉表尾
冷却 绕表全灭后 30 秒内快速失败,不反复烧表
熔断 跳闸:内容域直连失败一次,120 秒内直接走镜像,不再逐个烧 IP;镜像链全灭同理——60 秒内该域快速失败,不再逐家烧链
流式直通 大请求体(git push 的 pack、超 1MB 的上传)不进内存缓冲,边收边泵给上游——GB 级也不堆积,响应头一到立即回传
镜像链 每种资源的"复印店优先级名单"(gh-proxy 系 11 家),串行逐家用
预算 一次尝试最多等几秒(拨号 3s、响应 8s、镜像响应头 5s、流式响应头 1800s——git push 大包服务端收完包才应答)
首字节看门狗 电话通了但对方 8 秒不吭声 → 判死
gh_defuse 拦截页化解机制的名字

高级配置

命令行参数

.\gitport-github.exe            # 默认:桌面壳 + 托盘
.\gitport-github.exe -headless  # 无窗口:只跑代理 + 管理页面
.\gitport-github.exe -tray      # 开机自启用:直接驻留托盘
.\gitport-github.exe -port 7812 -webui 7813   # 与其他实例共存时换端口

plans.json 手改指南

{
  "core": [
    { "ip": "140.82.112.3", "sni": "baidu.com" },
    { "ip": "20.205.243.166" }
  ],
  "api":  [ { "ip": "140.82.112.5", "sni": "baidu.com" } ],
  "edge": [ { "ip": "185.199.108.133", "sni": "sni" } ],
  "mirrors": {
    "raw.githubusercontent.com": ["https://gh-proxy.com", "https://ghfast.top"]
  }
}
  • 条目顺序 = 优先级,第一行是表头;sni 省略或写裸域名 = 伪装;"sni": "sni" = 真名(仅 .133 需要)
  • 手改重启生效;运行中的轮换 2 秒内自动写回(手改请先关代理,避免被写回覆盖)
  • 表会自愈:缺池/缺新边缘 IP 时启动自动从内置种子补齐(只追加尾部,不打乱你排的顺序);池外镜像/未知 host 写了也会被剥掉
  • 镜像链里只能写内置 11 家,顺序随意

认 IP 速查(哪个 IP 干什么活)

条目放哪个段不影响行为——代码按 IP 末段路由(entry_serves),段只是容器。认 IP 看末段和前缀:

看到这种 IP 它是谁 干什么活 SNI 形态
140.82.x.3 / .4 主站边缘 github.com 网页 伪装
140.82.x.5 / .6 API 专用边缘 api.github.com(与网站 IP 互斥) 伪装
140.82.x.29 / .30 授权边缘 githubapp.com 登录/OAuth 回调 伪装
20.205.243.161 上传源站(alambic,单租户) uploads.github.com(API 式上传;网页上传 Release 走 objects-origin 直连白名单,不经此 IP) —(直连白名单,代理不拨它)
20.x.x.x(Azure 段)、4.237.x、172.182.x 等杂段 主站边缘备选 github.com 网页 伪装
185.199.x.133 Fastly 内容边缘 avatars / raw / gist / camo 等 githubusercontent 族 真名(伪装会被该边缘挂起)
185.199.x.215 Fastly 静态边缘(新,2026-10 起 assets 已迁至此) githubassets 的 CSS/JS 伪装
185.199.x.154 Fastly 静态边缘(旧代边缘,2026-10 中曾失联后又复活——状态波动,以实测为准) 同上 伪装
185.199.x.153 Fastly Pages 边缘 github.io 站点 伪装

即:末段 .3/.4 = 网页,.5/.6 = API,.29/.30 = 授权,20.205.243.161 = 上传源站;185.199 段看末段——.133 = 头像内容,.215 = 静态(新),.154 = 静态(旧),.153 = Pages。 185.199.x.133 条目的 sni 恒为 "sni"(真名),一眼即可认出;185.199 段带伪装的就是静态/Pages 边缘。 此分工由边缘行为实测标定, plans.json 里的段位置、你手写的 sni(对 185.199 段)都改变不了它。

分流域名总表

流量 上游路径
github.com 及其余子域 core 池直连串发(伪装 SNI)+ gh_defuse
api.github.com api 池直连串发(API 专用边缘,与网站 IP 互斥)
uploads.github.com 直连白名单(API 式上传源站;不入池、不过代理,DNS 直达 alambic .161——等价 gh CLI 可用路径;原专用池与验收名覆盖已随之删除。网页上传 Release 实际走 objects-origin)
viewscreen.githubusercontent.com 直连白名单(mermaid 服务端渲染;代理腿真名 SNI 被间歇掐且无镜像兜底,直连走浏览器 DoH/ECH 加密 SNI——2026-10-17 实测直连即出图)
githubapp.com(授权)、githubassets、github.io edge 池直连串发
avatars/camo/gist/raw 等内容域 edge 直连优先 → 熔断后镜像链
codeload / objects / release-assets 镜像 only
github.com 的 /archive、/releases/download github.com 镜像链,串行取用,全灭 502
objects-origin.* 直连白名单(不入池、不过代理,系统 DNS 直达 GLB 族——该 vhost 仅 GLB 服务,主站边缘对其 301 无 CORS → 浏览器跨域预检失败、上传必败。2026-10-17 逐 IP 实测)
其余一切域名 系统 DNS 直连,不经任何表

WebUI 功能(127.0.0.1:7811)

  • 概览:运行状态、代理地址、连通徽标、最近日志
  • IP 池:三池条目一览(顺序即优先级,表头即正在用);objects-origin 与 uploads.github.com 是直连白名单(不入池、不上 UI,日志不会出现它们的隧道记录,属正常)
  • 设置:开机自启、关窗到托盘(✕ = 释放整个 WebView2,托盘态只剩代理核心约 12MB ≈ headless;点托盘图标随时重开工作台)、GitHub 分流接管(PAC)、MITM 开关(自动 certutil 装根,装完重启浏览器一次)
  • 镜像链校准:两种(大文件链 5MB 下载竞速 / 图片链响应头测速),均为后台任务,关窗进托盘继续跑完,过程与报告见运行日志页

构建与验证

cargo build --release   # 产物 target\release\gitport-github.exe(连同 assets\icon.ico 即为 dist)
cargo test              # TLS 握手探针、迁移归一、轮换 no-op 等行为契约

Roadmap

  • 多站点加速(HuggingFace 等):拨号引擎、串发表、镜像链均为数据驱动,扩服务 = 加数据不改代码;自建 worker 反代通道已预留设计

声明

  • 本工具仅供学习网络原理与个人自用提速,请遵守所在地区法律法规,使用产生的一切后果由使用者自行承担
  • 本项目与 GitHub 无任何隶属或合作关系
  • 镜像链依赖的第三方公共镜像与本项目无关,可用性随它们变化

About

GitHub 加速器 | GitHub accelerator —— Windows 本机代理,免插件、免服务器、零账号。内置 GitHub 真实 IP 表绕过 DNS 污染,BoringSSL(Chrome 同款 TLS 指纹)+ 伪装 SNI 直连官方边缘,clone / push / Release / raw / 网页全场景加速,公共镜像链兜底大文件,退出自动还原。GitHub proxy & mirror for China mainland.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages