0%

Github加速访问/防DNS污染

在访问DNS有的时候会比较慢甚至无法打开,而我最近遇到的一个问题是DNS被污染,并且由于同时加载了境内和境外DNS,根本无法找到究竟是哪里受到了DNS污染。为此我搜了不少资料,最终得到了以下的解决方案,不过其实这个方法个人认为也是治标不治本。

解决方法就是本地设置hosts/DNS,强制直接让网站访问某个ip从而跳过寻找ip地址。

原理

简单讲一下原理(应该其实会一点CS的都懂啦),可以跳过。

在访问网站时,由于我们输入的是域名(如www.google.com),需要寻找它真实的ip地址再去访问。
那如何获取它的ip地址呢,这就是DNS和hosts的用处了。

电脑首先在本地的hosts中寻找域名对应的ip,比如localhost是直接对应127.0.0.0
如果能在hosts中寻找到,那么就直接进行下一步去加载网页了
但往往hosts中没有太多的对应,于是就下一步采用DNS寻找ip。

相对于hosts在本地,DNS在无其他配置情况下是通过网络查找的,而在这个时候,可能会有人在查找的结果中动一些手脚,明明是11.11.11.11的ip,却让它返回22.22.22.22
那这样,这个网址就无法加载了。

此外,当Github访问速度过慢也可能是在DNS查找时比较慢,又或者因为这种大的网站一般有多个ip,我们访问了最远的ip,那么就会很慢了。

因此,通过修改hosts直接强制域名对应ip,使得DNS查找这个步骤可以省略,且访问速度较快的一个ip。

一、获取需要解析的地址

为了确保加载,我解析的地址比较多,其中分为必须和可选(自己加上后发现效果比较好)

必须

  • gist.github.com
  • github.com
  • assets-cdn.github.com
  • github.global.ssl.fastly.net

可选

  • www.github.com
  • api.github.com
  • github.githubassets.com
  • github.map.fastly.net
  • raw.githubusercontent.com
  • avatars0.githubusercontent.com
  • avatars1.githubusercontent.com
  • avatars2.githubusercontent.com
  • avatars3.githubusercontent.com

如何有针对性的选择添加解析的域名

在加载github的时候打开开发者模式(F12),选择网络(Network),观察加载比较慢的或者直接加载失败的。

如图,可以看到头像是加载失败的,找到网址是:avatars0.githubusercontent.com,把它加入需要解析的地址

二、获取Github的DNS解析地址

方法一

采用IPAddress.com查询ip地址。

输入需要查找的网址,如:assets-cdn.github.com,就可以看到结果。

可以看到assets-cdn.github.com有四个对应ip

方法二

在用方法一的时候,发现电脑本来自动加载的ip和搜索出来的ip相差很大,因此可以直接采用电脑本来自己加载的时候采用的ip。

又或者如果有自己的服务器可以尝试用服务器ping一下查看服务器所找到的ip。

又又或者直接试试网上别人提供的ip。

三、修改Hosts文件

打开系统的hosts文件,Windows是在C:\Windows\System32\drivers\etc,Mac和Linux是在/etc
均需要采用管理员(root)打开

在文件最后加上需要的ip和域名对应的地址,如下:

1
2
3
192.30.255.112 gist.github.com
192.30.253.113 github.com
185.199.111.153 assets-cdn.github.com

四、刷新DNS缓存

对于Windwos用户,需要刷新一下DNS缓存

打开cmdpowershell
输入

1
ipconfig /flushdns

这样就可以使用我们自定义的hosts了

缺点

这其实是一个硬方法,由于ip可能会变且存在很多不同的ip,采用自定义ip其实并没有那么方便,一是不一定能找到最快的ip,二是一旦ip修改还得自行修改hosts文件,并没有那么方便。
但网上搜索了那么多,也没有找到一些好的方法,就先选择采用这个方法吧。

ps.几年前的采用修改hosts的方法是可以当半个梯子用的,不过现在好像并不太好用了。。