Skip to content

SSH clone引发的 github 网络探究

起因是因为我在一台电脑上使用 SSH 从 github 拉取代码时,发现则拉满,于是顺着网线找了找其中原因。

为什么国内访问 github 很慢或者经常会打不开

走国内网络

首先国内没有部署完整的 github cdn/主战集群,也就没有可以就近写入/读取的服务器,所以整体就很不流畅。

我们理一下,当你在浏览器输入全球最大同性网站时,后面发生了什么。

alt text

是不是感觉连路很长,跋山涉水,这就是导致慢的原因。

其中dns域名解析是最重要的环节,大多数都是 DNS 解析的有问题或者被劫持,然后就是国际网络出入口过于拥堵,导致 github 打不开。 贴一张 DS 给的图。 alt text

  • 默认都是走运营商的 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
bash
# 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 文件

alt text

Q:既然浏览器会缓存起来上次的 DNS 解析记录,第一 github 正常访问,理论第二次肯定是没问题了,为什么访问还会很慢?

A:答案参照以上答案,是由 github 的服务性质决定的。

Q:既然直接可以用 IP 进行访问,那我直接用 IP 访问不更好?

  • github 不是但ip 服务,GitHub = 全球 CDN + 多层负载均衡
  • HTTPS 根本不支持“裸 IP访问”,SSL 证书组成中,必须包含域名,不能是 IP 地址。

使用 VPN 走专线

接着上面聊,上面我们优化了 dns 解析,但是还有其他的问题,比如国际网络出入口过于拥堵,导致 github 打不开。出入口就像是一条高速路,前往的人多了,自然就不通畅,如果我们换种方式去访问 github 是不是就会快很多呢。答案是的,vpn 就像另外一条更优的交通方式,他们开汽车,而你就是坐飞机。

alt text

Q: 用了 VPN 还用更改本地 hosts 文件吗?

A: 不用,因为 VPN 已经优化了 dns 解析,所以不需要再更改本地 hosts 文件。

(PS: 前段时间,我们产品部署到海外新加坡,刚开始也是慢,我们的运营人员总是打不开,但我们开发使用了新加坡节点 VPN 就好很多)

为什么使用 HTTPS clone 会很慢

其实使用了 VPN 之后,但会发现,我擦怎么 git clone https的代码有时候怎么还连不上,提示超时

alt text

原因是因为你使用 vpn 时,默认只是开启系统代理,而系统代理只能代理,如下单几种请求,

  • 浏览器
  • 大部分 GUI 应用 alt text

开发中有一些是不走的,这些都是实践过的,比如

  • git clone https
  • npm、 yarn(装 electron 应用必须得设置,不然真的。。。)
  • SSH
  • Docker

所以解决 git clone https 时,会慢的超时,我们只需

  1. 开启代理
  2. 命令行配置,
bash
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

速度蹭蹭的 alt text

当你使用代理时,为什么 SSH 仍旧会很慢

接着上面的部分,克隆自己的仓库肯定是走 SSH 比较合适,但发现配置了 git config代理之后,为什么还是很慢。 因为 SSH 和 HTTPS 是不同的协议,所以不能走相同的代理。

HTTPS 默认端口是 443,SSH 默认端口是 22。

所以需要再单独配置代理,将 clash 里的设置 SOCKS5 打开

  • STEP 1
bash
~/.ssh/config
  • STEP 2
bash
Host github.com
  HostName ssh.github.com
  Port 443
  User git
  ProxyCommand nc -x 127.0.0.1:7897 %h %p

也是哗哗的快

alt text

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

alt text

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

alt text

其它问题

Q: 如何让手机通过代理也能科学上网?

  • STEP 1 clash 开启局域网模式

alt text

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

alt text


Q: https clone 和 SSH clone 哪个快 A: 实测,HTTPS传输效率更高,10m左右,而SSH只有3m左右。SSH 单 TCP stream + 加密开销

Q: 如何查看 SSH 的配置信息?

bash
ssh -vT git@github.com # 更详细 ssh -vvvT git@github.com

参考链接

deepseek
wiki