前言:作者从互联网档案馆拉回已 404 的 FastGithub 源码,逐层拆解它用 WinDivert 劫持 DNS、重定向端口、剥离 SNI 实现纯本地 GitHub 加速的精巧原理,也揭开它关闭 git sslverify、自签根证书私钥明文裸奔等安全债,并给出三分钟清理残留的补救清单。
前几天有个刚入行的读者问我,GitHub 访问慢,clone 天天失败,有没有什么好使的工具。我脱口而出一个名字,FastGithub,2021 年那会儿,这玩意儿几乎是国内开发者的标配。
结果我顺手去原仓库一看,404 了。
作者把仓库删了。
这就很有意思了。一个当年 star 好几万的现象级工具,说没就没了。我寻思了一下我没寻思明白,于是鬼使神差的,我从互联网档案馆里把最后一份源码快照拉了下来,打算把这玩意儿翻个底朝天,看看它当年到底是怎么工作的,以及,作者为什么要删库。

先说结论,FastGithub 的思路,是我近几年见过最骚的纯本地加速方案之一。它不是 VPN,不连任何外部服务器,所有事情都在你自己的电脑上完成。
它是怎么做到的呢,我一层一层给你剥。
第一层,DNS。你访问 github.com 的时候,系统会先问 DNS 服务器要 IP,这个查询走的是明文的 UDP 53 端口。审查设备只要看到明文里有 github.com,就会抢在真实应答到达之前,先塞给你一个假的黑洞 IP。FastGithub 的做法简单粗暴,它用了一个叫 WinDivert 的内核驱动,直接在系统底层把所有发往 53 端口的 DNS 查询拦下来,凡是问 github 相关域名的,不等真 DNS 回话,直接伪造一个应答包,告诉你,github.com 的 IP 是 127.0.0.1,也就是你自己的电脑。
你的浏览器一看,哦,GitHub 就在本机啊,于是欢天喜地地朝自己发起连接。
第二层,端口重定向。WinDivert 再把发往 443 端口的连接偷偷改道,全部送进 FastGithub 自己开的本地反向代理里。
第三层,就是最核心的了。GitHub 的服务器是真的在你对面,但中间的审查设备会在 TLS 握手时看一个叫 SNI 的字段,那里面明文写着你要访问的域名,一旦看到 github.com,直接一个 RST 把连接掐死。FastGithub 怎么破,它在向上游发起请求的时候,把 SNI 整个剥掉了。审查设备看着这个握手包,里面干干净净,一个域名都没有,就像一封没写收件人的信,想拦都不知道拦谁。
我看到这段配置的时候,真的被震撼到了。原来 SNI 是可以不发的。
那真实 IP 哪来的呢,它内置了一个 dnscrypt-proxy,把 DNS 查询整个加密,走 DoH 隧道发到境外的可信 DNS,拿到干净的真实 IP。然后再对一堆候选 IP 挨个发起真实的 TCP 握手,用秒表掐时间,后台每秒刷新一次排序,永远把延迟最低的那个排在最前面,谁快用谁。
聊着聊着我突然想到,这套东西的精巧程度,放在 2021 年,说是艺术品也不过分。四层联动,环环相扣,全程不需要你点一下配置。
但是,好奇心是个好东西,也是个坏东西。看完了它怎么加速,我顺手翻了一下它跟安全有关的代码,然后,心情就从考古变成了后背发凉。
先看个小的。它启动的时候会自动改你的 hosts 文件,把原来的 GitHub 映射注释掉。我本来以为程序退出的时候会还原,结果翻遍了代码,那个叫 RestoreAsync 的函数里,什么都没有。它改了,就永远留在那了。
再往下,WinDivert 是 Ring 0 的内核驱动,跟游戏反作弊、杀软、VPN 虚拟网卡打架是家常便饭,轻则断网,重则蓝屏。打腾讯游戏的兄弟应该懂我在说什么。
然后是我看到的第一处真正的安全问题。它向上游建立 HTTPS 连接时,有一段校验对方证书的逻辑,配置文件里赫然写着 TlsIgnoreNameMismatch,true。翻译一下,只要对方证书的域名对不上,直接放行。你想想看,一个中间人攻击者递给你的伪造证书,恰恰就是域名对不上的。这个判断等于把门锁拆了,还在门上贴了张条,欢迎光临。
再往下翻,我沉默了。它每次启动,都会默默执行一句 git config –global http.sslverify false。全局的,关了就不还原的。Git 有自己独立的一套证书体系,作者懒得把 CA 导进去,就直接把 Git 的证书校验整个关了。从这一刻起,你在任何网络环境里 clone 任何仓库,包括公司的私有 GitLab,Git 都不再验证对面是不是真的服务器。公共 WiFi 里有人想给你的代码投毒,易如反掌。
还没完。最炸的在最后。
为了让浏览器信任它的伪造证书,FastGithub 自己造了一个 CA 根证书,装进了 Windows 的受信任根证书列表。也就是说,操作系统从此无条件相信这个 CA 签发的一切证书。而这张 CA 的私钥呢,是一份没加密的 PEM 明文文件,就躺在程序的运行目录里,文件名 fastgithub.key。
你电脑上任何一个不起眼的流氓软件,只要读到这个文件,就能给银行、给邮箱、给任何网站,签发一张带小绿锁的合法假证书,然后静默解密你所有的流量。
钥匙就挂在门口的垫子底下,谁路过谁都能拿。
我看到这里的时候,一时间无语凝噎。。。

坦率的讲,那句老话大家都听过,如果你没有为产品付费,那你就是产品本身。但 FastGithub 这事更微妙,作者不是坏人,他从头到尾没偷你一个字节,他只是为了让一切免配置、开箱即用,把安全的底线一层一层让了出去。每一层单独看都情有可原,加在一起,就是裸奔。
我非常理解作者的处境。2021 年做一个加速工具,要免安装,要零门槛,要跟各种奇怪的网络环境搏斗,每一步妥协都有它的理由。但工程上的每一个「先这样吧」,最后都会变成用户账上的债。这笔债平时看不见,等看见的时候,往往已经连本带利了。
后来还有个更现实的转折。防火墙策略升级,GitHub 的大量 IP 段在运营商层面被直接黑洞丢包。IP 本身封死了,SNI 剥得再干净也没用,TCP 握手根本握不通,这类「纯净 DNS + 改 IP」的工具就集体失效了。仓库删掉,或许也有几分心灰意冷的意思。
所以如果你当年也用过它,我建议现在就花三分钟做三件事。把 git 的全局 sslverify 改回 true,打开 certmgr.msc 在受信任的根证书颁发机构里把 FastGithub 那张 CA 删掉,再看一眼 hosts 文件有没有残留。这三分钟,比装十个加速器都值。
以后要加速,老老实实用正规代理给 Git 单独配一条,或者用不改证书、只绑 Hosts 的工具。慢是慢一点,但你的门锁还在。
回到开头那个 404 的仓库。它曾经真的帮一代人打开过 GitHub 的门,这一点我必须承认,也值得尊重。
只是门后,还留了一把没上锁的备用钥匙。
比比说,磨平一些信息差。但下次磨之前,记得先看看,那个帮你磨的工具,有没有顺手把你的信息磨给了别人。
/ 注意,本项目仅在 SyncMein 的500人小群分享。
/ 谢谢你看完了我的文章,我们下次再见吧。
/ 作者:明察
/ 投稿或爆料,请联系邮箱:mingcha@gqmg.com














暂无评论内容