[ChinaDNS] 无污染的智能路由 DNS 折腾记 #3
当前页面是本站的「Baidu MIP」版。查看和发表评论请点击:完整版 »
没想到这个系列还能有第三集,应该是完结篇了。这次是因为前不久试用了一下 Linux 的 Windows 子系统,发现意外的不错,与 Windows 本身契合度很高,于是在 Windows 里跑 DNSMasq + ChinaDNS 的设想得以实现√
Head Pic: 「夏コミグッズ…」/「三村ざじゃ」のイラスト [pixiv]
Windows 下的本机无污染 DNS 搭建方案
在上一篇文章中,我讲到了在国内服务器上使用 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 main
deb http://mirrors.aliyun.com/debian/ stretch-updates main
deb http://mirrors.aliyun.com/debian-security/ stretch/updates main
然后例行的apt-get
二连,并安装后续所需依赖软件
apt-get update
apt-get upgrade -y
apt-get install -y make gcc curl
至此子系统的部署就完成了
部署 ChinaDNS
- 下载 ChinaDNS 源码并解压编译
cd /root wget --no-check-certificate https://github.com/shadowsocks/ChinaDNS/releases/download/1.3.2/chinadns-1.3.2.tar.gz tar -zxvf chinadns-1.3.2.tar.gz mv chinadns-1.3.2 chinadns cd chinadns ./configure && make
- 更新 chnrouter
# In /root/chinadns curl '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 进程守护
# 安装 supervisor apt-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:443 user = root autostart = true autorestart = true" > /etc/supervisor/conf.d/chinadns.conf
- 启动 supervisor 服务
service supervisor start # 然后检查下 ChinaDNS 是否有正常运行 supervisorctl status
部署 DNSMasq
# 安装 DNSMasq
apt-get install -y dnsmasq
# 写入配置(使用ChinaDNS做上游DNS)
echo "port=53
no-resolv
no-poll
server=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/sh
service supervisor start
service 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
,进行到这里我相信你应该懂上面的操作是什么意思了√