ChinaDNS 与 DNSMasq 结合起来用,使其更加稳定并且可以支持 TCP 查询,防止dns污染和挟持,DNSMasq 作为主 DNS 服务端,将 ChinaDNS 作为 DNSMasq 的上游 DNS

ChinaDNS安装配置

1. 下载并编译

  1. 如果你的系统中没有makegcc就需要先安装
# Ubuntu / Debian
apt-get install -y make gcc
# CentOS
yum install -y make gcc
  1. 下载 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
  1. 更新 chnrouter

cd /root/chinadn
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

2. 配置 supervisor 守护进程

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

  1. 安装
# python2
pip install supervisord
# python3
pip install git+https://github.com/Supervisor/supervisor
  1. 初始化并修改配置文件
    此处和原先不一样的一点:让 ChinaDNS 在5353端口(或者其他非53端口)监听,因为我们要让它做 DNSMasq 的上游 DNS
echo_supervisord_conf > /etc/supervisord.conf
echo "[program:chinadns]
command=/root/chinadns/src/chinadns -p 5353 -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
  1. 添加 supervisor 开机自启
echo "supervisord -c /etc/supervisord.conf" >> /etc/rc.local
# 执行此命令以防系统没有权限执行开机自启脚本(by youngerzhong)
chmod +x /etc/rc.local

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

  1. 启动 supervisor
supervisord -c /etc/supervisord.conf

然后查看程序运行状态

supervisorctl status

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

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

dig www.pixiv.net @127.0.0.1 -p 5353

#!/bin/sh

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)) }' > /root/chinadns/chinadns_chnroute.txt
killall chinadns
echo "Upgrade is complete!"

DNSMasq安装配置

如果你已经有 DNSMasq,那么忽略安装步骤,酌情参考除了安装之外的配置步骤

1. 安装

Ubuntu / Debian

apt-get install dnsmasq

CentOS

CentOS yum安装的 DNSmasq 版本可能比较旧可以先下载最新版编译好,yum安装完之后再替换掉bin文件。

先从 http://www.thekelleys.org.uk/dnsmasq/ 找到你想要的 DNSmasq 版本的源码压缩包的下载地址,例如我选择的是我写这篇文章时的最新版dnsmasq-2.70.tar.gz

下载对应的源码压缩包并解压

cd /root
wget http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.70.tar.gz
tar xf dnsmasq-2.70.tar.gz

编译,源码 make 不带 etc 等

cd dnsmasq-2.70
make V=s

然后用 yum 安装 DNSmasq

yum install dnsmasq

yum 安装的是2.4.8版本,然后我们再用我们编译好的最新版本替换

yes | cp -f ./src/dnsmasq /usr/sbin/dnsmasq

这时可以查看 DNSmasq 的版本检验一下

dnsmasq -v

看一下版本号,应该就是我们编译好的版本了

配置实例详解

编辑/etc/dnsmasq.conf文件,将下面提到的配置项解除注释并进行更改

DNSmasq 的配置文件位于/etc/dnsmasq.conf,下面是 DNSmasq 中和 DNS 相关的配置项的说明。

此处的配置仅为说明,请勿照抄配置


