◆

GitHub 访问慢:修改 hosts 加速的方法

2023-02-02 01:370

国内访问 github.com 经常出现页面半天打不开、git clone 卡在 Cloning into ... 不动、头像和 raw 资源全部裂图的情况。这类问题多数不是带宽不够,而是 DNS 解析被污染:本地拿到的 IP 根本不是 GitHub 的真实地址,TCP 连接自然建立不起来。

我的排查思路是先确认到底卡在哪一步。如果 ping github.com 返回的 IP 明显不对(或者干脆超时),但换个 DNS 查出来的 IP 能连通,那就是解析环节的问题。这种情况最省事的办法是绕过 DNS,直接在 hosts 文件里写死域名到 IP 的映射,让系统不再去问 DNS 服务器。

hosts 的优先级高于 DNS 查询,所以只要写进去的 IP 是可用的,浏览器和 git 都会直接走这个地址。代价是这些 IP 由 GitHub 的 CDN 分配,会随时间变化,过一段时间失效了就得重新查一遍再更新。

Github 访问慢解决办法

下面是具体步骤。先找一个 DNS 查询工具,查出各个 GitHub 域名当前解析到的 IP,再把结果写进 hosts:

  • 查询域名映射关系地址
  • 查询 github.com 所对应的 ip 然后添加到 host 文件中
    • 执行此命令进行编辑:sudo vi /etc/hosts
  • 保存后刷新 dns

改完 hosts 之后系统可能还缓存着旧的解析结果,需要手动清一下缓存才会生效。Windows 下在命令提示符里执行:

ipconfig /flushdns  // ipconfig和/flushdns之间有个空格才行

macOS 下对应的命令是 sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder。

hosts 文件示例(注意 raw.githubusercontent.com、avatars*.githubusercontent.com 这些域名也要一起配上,否则图片和 raw 文件依旧加载不出来):

# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#   127.0.0.1       localhost
#   ::1             localhost

# github
192.30.253.112 assets-cdn.github.com
151.101.88.249 github.global.ssl.fastly.net
192.30.253.113 github.com
151.101.184.133 assets-cdn.github.com
185.199.108.153 documentcloud.github.com
192.30.253.118 gist.github.com
185.199.108.153 help.github.com
192.30.253.120 nodeload.github.com
151.101.184.133 raw.github.com
18.204.240.114 status.github.com
192.30.253.166 training.github.com
192.30.253.112 www.github.com
151.101.185.194 github.global.ssl.fastly.net
151.101.184.133 avatars1.githubusercontent.com

几个注意点

上面这份 IP 是我当时查到的,直接抄过去不一定能用,建议自己重新查一遍。判断某条记录是否还有效很简单:ping 一下那个 IP,通了大概率能用,不通就换一个。

hosts 方案的局限也要清楚。它只解决解析问题,如果连接本身在链路上被干扰(TLS 握手之后被 RST),写死 IP 也救不了,这时候只能走代理。另外 hosts 里同一个域名写多行时,系统只认第一条匹配,所以上面示例里 assets-cdn.github.com 和 github.global.ssl.fastly.net 出现了两次,实际生效的是靠前那条,重复的可以删掉。

如果只是想让 git 走得快些,除了改 hosts,还可以给 git 单独配代理:git config --global http.proxy http://127.0.0.1:7890(端口换成自己代理软件的),这样不影响浏览器和其他程序。

💬留言板0

还没有留言,来发表第一条吧~

PAGE LOAD / LIVEGitHub 访问慢:修改 hosts 加速的方法加载中