SSH clone引发的 github 网络探究
起因是因为我在一台电脑上使用 SSH 从 github 拉取代码时,发现则拉满,于是顺着网线找了找其中原因。
为什么国内访问 github 很慢或者经常会打不开
走国内网络
首先国内没有部署完整的 github cdn/主战集群,也就没有可以就近写入/读取的服务器,所以整体就很不流畅。
我们理一下,当你在浏览器输入全球最大同性网站时,后面发生了什么。

是不是感觉连路很长,跋山涉水,这就是导致慢的原因。
其中dns域名解析是最重要的环节,大多数都是 DNS 解析的有问题或者被劫持,然后就是国际网络出入口过于拥堵,导致 github 打不开。 贴一张 DS 给的图。 
默认都是走运营商的 DNS 解析服务器,其中一个优化点就是直接可以使用第三方的 DNS 解析服务器, 因为你懂得,国内解析因为 ZZ 正确。
所以我们只要再网上搜,大多数的答案都是改本地
hosts文件, 直接IP映射,节省dns域名解析,但这种方案并不是万能。
主要是以下几个方面会影响到 ip 的使用效果,走本地运营商网络dns域名解析。
服务架构: GitHub 的部分服务部署在全球 CDN(如 Fastly)网络上。 当你访问时,DNS 会根据你的地理位置和网络环境(GeoDNS),返回一个相对更优的边缘节点 IP。 请求会被路由到该 CDN 节点,再由其与后端 GitHub 服务交互。
ip变动: 你写死的 ip 地址,可能某段时间,由于各种原因,比如应对 DDoS 攻击时、流量高峰调度,你的ip 指向就玩不转了,一直得不到相应。
优化掉 DNS 解析这一步,来解决 github 访问不了问题
因此网上就有一个 GitHub 项目,每天实时更新 github 对应的 ip 地址,以此来保证 github 的可访问性。 https://github.com/521xueweihan/GitHub520
- Method 1 手动配置本地 hosts 文件
- mac 路径
/etc/hosts - windows 路径
C:\Windows\System32\drivers\etc
- mac 路径
# GitHub520 Host Start
140.82.113.26 alive.github.com
20.205.243.168 api.github.com
140.82.114.22 api.individual.githubcopilot.com
185.199.109.133 avatars.githubusercontent.com
185.199.109.133 avatars0.githubusercontent.com
185.199.109.133 avatars1.githubusercontent.com
185.199.109.133 avatars2.githubusercontent.com
185.199.109.133 avatars3.githubusercontent.com
185.199.109.133 avatars4.githubusercontent.com
185.199.109.133 avatars5.githubusercontent.com
185.199.109.133 camo.githubusercontent.com
140.82.114.21 central.github.com
185.199.109.133 cloud.githubusercontent.com
20.205.243.165 codeload.github.com
140.82.113.21 collector.github.com
185.199.109.133 desktop.githubusercontent.com
185.199.109.133 favicons.githubusercontent.com
20.205.243.166 gist.github.com
3.5.8.125 github-cloud.s3.amazonaws.com
16.15.213.188 github-com.s3.amazonaws.com
16.15.207.10 github-production-release-asset-2e65be.s3.amazonaws.com
54.231.236.49 github-production-repository-file-5c1aeb.s3.amazonaws.com
16.15.244.152 github-production-user-asset-6210df.s3.amazonaws.com
192.0.66.2 github.blog
20.205.243.166 github.com
140.82.113.18 github.community
185.199.111.215 github.githubassets.com
151.101.193.194 github.global.ssl.fastly.net
185.199.109.153 github.io
185.199.109.133 github.map.fastly.net
185.199.109.153 githubstatus.com
140.82.114.25 live.github.com
185.199.109.133 media.githubusercontent.com
185.199.109.133 objects.githubusercontent.com
13.107.42.16 pipelines.actions.githubusercontent.com
185.199.109.133 raw.githubusercontent.com
185.199.109.133 user-images.githubusercontent.com
13.107.226.39 vscode.dev
140.82.114.21 education.github.com
185.199.109.133 private-user-images.githubusercontent.com
# Update time: 2025-12-10T08:52:57+08:00
# Update url: https://raw.hellogithub.com/hosts
# Star me: https://github.com/521xueweihan/GitHub520
# GitHub520 Host End- Method 2 使用 SwitchHosts 来修改 hosts 文件

