位置固定:exe 同目录(与 routes.json 同级)。启动读一次,任一开关变更即整份重写。
{
"closeToTray": true,
"mitm": true,
"winRect": [641, 278, 1820, 1394],
"githubPAC": true,
"proxyBackup": "",
"lastIp": {
"core/all": "20.27.177.114",
"api/all": "140.82.114.6",
"edge/content": "185.199.110.133",
"edge/assets": "185.199.108.154",
"edge/io": "",
"edge/auth": ""
}
}lastIp的 6 个键由pool::circle_keys()派生(SERIAL_POOLS×POOL_ROUTES族表),从上到下顺序固定、不可调换;写盘恒为全量 6 位,未驻留的族写""""/ 缺键 / 整段lastIp缺失,三者行为等价:该族游标为空,串发从表序 0 号位起步。写空串的唯一意义是让 schema 一眼看全、diff 稳定- 手改容错:漏键 → 该键回默认;某字段类型写坏(如
winRect写成字符串)→ 只回退该字段,不连坐整份配置;lastIp读兼容对象与[[k,v],…]数组两种形态(写只写对象) - 布尔键缺失 =
false;winRect缺失或宽高小于 400×300 时按默认位置开窗
{
"routes": {
"api.github.com": {
"pac": "api.github.com",
"plans": [
{ "ip": "140.82.112.5", "sni": "baidu.com" }
]
},
"github.com": {
"pac": "github.com",
"plans": [
{ "ip": "140.82.112.3", "sni": "baidu.com" },
{ "ip": "20.205.243.166" }
]
},
"*.githubusercontent.com": {
"pac": "githubusercontent.com",
"content": true,
"fallback": "mirror",
"plans": [ { "ip": "185.199.108.133", "sni": "baidu.com" } ],
"realPlans": [ { "ip": "185.199.108.154", "sni": "" } ]
},
"objects-origin.githubusercontent.com": {
"pac": "objects-origin.githubusercontent.com",
"action": "direct"
}
},
"mirrors_big": {
"codeload.github.com": ["https://gh-proxy.com", "https://ghfast.top"],
"release-assets.githubusercontent.com": ["https://gh-proxy.com"]
},
"mirrors_small": {
"raw.githubusercontent.com": ["https://gh-proxy.com", "https://ghfast.top"]
}
}-
键就是域名,只有两种写法:
github.com= 自己 + 任意级子域;*.github.com= 只认子域(裸域不命中) -
多条同时命中时取最长的键,所以
api.github.com天然压过github.com——不用操心书写顺序 -
plans是伪装腿的候选 IP,realPlans是真名腿(隧道 /real: true)额外可用的候选;条目顺序 = 优先级,第一行是表头,ip/sni写法见下 -
action: "direct"不进代理;real: true真名 + ClientHello 分片;content: true走内容域熔断与短响应预算;donor: true允许被借道 -
fallback:省略 =dns(全灭后走系统 DNS 兜底腿);mirror= 全灭后走镜像链 -
pac决定这个域名进不进 PAC 名单:不写就等于系统直连,代理完全看不到它 -
老版本(0.5.3 及以前)的
routes数组 +match正则写法仍能读,启动时自动折算成域名键,下次落盘就变成上面的格式;只认程序当年生成的三种形态((.*\.)?x、.*\.x、字面量),手写的其他正则会连同原文件备份后丢弃 -
镜像链分两个字典:
mirrors_big= 大文件域(objects / release-assets,分片竞速),mirrors_small= 图片与文本资源域(raw / gist / avatars / user-images / media / codeload);分类权在域名,条目放错字典启动时也会被归位 -
「自定义镜像」列表 = 镜像链的全部内容(不是追加项):手改进 routes.json 的条目重启后会被收编进列表,此后以列表为准;界面保存前会自动合并服务端最新清单,旧页面不会覆盖新收编条目
-
默认安装不带任何镜像(双字典为空):小文件走直连兜底;大文件域无链时候选仅直连(伪装 SNI 直拨),直连也被阻断才 502——502 页面会指引补镜像
-
旧版单字典
"mirrors"仍可读(启动自动按域名归类),下次落盘转为双字典 -
大文件域选谁不按链序硬排:代理按「预计最早下完」在镜像与直连之间动态分流(ECT 时间槽);链序只决定失败时的顺延次序。codeload 已并入小文件派发:直连优先,失败按校准链序逐家
-
条目顺序 = 优先级,第一行是表头;
sni原样透传进 TLS 握手,代理不解释:带点域名 = 伪装(SNI=所写值,哪怕碰巧写真名);""= 无 SNI(ClientHello 不带扩展);要真名就把 host 名写进 sni。非法字符(防注入)该条剥除 -
表序固定、运行时零重排:串发从 settings.json 记忆的游标(上次驻留 IP)起步,沿表顺序转圈——成功驻留、失败沿圈前进(dead 表跳过死位);想让某条先被试,把它排到前面即可。运行时唯一写盘 = 故障转移时 settings.json 里几字节的游标更新
-
手改重启生效;运行中的轮换 2 秒内自动写回(手改请先关代理,避免被写回覆盖)
-
表会自愈:缺 IP 时启动自动从内置种子补齐(只追加尾部,不打乱你排的顺序);池外镜像/未知 host 写了也会被剥掉
-
镜像链数据权威:任何支持拼接的 https 镜像都可写(含自部署),顺序 = 优先级;无白名单校验,坏镜像运行期自然失败沉底;缺链 host = 无镜像腿
-
seeds.json 是生成物:routes.json 的全量快照(路由表 + 镜像链),仅用于全新安装引导和补缺,勿手改——更新方式 = 停代理后用调好的 routes.json 覆盖它
条目放哪个段不影响行为——代码按 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(直连白名单,代理不拨它) | — |
20.x.x.x、4.237.x、172.182.x 等杂段 |
主站边缘备选 | github.com 网页 | 伪装 |
185.199.x.133 |
Fastly 内容边缘 | avatars / raw / gist / camo 等 | 伪装(2026-10-19 晚起,原真名) |
185.199.x.215 |
Fastly 静态边缘(新) | githubassets 的 CSS/JS | 伪装 |
185.199.x.154 |
Fastly 静态边缘(旧代,状态波动以实测为准) | 同上 | 伪装 |
185.199.x.153 |
Fastly Pages 边缘 | github.io 站点 | 伪装 |
140.82.x.9、20.205.243.165、20.27.177.114 |
codeload 专用边缘 | 源码包打包服务(2026-11-02 起 codeload 直连优先,失败走校准镜像链;2026-10-19 测绘发现) | 伪装 |
4.249.131.160 |
Azure(Copilot 代理) | copilot-proxy.githubusercontent.com | 真名 + 分片(wl_azure 族专用) |
白名单域名例外:
docs/support/resources/desktop/pages/skills/archiveprogram/socialimpact/raw.github.com也落在上面这几个 Fastly 段,但它们不用伪装——走真名 SNI + ClientHello 分 3 片,由 edge 的wl*四族接管(见 路由表 第 3 节)。同一段 IP 被两组族共用,各按自己判据筛。
即:末段 .3/.4 = 网页,.5/.6 = API,.29/.30 = 授权,.9 = codeload;185.199 段看末段——.133 = 内容(真名),.215 = 静态(新),.154 = 静态(旧),.153 = Pages。此分工由边缘行为实测标定,routes.json 里的段位置改变不了它。
2026-10-19 晚全量测绘补充:① web 族(.3/.4 与 Azure 杂段)对其余 vhost 一律 301 正确重定向——接得住但不交付,不可当多面手使;唯一的全服务 IP 是 140.82.113.22(objects-origin 的 GLB 族,9/10 服务直出 200)。② Fastly 四段(.133/.153/.154/.215)服务互通:raw/avatars/io/assets 在四段上都有响应,按段分族是负载与历史划分,非服务边界。③ 伪装 SNI 在 .133 上亦出内容且默认证书 SAN 覆盖
*.githubusercontent.com(证书校验可过)——2026-10-19 晚 content 族已切换为伪装(当时真名反遭 RST);若某窗口伪装失效,应急回退 = 手改 routes.json 该条"sni": "sni"(关代理改,重启生效)。④ IP 退役清单机制已整体删除——死活全凭串发实测(失败沉底、成功置顶),routes.json 写什么就试什么,代码不再持有任何 IP 名单。
| 流量 | 上游路径 |
|---|---|
| github.com 及其余子域 | 主站候选直连串发 + gh_defuse |
| api.github.com | api 池直连串发(API 专用边缘,与网站 IP 互斥) |
| uploads.github.com | 直连白名单(DNS 直达 alambic .161) |
| viewscreen.githubusercontent.com | 直连白名单(mermaid 渲染) |
| githubapp.com、githubassets、github.io | edge 池直连串发 |
| avatars/camo/gist/raw 等内容域 | edge 直连优先 → 熔断后镜像链 |
| codeload | 直连优先,失败按校准镜像链逐家(已并入小文件派发) |
| objects / release-assets | 镜像 only(分片竞速,ECT 时间槽派发) |
github.com 的 /archive、/releases/download(含 latest) |
release-assets / codeload 专属镜像链,全灭 502 |
| objects-origin.* | 直连白名单(该 vhost 仅 GLB 族服务,主站边缘对其 301 无 CORS) |
| docs / support / resources / desktop / pages / skills / archiveprogram / socialimpact / raw.github.com | 主路由白名单:进 edge 池,真名 SNI + 首包分片;段内 IP 连不上自动换候选,全灭退回系统 DNS |
| copilot-proxy.githubusercontent.com | 主路由白名单:同上,走 Azure 4.249.x 段 |
| 其余一切域名 | 系统 DNS 直连,不经任何表 |
详细判据与实测数据见 路由表。