# 用指定的端口代替默认的DNS 53端口,如果设置为0,则完全禁止DNS功能,只使用dhcp服务
port=5353# 以下两个参数告诉Dnsmasq过滤一些查询:1.哪些公共DNS没有回答 2.哪些root根域不可达。
# 从不转发格式错误的域名
domain-needed
# 从不转发不在路由地址中的域名
bogus-priv# resolv-file配置Dnsmasq额外的向流的DNS服务器,通过下面的选项指定其他文件。
# 如果不开启就使用linux主机默认的/etc/resolv.conf里的nameserver。
resolv-file=/etc/dnsmasq.d/upstream_dns.conf# 默认情况下Dnsmasq会发送查询到它的任何上游DNS服务器上,如果取消注释,
# 则Dnsmasq则会严格按照/etc/resolv.conf中的DNS Server顺序进行查询。
strict-order# 以下两个参数控制是否通过/etc/resolv.conf确定上游服务器,是否检测/etc/resolv.conf的变化。
# 如果你不想Dnsmasq读取/etc/resolv.conf文件或者其他文件,获得它的servers,则取消注释。
no-resolv
# 如果你不允许Dnsmasq通过轮询/etc/resolv.conf或者其他文件来获取配置的改变,则取消注释。
no-poll# 增加一个name server,一般用于内网域名
server=/localnet/192.168.0.1# 设置一个反向解析,所有192.168.3.0/24的地址都到10.1.2.3去解析
server=/3.168.192.in-addr.arpa/10.1.2.3# 增加一个本地域名,会在/etc/hosts中进行查询
local=/localnet/# 增加一个域名,强制解析到你指定的地址上
address=/double-click.net/127.0.0.1# 同上,还支持ipv6
address=/www.thekelleys.org.uk/fe80::20d:60ff:fe36:f83# 增加查询yahoo google和它们的子域名到***、search查找
ipset=/yahoo.com/google.com/***,search# 你还可以控制Dnsmasq和Server之间的查询从哪个网卡出去
server=10.1.2.3@eth1# 指定源地址携带10.1.2.3地址和192.168.1.1的55端口进行通讯
server=10.1.2.3@192.168.1.1#55# 改变Dnsmasq默认的uid和gid
user=
group=# 如果你想Dnsmasq监听某个端口为dhcp、dns提供服务
interface=# 你还可以指定哪个端口你不想监听
except-interface=# 设置想监听的地址,如果你本机要使用写上127.0.0.1。
listen-address=# 如果你想在某个端口只提供dns服务,则可以进行配置禁止dhcp服务
no-dhcp-interface=# On systems which support it, dnsmasq binds the wildcard address,
# even when it is listening on only some interfaces. It then discards
# requests that it shouldn't reply to. This has the advantage of
# working even when interfaces come and go and change address. If you
# want dnsmasq to really bind only the interfaces it is listening on,
# uncomment this option. About the only time you may need this is when
# running another nameserver on the same machine.
bind-interfaces# 如果你不想使用/etc/hosts,则取消下面的注释
no-hosts# 如果你项读取其他类似/etc/hosts文件,则进行配置
addn-hosts=/etc/banner_add_hosts# 自动的给hosts中的name增加一个域名
expand-hosts# 给dhcp服务赋予一个域名
domain=thekelleys.org.uk# 给dhcp的一个子域赋予一个不同的域名
domain=wireless.thekelleys.org.uk,192.168.2.0/24# 同上,不过子域是一个范围
domain=reserved.thekelleys.org.uk,192.68.3.100,192.168.3.200# dhcp分发ip的范围,以及每个ip的租约时间
dhcp-range=192.168.0.50,192.168.0.150,12h# 同上,不过给出了掩码
dhcp-range=192.168.0.50,192.168.0.150,255.255.255.0,12h# 自动加载conf-dir目录下的配置文件
conf-dir=/etc/dnsmasq.d# 设置dns缓存大小,默认为150条cache-size=150

修改完配置之后需要重启 DNSmasq 以使配置生效

# 指定监听 53 端口
port=53# 禁止 DNSMasq 使用 resolv.conf
no-resolv
no-poll# 指定监听IP,将 x.x.x.x 换成你的 eth0 网卡IP(用 ifconfig 命令查看)
listen-address=127.0.0.1,x.x.x.x# 指定额外配置文件夹
conf-dir=/etc/dnsmasq.d/`

如果你比较懒不想找而且只需要用 DNSMasq 做到本文所述功能,也可以直接
(注意替换x.x.x.x

echo "port=53
no-resolv
no-poll
listen-address=127.0.0.1,x.x.x.x
conf-dir=/etc/dnsmasq.d/" > /etc/dnsmasq.conf

然后运行以下命令写入配置以将 ChinaDNS 作为上游 DNS

echo "server=127.0.0.1#5353" > /etc/dnsmasq.d/chinadns.conf

重启 DNSMasq

systemctl restart dnsmasq.service

配置过程中需要注意的几点

把你的服务器作为一个 DNS 服务器

  1. 配置中的listen-address必须为你服务器的公网 IP
listen-address=你的公网IP
  1. 在防火墙中开放 53 端口
iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
  1. 如果是 CentOS 的话需要保存并重启防火墙使以上改动生效
service iptables save
service iptables restart

如果想强制重定向本地的 DNS 请求给 DNSmasq

eth0为网卡名,请替换为你自己机器的网卡名

iptables -t nat -A PREROUTING -i eth0 -p upd --dport 53 -j REDIRECT --to-port 53

然后重启防火墙(如果是 CentOS)

如果想自定义上游 DNS

no-resolv
no-poll
server=x.x.x.x#端口  //不写`#端口`默认是`53

使用上的一些建议

如果需要自定义上游 DNS 服务器,以及设置特定域名的 Host 之类的,建议写到一个单独的.conf配置文件里,然后放到一个专门的文件夹,然后修改 DNSmasq 配置中的这条

conf-dir=配置文件夹

这样的话以后修改配置就不需要频繁修改主配置文件,而且也有利于配置的分块

dnsmasq-china-list

dnsmasq-china-list项目维护了一张国内常用但是通过国外DNS会解析错误的网站域名的列表,保证List中的国内域名全部走国内DNS服务器解析。

项目地址: https://github.com/felixonmars/dnsmasq-china-list

使用

取消配置文件中conf-dir=/etc/dnsmasq.d这一行的注释

如果此处你是用的是自己的配置文件夹,那么久在后续步骤中将配置文件放入你自己的配置文件夹即可

随便找一个地方将项目文件下载下来

git clone https://github.com/felixonmars/dnsmasq-china-list.git

然后将其中的accelerated-domains.china.confbogus-nxdomain.china.confgoogle.china.conf(可选)放到/etc/dnsmasq.d/目录中
最后重启 DNSmasq 即可

转载于:https://blog.51cto.com/m51cto/2358638

ChinaDNS 结合DNSMasq防dns挟持相关推荐

  1. dnsmasq( DNS和DHCP)服务

    一.简介 Dnsmasq 提供 DNS 缓存和 DHCP 服务功能.作为域名解析服务器(DNS),dnsmasq可以通过缓存 DNS 请求来提高对访问过的网址的连接速度.作为DHCP 服务器,dnsm ...

  2. centos7使用dnsmasq搭建dns服务器

    安装 yum install -y dnsmasq 配置 编辑/etc/dnsmasq.conf 配置文件 #使用系统dns配置文件 resolv-file=/etc/resolv.conf #严格按 ...

  3. 防 DNS 污染方案

    作者简介: 陈宜龙,iOS开发工程师,现任职于LeanCloud,热爱开源与分享,GitHub 获得的Star数过万,其中 <iOS9适配系列教程> 一度成为该领域最有影响力的教程. St ...

  4. DNSmasq – 配置DNS和DHCP

    DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络.它提供了DNS功能和可选择的DHCP功能可以取代dhcpd(DHCPD服务配置)和bind等服务,配置起来更简单,更适用 ...

  5. (DNS)dnsmasq部署DNS

    转自:https://www.hi-linux.com/posts/30947.html Dnsmasq提供DNS缓存和DHCP服务.Tftp服务功能.作为域名解析服务器(DNS),Dnsmasq可以 ...

  6. dnsmasq搭建DNS服务器详解

    参考:https://www.phpmianshi.com/?id=101 Dnsmasq 简介 Dnsmasq 是一个轻量级的 DNS 缓存.DHCP.TFTP.PXE 服务器. 作为域名解析服务器 ...

  7. 使用dnsmasq作为dns服务器

    <span style="font-size:24px;">服务端配置vi /etc/dnsmasq.conf默认配置下,dnsmasq使用系统的/etc/resolv ...

  8. 70.用Dnsmasq构建DNS服务器

    70.1 演示环境介绍 RedHat7.2 sudo权限的ec2-user用户 70.2 操作演示 Dnsmasq是一款小巧且方便地用于配置DNS服务器和DHCP服务器的工具,适用于小型网络,它提供了 ...

  9. dnsmasq反DNS劫持、DNS污染、去广告

    通过配置文件/etc/dnsmasq.conf实现 DNS反劫持: bogus-nxdomain=x.x.x.x x.x.x.x是劫持域名的服务器地址,可以通过ping一个不存在的域名得到.如ping ...

最新文章

  1. 计算机对英语口语考试,计算机辅助高考英语口语考试中题型的设计与交际能力的实现.pdf...
  2. 皮一皮:真的是方法不对吗?
  3. Oracle函数的定义
  4. java项目使用mybatis
  5. 直接在script里面换样式IE6,7,8不兼容
  6. 微信小程序—day01
  7. java值参_JAVA赋值和传参理解
  8. LeetCOde-394:字符串解码
  9. 路由:vue-router
  10. Android UI 相关知识
  11. 台北宇珍2021春拍捷报,美国博物馆专拍创下白手套佳绩
  12. 【0226】信息安全与密码技术
  13. 浪潮之巅-读书笔记二
  14. java stdin怎么用_如何用Java编写ssh的stdin?
  15. windows消息分类PostMessage、SendMessage
  16. SuperPoint论文笔记
  17. github上比较好用的第三方
  18. Oxyplot实时绘图学习笔记(上)
  19. CentOS 6.5 安装使用iscsi-initiator
  20. 手机上怎么打字才能快?

热门文章

  1. Spring-mybatis 抽取 baseDao。
  2. Insert intervals
  3. Sina App Engine 介绍
  4. 将 Firefox 浏览器的书签导出
  5. Matlab | 数字信号处理:卷积
  6. 北斗导航 | GPS原理与接收机设计——琉璃剑之剑气回肠
  7. 数字语音信号处理学习笔记——语音信号的短时时域分析(3)
  8. TransparentBitmap函数设置透明位图的原理分析
  9. 详解数据挖掘与机器学习的区别与联系
  10. eclipse java 运行快捷键_java – 可以使用Eclipse中的键盘快捷方式启动/停止Tomcat吗?...