外观
修改 Hosts 加速 GitHub:原理、配置与自动更新
修改 Hosts 是不用代理就能缓解 GitHub 慢的经典方法。它对付的是"DNS 污染"这类问题,零成本、见效快,但需要定期更新 IP。
一、原理:Hosts 是本地 DNS
访问 github.com 时,系统先查 hosts 文件里有没有对应 IP,有就直接用、不再问 DNS 服务器。
当运营商 DNS 被污染、把 GitHub 域名解析到错误 IP 时,我们就在 hosts 里手动钉一个好 IP,绕过污染。
局限
Hosts 只能解决"解析到错误 IP"的问题。如果是连接层被重置(解析正确也连不上),hosts 无效,需要 代理。
二、需要添加哪些域名
GitHub 用了多个域名,只加 github.com 往往不够。常见需要覆盖的:
text
# 主站与 API
github.com
api.github.com
codeload.github.com
# 静态资源(样式/脚本/头像)
github.githubassets.com
avatars.githubusercontent.com
github-cloud.s3.amazonaws.com
# raw 与 Pages
raw.githubusercontent.com
objects.githubusercontent.com对应 IP 会变,需要查当前较优 IP(用在线 DNS 查询工具查上面每个域名,选延迟低的 IP)。
三、配置方法
Windows
hosts 路径:C:\Windows\System32\drivers\etc\hosts(需管理员权限编辑)。
用管理员身份打开记事本再打开该文件,或用管理员 PowerShell 追加:
powershell
# 以管理员运行 PowerShell
Add-Content -Path "$env:windir\System32\drivers\etc\hosts" -Value "140.82.112.3 github.com" -Encoding utf8
# 刷新 DNS 缓存
ipconfig /flushdnsmacOS / Linux
hosts 路径:/etc/hosts(需 sudo)。
bash
sudo nano /etc/hosts
# 添加条目后保存,然后刷新缓存:
# macOS
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
# Linux(视发行版)
sudo systemd-resolve --flush-caches # 或 sudo systemctl restart nscdhosts 条目格式(IP 在前,域名在后,空格分隔):
text
140.82.112.3 github.com
185.199.108.133 raw.githubusercontent.com四、自动更新(推荐)
手动查 IP 太累,社区有维护好的 GitHub hosts 列表(搜索 "GitHub520" 之类项目)。它们提供:
- 一个随时更新的 hosts 文本地址;
- 可以让系统定时拉取并合并到本地 hosts。
自动更新的思路(以 Windows 计划任务为例):
powershell
# 保存为 update-github-hosts.ps1
$url = "https://<hosts列表的raw地址>" # 换成实际可用地址
$hosts = "$env:windir\System32\drivers\etc\hosts"
$marker = "# GitHub Hosts Start"
# 拉取最新列表
$new = (Invoke-WebRequest -Uri $url -UseBasicParsing).Content
# 移除旧的 GitHub 段,再追加新的(简化示例)
$content = Get-Content $hosts -Raw
$content = $content -replace "(?s)# GitHub Hosts Start.*?# GitHub Hosts End`r?`n?", ""
Set-Content -Path $hosts -Value ($content.TrimEnd() + "`r`n" + $new) -Encoding utf8
ipconfig /flushdns然后用任务计划程序每天定时以管理员身份运行这个脚本即可。
macOS / Linux 定时
用 crontab -e 加一行,每天拉取并合并;或直接用社区项目提供的一键脚本。
五、常见问题
- 改完没生效? 先
ipconfig /flushdns(或对应系统的刷新命令),再重启浏览器;浏览器有自己的 DNS 缓存,可在chrome://net-internals/#dns清除。 - 过一阵又慢了? IP 失效了,更新 hosts(这正是自动更新的意义)。
- 图片/样式还是不显示? 说明你漏加了
githubassets/githubusercontent相关域名,补上再刷新。
小结
- Hosts 适合无代理、以 DNS 污染为主的场景,零成本。
- 一定要覆盖静态资源域名,否则会出现"文字能看、图片样式全丢"。
- 强烈建议配自动更新,否则 IP 一变又得手动折腾。
- 如果连接本身被重置,hosts 救不了,请转 代理方案。
本文仅供技术学习与研究,请遵守所在国家/地区法律法规。