Just Start Typing Text and Press Enter

alt text
WuSiYu
学生,Web开发者
2019年十二月
« 9月    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

友情链接

文章归档

Menu
Close
11月 06, 2017

在路由器使用全局SS时,配置ChinaDNS以抗DNS污染的必要性

0 Comment | By

在天朝,zf对于大陆网络的污染可谓无处不在,无论是最为人熟知的网站禁封,令无数站长头痛的域名备案,还是可能用来进行https中间人攻击的CNNIC的CA证书。而我们现在则讨论一下DNS污染。

在中国大陆,DNS污染是普遍存在的,会通过和谐国内DNS以及篡改国外DNS返回数据的方式,使查询某些被禁封的域名时(如google.com,以及最近被污染的P站等),得到错误或虚假的ip,从而无法正常访问。

幸运的是,在你使用socks5或http(s)代理(如常见的ShadowSocks和xx-net等)时,DNS是在代理服务器进行远程解析的,也就是你的DNS查询不会受到污染,这也是大多数情况下我们无需担心DNS污染等原因。

然而并不是所有应用程序均支持http(s)或socks5代理,就算支持,设置代理也是一件麻烦的事情,而且上个网还需要后台运行一个“辅助程序”,难道不奇怪吗?

于是乎,为了让GFW如同虚设在国内也能享受到国外的网络使用体验,人们将视角转向了路由器,通过在运行着openWRT固件的路由器上安装shadowsocks-libev,遍可以在路由器上使用ShadowSocks,同时结合ss-redir透明代理,遍可以让任何的TCP/UDP流量使用ShadowSocks代理,再加上大陆ip段的过滤,即可实现客户端无需任何配置的平滑无缝的“全局自动翻墙”。

TCP/UDP流量 <——正常格式——> ss-redir <——ShadowSocks格式——> 境外SS服务器 <——正常格式——> 目标服务器

然而由于在使用这种方式时,像正常情况一样,是由客户端进行DNS查询的,所有便会受到DNS污染的影响,使得上网体验变得非常糟糕,所以这时,我们就需要在路由器上使用ChinaDNS来对抗DNS污染。

原则上,我们可以直接让ss-tunnel代理所有的DNS请求,但这样访问国内的网站的速度就会受到影响。而ChinaDNS可以让指向境外的域名通过可信的境外DNS查询,而指向国内的域名则通过国内的DNS,以提高速度。由于GFW也会对境外DNS的查询进行污染,我们需要用ShadowSocks给ChinaDNS提供一个通向境外DNS地址的加密的隧道(ss-tunnel)。

配置指南

打开ShadowSocks的配置页面,启用ss-tunnel,并填写你希望使用的DNS服务器地址,以及本地端口:

接下来,打开ChinaDNS的配置页面,填入一个国内的DNS服务器,和包含刚才填的本地端口的本地地址:

接下来,设置网络中的DHCP/DNS部分,使DNS查询经过ChinaDNS服务。

勾选一般设置选项卡中的“挟持所有的客户端的DNS解析到dnsmasq”,并在DNS转发中填入“127.0.0.1#1053”这样的地址(1053为ChinaDNS的本地端口),在HOSTS和解析文件选项卡中勾选的“忽略解析文件”:

若配置没有问题,那么从此你的DNS就不会被GFW所污染了。你可以用dig指令来确认你的成果,下图中的pixiv.net(P站)就是一个被污染的域名,然而此时我们可以查询到正确的结果:

不过需要注意的是,如果你的ShadowSocks线路发生终端,所有的DNS解析都会受到影响,此时可以通过取消勾选“忽略解析文件”来快速的暂时不适用ChinaDNS,以正常进行一般的DNS解析。

1+

Leave A Comment

Author Details
SiYu Wu 学生,Web开发者,智能硬件&IOT爱好者
Share Post