使用 ChinaDNS 搭建无污染的DNS服务器
浏览 2504 | 评论 1 | 字数 5433
NiNya
2020年04月22日
  •   文章最后更新于:.
      受某些因素影响,本文章可能具有一定的时效性,请以实际情况为准!另外,欢迎留言~

    在家呆了三个月,至今没有开学的消息。虽然有互联网的陪伴能打消掉些许无聊,但移动的DNS严重影响了我的冲浪体验。移动的这个廉价宽带,怕是劫持是其创收的一部分吧。但如此深程度的影响对我而言属实不能忍,试着换了几个国内的和国外的公共DNS,稍微测了下悉数被抢答。结果,只有自己搭一个了。

    你需要准备的东西:

    • 一个拥有中国大陆公网 IP 的 VPS
    • 些许的 Linux 知识
    • 巧手和慧眼

    ----------以下几乎是百分百的原文转载----------

    部署 ChinaDNS

    # 如果 Linux 上没有安装 make 和 gcc 的话要先安装
    # Ubuntu / Debian
    apt-get install -y make gcc
    # CentOS
    yum install -y make gcc
    
    # 下载 ChinaDNS 源码并解压编译
    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
    cd chinadns-1.3.2
    ./configure && make
    
    # 更新 chnrouter(必要,因为源码中自带的 chnrouter 已经很旧了)
    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
    
    # 更新黑名单IP列表(推荐)
    rm -f iplist.txt && wget --no-check-certificate  https://raw.githubusercontent.com/Tsuk1ko/ChinaDNS/master/iplist.txt
    
    # 启动 ChinaDNS(编译好的程序在 src 目录中)
    src/chinadns -m -c chnroute.txt -s 114.114.114.114,208.67.222.222:443

    最后别忘记开放防火墙的53UDP端口,这一步如果你不会的话就自行百度吧(

    需要注意的是,这样直接运行是在前台运行,如果你退出 SSH,程序就会终止
    在正式使用场合,你需要使用nohu或者screen或者supervisor让 ChinaDNS 在后台一直运行(后面会讲使用supervisor的方法)

    重点

    如果不使用-s参数,那么 ChinaDNS 会默认使用114.114.114.114,208.67.222.222:443,8.8.8.8作为 DNS,这样会导致一个很严重的问题!

    前面我们说过,如果你不通过非53端口去查询国外 DNS,就会得到一个被污染的查询结果,因此如果你使用53端口的国外 DNS 作为 ChinaDNS 的 DNS,最终就会得到被污染的查询结果,从而无法解决污染问题,而 ChinaDNS 正是默认使用了8.8.8.8

    使用H大老毛子固件上的 ChinaDNS 的时候也请一定要把8.8.8.8去掉,如果不开酸酸/酸酸乳,那么这个8.8.8.8就会污染你的 ChinaDNS 结果
    你可以不用 114DNS 当国内 DNS,但是请注意使用-s参数指定 DNS 的时候,一定要把国内 DNS 写在前面,OpenDNS 写在最后面,否则会出现解析国内网站返回海外 IP 的现象(亲测
    另外,不能在境外的 VPS 上搭建 ChinaDNS:

    很简单,因为会被某个不能明言的魔法之力劫持

    测试

    以下是原作者自己家路由器上dig的结果:

    Pixiv

    [MI-3 /opt/home/admin]# dig www.pixiv.net @我自建的ChinaDNS服务器
    
    ; <<>> DiG 9.11.2 <<>> www.pixiv.net @我自建的ChinaDNS服务器
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55219
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;www.pixiv.net.         IN  A
    
    ;; ANSWER SECTION:
    www.pixiv.net.      39  IN  CNAME   pixiv.net.
    pixiv.net.      39  IN  A   210.129.120.44
    pixiv.net.      39  IN  A   210.129.120.41
    pixiv.net.      39  IN  A   210.129.120.42
    
    ;; Query time: 183 msec
    ;; SERVER: 我自建的ChinaDNS服务器#53(我自建的ChinaDNS服务器)
    ;; WHEN: Thu Apr 05 18:50:49 CST 2018
    ;; MSG SIZE  rcvd: 104

    解析正常√

    Google

    [MI-3 /opt/home/admin]# dig www.google.com @我自建的ChinaDNS服务器
    
    ; <<>> DiG 9.11.2 <<>> www.google.com @我自建的ChinaDNS服务器
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25408
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;www.google.com.            IN  A
    
    ;; ANSWER SECTION:
    www.google.com.     300 IN  A   172.217.25.4
    
    ;; Query time: 243 msec
    ;; SERVER: 我自建的ChinaDNS服务器#53(我自建的ChinaDNS服务器)
    ;; WHEN: Thu Apr 05 18:51:05 CST 2018
    ;; MSG SIZE  rcvd: 59

    解析正常√

    bilibili

    [MI-3 /opt/home/admin]# dig www.bilibili.com @我自建的ChinaDNS服务器
    
    ; <<>> DiG 9.11.2 <<>> www.bilibili.com @我自建的ChinaDNS服务器
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11000
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;www.bilibili.com.      IN  A
    
    ;; ANSWER SECTION:
    www.bilibili.com.   255 IN  CNAME   bilibili.hdslb.net.
    bilibili.hdslb.net. 134 IN  A   111.231.211.246
    bilibili.hdslb.net. 134 IN  A   140.143.82.138
    bilibili.hdslb.net. 134 IN  A   111.231.212.88
    bilibili.hdslb.net. 134 IN  A   112.117.218.167
    
    ;; Query time: 166 msec
    ;; SERVER: 我自建的ChinaDNS服务器#53(我自建的ChinaDNS服务器)
    ;; WHEN: Thu Apr 05 18:51:14 CST 2018
    ;; MSG SIZE  rcvd: 141

    解析正常,并且解析到的结果是国内的服务器,没有跑到国外去√

    使用 supervisor 守护进程

    防止 ChinaDNS 进程挂掉
    如果你的系统中已经有 supervisor,那么忽略安装步骤,酌情参考除了安装之外的配置步骤

    1.安装

    # python2
    pip install supervisord
    # python3
    pip install git+https://github.com/Supervisor/supervisor

    2.初始化并修改配置文件

    此处和原先不一样的一点:让 ChinaDNS 在8053端口(或者其他非53端口)监听

    echo_supervisord_conf > /etc/supervisord.conf
    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/supervisord.conf

    3.添加 supervisor 开机自启

    echo "supervisord -c /etc/supervisord.conf" >> /etc/rc.local
    # 执行此命令以防系统没有权限执行开机自启脚本(by youngerzhong)
    chmod +x /etc/rc.local

    之后查看/etc/rc.local文件,如果有exit 0这行,就把它移动到文件的最后一行,即保证我们上面添加的这句在exit 0前面

    4.启动 supervisor

    supervisord -c /etc/supervisord.conf

    然后查看程序运行状态

    supervisorctl status

    如果有输出 chinadns 的运行状态RUNNING就说明成功了

    此时可以用dig命令检查一下看 ChinaDNS 是否有正常运作

    在 OpenWRT 路由器上的使用

    可以选择原作者的 ChinaDNS 和 DNSMasq 结合起来的方式,也推荐使用 coolsnowwolf 和 Lienol 两位大神编译的路由器固件,搭配使用smartdns或者OpenClash来实现一个路由器配置,所有家庭设备享受的优质体验。

    转载信息

    神代綺凜の萌化小基地-无污染的智能路由 DNS 折腾记

    本文作者:NiNya
    本文链接:https://lilynas.com/archives/647/
    最后修改时间:2020-04-30 12:53:39
    本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!
    评论
    与本文无关评论请发留言板。请不要水评论,谢谢。
    textsms
    支持 Markdown 语法
    email
    link
    评论列表
    已有 1 条评论
    echoo00
    2021-08-20 11:16
    不能直接把搭建了智能DNS这台服务器的公网IP,设置成PC端的主用DNS服务器吗?