Github 访问原理
今天Github关闭了中国IP的访问权限. 但是我同时也产生了很多疑惑,一些常见的访问手段有什么不同?背后的原理是怎么样的? 我们知道Steam++(现名Watt Toolkit)可以帮助我们访问Github,但为什么不能帮我们访问Google?两者有什么不同?Steam++的原理是什么?
最常见的魔法访问手段¶
这种方式是最常见的.要讲清楚原理,其实也很简单. 我们访问网站需要两步: 1. 我们在浏览器输入网址.浏览器会把网址发送给DNS服务器,DNS服务器会返回给我们对应的IP地址.这一步叫做DNS解析. 2. 我们的浏览器再拿着IP地址,访问对方真正的服务器. 因此,当墙不想让我们访问对应的网站的时候,有两种常见的方式: 3. 在DNS解析阶段,就不让我们解析. 4. 通过ip地址发送给对应的服务器时,直接拦截住流量.
魔法访问作为最常见的绕过方式,就是我们购买一台位于海外的主机,当我们想访问Github时,让这台海外的主机进行访问,然后把数据发回给我们即可.
Steam++的访问方式¶
参考Github链接 前置知识: 数据跨境安全网关(俗称 GFW)会检测客户端发送至服务器的 TLS 握手请求包中的 SNI 信息。SNI 包含了客户端想要连接的域名,该信息是明文的。因此当数据跨境安全网关检测到相关域名后,会先于服务器返回 RST 包(重置连接),导致连接失败。
而Steam++的原理是: 在一开始,Steam++直接就告诉我们GitHub的ip地址了,因此不需要经过DNS这一关.
随后,Steam++拿着ip访问GitHub时,Steam++直接去除掉SNI信息,就无法被拦截了.
为什么Steam++不能帮助我们访问google?¶
可以看到Steam++实际上是直接拿着ip去访问对应的服务器的. 这对GitHub网站是可行的.因为GitHub网站允许直接使用ip访问. 对于Google不可行,因为Google服务器不允许直接通过ip访问.
为什么修改HOSTS文件可以减少GitHub连不上的概率?¶
因为Host文件相当于直接记录了GitHub的ip地址,从而避免了DNS解析这一关可能的拦截.
后续¶
由此可见,Steam++是不会修改我们的源ip的.因此,当GitHub封禁了中国ip之后,通过Steam++就无法访问GitHub了.