Q:既然浏览器会缓存起来上次的 DNS 解析记录,第一 github 正常访问,理论第二次肯定是没问题了,为什么访问还会很慢?
A:答案参照以上答案,是由 github 的服务性质决定的。
Q:既然直接可以用 IP 进行访问,那我直接用 IP 访问不更好?
- github 不是但ip 服务,GitHub = 全球 CDN + 多层负载均衡
- HTTPS 根本不支持“裸 IP访问”,SSL 证书组成中,必须包含域名,不能是 IP 地址。
使用 VPN 走专线
接着上面聊,上面我们优化了 dns 解析,但是还有其他的问题,比如国际网络出入口过于拥堵,导致 github 打不开。出入口就像是一条高速路,前往的人多了,自然就不通畅,如果我们换种方式去访问 github 是不是就会快很多呢。答案是的,vpn 就像另外一条更优的交通方式,他们开汽车,而你就是坐飞机。

Q: 用了 VPN 还用更改本地 hosts 文件吗?
A: 不用,因为 VPN 已经优化了 dns 解析,所以不需要再更改本地 hosts 文件。
(PS: 前段时间,我们产品部署到海外新加坡,刚开始也是慢,我们的运营人员总是打不开,但我们开发使用了新加坡节点 VPN 就好很多)
为什么使用 HTTPS clone 会很慢
其实使用了 VPN 之后,但会发现,我擦怎么 git clone https的代码有时候怎么还连不上,提示超时

原因是因为你使用 vpn 时,默认只是开启系统代理,而系统代理只能代理,如下单几种请求,
- 浏览器
- 大部分 GUI 应用

开发中有一些是不走的,这些都是实践过的,比如
- git clone https
- npm、 yarn(装 electron 应用必须得设置,不然真的。。。)
- SSH
- Docker
所以解决 git clone https 时,会慢的超时,我们只需
- 开启代理
- 命令行配置,
git config --global http.proxy http://127.0.0.1:7897 # 大多数默认是 7890
git config --global https.proxy http://127.0.0.1:7897 # 大多数默认是 7890
# git config unset --global http.proxy http://127.0.0.1:7897速度蹭蹭的 
当你使用代理时,为什么 SSH 仍旧会很慢
接着上面的部分,克隆自己的仓库肯定是走 SSH 比较合适,但发现配置了 git config代理之后,为什么还是很慢。 因为 SSH 和 HTTPS 是不同的协议,所以不能走相同的代理。
HTTPS 默认端口是 443,SSH 默认端口是 22。
所以需要再单独配置代理,将 clash 里的设置 SOCKS5 打开
- STEP 1
~/.ssh/config- STEP 2
Host github.com
HostName ssh.github.com
Port 443
User git
ProxyCommand nc -x 127.0.0.1:7897 %h %p也是哗哗的快

Q: 我有稳定的 VPN, 有什么终极的解决方案么?
开启 VPN 的 TUN 模式,可以接管所有的网络流量,包括 SSH。

但最保险仍旧是配置 clash 来代理 SSH 流量。万一TUN 没正确接管 UDP / TCP,那就完蛋了。

其它问题
Q: 如何让手机通过代理也能科学上网?
- STEP 1 clash 开启局域网模式

- STEP 2 配置手机代理为 clash 代理的 IP 地址和端口

Q: https clone 和 SSH clone 哪个快 A: 实测,HTTPS传输效率更高,10m左右,而SSH只有3m左右。SSH 单 TCP stream + 加密开销
Q: 如何查看 SSH 的配置信息?
ssh -vT git@github.com # 更详细 ssh -vvvT git@github.com