[ChinaDNS] 无污染的智能路由 DNS 折腾记 #3
![[ChinaDNS] 无污染的智能路由 DNS 折腾记 #3](/usr/uploads/2018/06/985199406.jpg)
没想到这个系列还能有第三集,应该是完结篇了。这次是因为前不久试用了一下 Linux 的 Windows 子系统,发现意外的不错,与 Windows 本身契合度很高,于是在 Windows 里跑 DNSMasq + ChinaDNS 的设想得以实现√
Head Pic: 「夏コミグッズ…」/「三村ざじゃ」のイラスト [pixiv]
在上一篇文章中,我讲到了在国内服务器上使用 DNSMasq + ChinaDNS 以能在任何支持自定义 DNS 的设备上解决 DNS 污染的方案,但这个方案也有缺点:如果平时你主要是自用,在 Windows 上做到无污染即可,那么为此专门去购买国内服务器(即使是很便宜的学生机)其实也有点大材小用。
不久前不小心才想起来还有一个 Windows 子系统的玩意没试过,说是可以在 Windows 上直接跑 Linux,这样是不是就可以解决没办法在 Windows 上跑 DNSMasq 的问题了?(当然能解决啦
Win10 必须是 1607 版本及以后的
这种解决方案还有一个好处,就是可以解决 IPv6 协议的 DNS 设置问题。
当你在 IPv6 下想用其他只支持 IPv4 的服务器做 DNS,IPv6 中的 DNS 地址就只能填写成 IPv4 镜像地址::ffff:1.2.3.4的形式使其立即 fallback 到 IPv4 去解析,虽然日常使用上不会感觉有什么大问题,但是在使用例如nslookup之类的工具时就会发生异常。
而在子系统 Linux 中使用 DNSMasq 可以同时监听 IPv6,因此就可以很好的解决这个问题。
开启 Windows 子系统
1. 开启子系统功能
- Win10 系统设置->更新与安全->开发者选项->勾选“开发人员模式”,然后会有文字提示你“正在搜索开发者软件包”之类的,无需理会

- 控制面板->程序和功能->启用或关闭 Windows 功能->勾选“适用于 Linux 的 Windows 子系统”->确定,然后等操作完成以后重启

2. 安装子系统 Linux
打开 Win10 应用商店,右上角搜索“Linux”,然后根据结果指引你很容易能找到这里

然后选择你喜欢的 Linux 系统安装即可,我比较喜欢 Debian 所以安装了 Debian
安装完成后打开系统,会让你输入新用户名,直接输入root即可,这样能默认就使用 root 登录,然后根据提示设置一个密码即可
完成后先替换软件源,因为在国内用国外的官方源会非常非常慢
我习惯用nano编辑器,因此之后的所有编辑命令都是nano,你可以用你自己习惯的编辑器命令
nano /etc/apt/sources.list编辑完之后,nano编辑器是按Ctrl + X再按Y保存
将原来的软件源替换成阿里云的镜像源,以下示例是 Debian 9 的软件源,请你根据自己的系统发行版本来更换软件源
deb http://mirrors.aliyun.com/debian/ stretch maindeb http://mirrors.aliyun.com/debian/ stretch-updates maindeb http://mirrors.aliyun.com/debian-security/ stretch/updates main然后例行的apt-get二连,并安装后续所需依赖软件
apt-get updateapt-get upgrade -yapt-get install -y make gcc curl至此子系统的部署就完成了
部署 ChinaDNS
- 下载 ChinaDNS 源码并解压编译
cd /rootwget --no-check-certificate https://github.com/shadowsocks/ChinaDNS/releases/download/1.3.2/chinadns-1.3.2.tar.gztar -zxvf chinadns-1.3.2.tar.gzmv chinadns-1.3.2 chinadnscd chinadns./configure && make- 更新 chnrouter
# In /root/chinadnscurl 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv4 | grep CN | awk -F\| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > chnroute.txt- 配置 supervisor 进程守护
# 安装 supervisorapt-get install -y supervisor# 写入配置(8053是ChinaDNS监听端口,你可以修改成其他的,但是请注意端口冲突问题以及后续DNSMasq配置的同步修改)echo "[program:chinadns]command = /root/chinadns/src/chinadns -p 8053 -m -c /root/chinadns/chnroute.txt -s 114.114.114.114,208.67.222.222:443user = rootautostart = trueautorestart = true" > /etc/supervisor/conf.d/chinadns.conf- 启动 supervisor 服务
service supervisor start# 然后检查下 ChinaDNS 是否有正常运行supervisorctl status部署 DNSMasq
# 安装 DNSMasqapt-get install -y dnsmasq# 写入配置(使用ChinaDNS做上游DNS)echo "port=53no-resolvno-pollserver=127.0.0.1#8053" > /etc/dnsmasq.conf然后修改一下 DNSMasq 服务的启动命令**(重要,请务必修改,否则 DNSMasq 会无法正常使用配置)**
编辑 DNSMasq 服务
nano /etc/init.d/dnsmasq找到start()函数,按照此图注释掉并修改对应语句,然后保存退出

启动 DNSMasq 服务
service dnsmasq start修改系统 DNS 为本机
将 IPv4 DNS 改为仅127.0.0.1
将 IPv6 DNS 改为仅::1
然后用nslookup试一下,是不是无污染啦

让上面这一套开机自启
由于子系统 Linux 定制内核的特殊性无法运用rc.local那一套开机自启,因此需要曲线救国
新建/root/.boot.sh文件,写入以下内容
#!/bin/shservice supervisor startservice dnsmasq start然后打开 Windows 上的“启动”文件夹
路径是C:\Users\你的用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
在这里新建一个文本文件,写入以下代码
CreateObject("Wscript.Shell").run "bash ~/.boot.sh",vbhide然后将这个文本文件改名为linux.vbs
Windows 上的bash命令实际上就是子系统 Linux 中的bash,进行到这里我相信你应该懂上面的操作是什么意思了√
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!


