GitHub520:免安装、开箱即用的 GitHub DNS 加速,5 分钟修好图裂和加载慢
【免费下载链接】GitHub520:kissing_heart: 让你“爱”上 GitHub,解决访问时图裂、加载慢的问题。(无需安装)项目地址: https://gitcode.com/GitHub_Trending/gi/GitHub520
凌晨两点,打开一个 GitHub 项目页面,README 里的图片全是一堆小破 X,页面还在转圈——这种时刻真的让人想摔键盘。GitHub520 就是一个免安装的 DNS 加速方案:它把本地 hosts 文件里的一批 GitHub 相关域名指到更快的 IP 上,解决图裂和加载慢这两个老毛病,整个过程 5 分钟能搞定。
GitHub DNS 加速怎么配:上手最快的方式
项目生成的 hosts 内容是定时自动更新的,数据源是公开地址,就算你当时访问不了 GitHub 也能拿到。下面按三种粒度挑一个用:
个人:终端一行命令搞定 GitHub DNS 加速
Linux/macOS 一条命令,文件里如果已有旧内容会被直接替换:
sudo sh -c 'sed -i "/# GitHub520 Host Start/Q" /etc/hosts && curl https://raw.hellogithub.com/hosts >> /etc/hosts'Windows 需要先装 Git Bash,README 里有一段现成脚本可以复制,再丢进任务计划程序定时跑就行。
团队:SwitchHosts 自动刷新 hosts
不想手动管的话,装个 SwitchHosts(开源的 hosts 管理工具),类型选「远程」,URL 填https://raw.hellogithub.com/hosts,自动刷新设 1 小时,之后就不用管了:
关键配置就两项:那个 URL 和刷新间隔,前者决定内容来源,后者决定你多久能吃到上游的新 IP。
服务器:AdGuard 内网 DNS 统一接管
内网有 AdGuard Home 的话,在「过滤器 → DNS 封锁清单」里添加一条自定义列表,填同一个 URL,更新间隔设 1 小时,并在常规设置里勾选「使用过滤器和 Hosts 文件以拦截指定域名」,整台内网的设备就都吃上了这套 GitHub DNS 加速:
注意:加到「允许清单」里是不起作用的,必须放在封锁清单。
它到底怎么工作的:最优 IP 从哪来
整个流程一句话:多个来源解析每个域名 → 候选 IP 全部测速 → 挑最快的 → 写进 hosts。每一步都不神秘。
为什么不用 ICMP ping,而用 TCP 443 连接
ICMP ping 相当于用打电话的快慢判断一家餐厅,而你真正在意的是能不能连上 HTTPS。所以 GitHub520 对每个候选 IP 都真实连一次 443 端口,连 3 次取中位数,连不上直接记 1 秒超时,核心就这几行(取自 fetch_ips.py 的测速函数):
with socket.create_connection((ip, HTTPS_PORT), timeout=PING_TIMEOUT_SEC): latencies.append((time.time() - start) * 1000) # 连接失败则直接计入 PING_TIMEOUT_SEC * 1000,即算超时 latencies.sort() PING_LIST[ip] = latencies[1] # 3 次取样,取中位数当最终延迟白话说:选出来的 IP 是「真实连得上、而且最快」的那个,比 ICMP 往返时间更贴近你实际打开网页的体验。
为什么不用单一 DNS,而用多源查询
每个域名会走两条路查:DoH(阿里、DNSPod、Google 依次尝试)加传统 DNS(114、阿里、腾讯、Cloudflare、Google),两边的结果合并去重。等于同时问好几个地图 App 要路线,一路被污染或者挂掉,另一路还能兜底,不至于一上来就迷路。
为什么不用每次都重写文件,而先比对内容有没有变
脚本跑完会先和旧内容比对,IP 映射没变化就跳过写入(逻辑在 common.py 里)。意义不只是省一次磁盘 IO,而是不会产生无意义的文件变更——你用 SwitchHosts 之类的工具管理时,不会被一堆没变化的 diff 干扰。
实测效果,不吹
仓库里只放了前后截图,没有公开的延迟数字,那就按能看到的说:
| 项目 | 配置前 | 配置后 |
|---|---|---|
| README 里的图片 | 图裂,只剩文字(见下图) | 正常加载 |
| 打开 GitHub 页面 | 偶尔超时、转圈等加载 | 直接秒开 |
| git clone | 慢、偶尔中断 | 不再卡在半路 |
配置前的样子:
配置后的样子:
- 图片不再裂,这是最肉眼可见的变化,也是大多数人坚持用它的原因。
- 页面和 API 响应变快,但仓库没有公布测速数据,这里就不编"快了几倍"。
- 上游 IP 轮换时自动刷新机制会接管,不用你盯着。
进阶玩法与集成
- cron 定时更新:把前面那条一行命令丢进 crontab,加个
0 * * * *每小时刷新一次 hosts,就不用再想这事。 - JSON 数据源:自有工具要读这份映射的话,直接取
hosts.json(和 hosts 文件同级)解析即可,结构是 (IP, 域名) 列表,不用再自己解析测速。 - 自建更新服务:不想依赖公开地址的话,fetch_ips.py 是主程序、common.py 里是域名清单和模板,整套东西很自包含,放到内网机器上定时跑,就能自己养一份全公司的 hosts 源。
- Docker 环境:容器里
/etc/hosts是挂载文件,直接改会报错,workaround 见下面踩坑部分。
踩坑记录 ⚠️
改完 hosts 没反应
原因:系统 DNS 缓存没刷。Windows 在 CMD 里跑ipconfig /flushdns;Mac 跑sudo killall -HUP mDNSResponder;Linux 跑sudo nscd restart(提示找不到命令就先sudo apt install nscd)。
Docker 里直接改 hosts 报 Device or resource busy
原因:容器内的/etc/hosts是挂载文件,sed -i没法原地改。绕法是另存一份改完再拷回去:
cp /etc/hosts ~/hosts.new && sed -i "/# GitHub520 Host Start/Q" ~/hosts.new && curl https://raw.hellogithub.com/hosts >> ~/hosts.new && cp -f ~/hosts.new /etc/hostsAdGuard 配置了但不生效
原因:九成是加到了「DNS 允许清单」,或者常规设置里的拦截开关没勾。解决:把规则挪进「DNS 封锁清单」,再勾上「使用过滤器和 Hosts 文件以拦截指定域名」。
凌晨两点那个图裂的页面,现在应该只是回忆了。想确认它真的在干活,可以打开 hosts 文件看一眼映射是否还在,或者跑一条nslookup github.com看返回的 IP 是不是文件里那个。项目采用 CC BY-NC-ND 4.0 协议,作者署名的更新服务如果哪天停了,上面自建方案就是兜底。
【免费下载链接】GitHub520:kissing_heart: 让你“爱”上 GitHub,解决访问时图裂、加载慢的问题。(无需安装)项目地址: https://gitcode.com/GitHub_Trending/gi/GitHub520
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考