0%

Dnsmasq 超好用DNS服务

dnsmasq-Dnsmasq.png

介绍

Dnsmasq: 轻量级的 DNS,DHCP 服务器,适用于资源受限的路由器和防火墙。它还已广泛用于智能手机和便携式热点的网络共享,并在虚拟化框架中支持虚拟网络。受支持的平台包括Linux(带有glibc和uclibc),Android, BSD 和 Mac OSX。Dnsmasq包含在大多数Linux发行版以及FreeBSD,OpenBSD和NetBSD的端口系统中。Dnsmasq提供完整的IPv6支持。

安装

  • CentOS

    1
    yum install -y dnsmasq
  • Ubuntu/Debian/Deepin

    1
    apt-get install -y dnsmasq

    配置

    DNSmasq 的配置文件位于 /etc/dnsmasq.conf,均有注释说明,记录我的 dnsmasq.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    [root@repo ~]# egrep -v '^#|^$' /etc/dnsmasq.conf 
    # 以下两个参数告诉Dnsmasq过滤一些查询:1.哪些公共DNS没有回答 2.哪些root根域不可达。
    domain-needed # 从不转发格式错误的域名
    bogus-priv # 从不转发不在路由地址中的域名

    resolv-file=/home/hoke/dnsmasq/upstream.conf # 上游地址
    local=/runchain.com/ # 增加一个本地域名,会在/etc/hosts中进行查询
    addn-hosts=/home/hoke/dnsmasq/add_hosts # 自定义 hosts

    cache-size=10000 # 设置dns缓存大小,默认为150条

    # For debugging purposes, log each DNS query as it passes through
    # dnsmasq.
    log-queries
    log-facility=/var/log/dnsmasq.log

    # Include all files in a directory which end in .conf
    conf-dir=/home/hoke/dnsmasq/dnsmasq.d/,*.conf

    no-negcache # 不缓存未知域名缓存,默认情况下dnsmasq缓存未知域名并直接返回为客户端。
    clear-on-reload # 重启后清空缓存

    upstream.conf 上游地址配置

    1
    2
    3
    [root@repo ~]# cat /home/hoke/dnsmasq/upstream.conf
    nameserver 114.114.114.114
    nameserver 8.8.8.8

    以上仅开启 DNS,需要开启 DHCP 的朋友参看配置文件注释,配置修改后启动生效即可

    1
    systemctl start dnsmasq

    高阶技能

    dnsmasq-china-list

    特定于中文的配置可改善您喜欢的DNS服务器。chnroutes的最佳合作伙伴。

  • 提高中文域名的解析速度。

  • 尽可能获取最佳的CDN节点,但不要妥协外来CDN的结果,因此您同时也可以获得VPN的最佳CDN节点。

  • 在NXDOMAIN上阻止ISP广告(例如114so)。

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

用法

  1. clone 项目
    1
    git clone https://github.com/felixonmars/dnsmasq-china-list.git
  2. *.conf 拷贝至 conf-dir=/home/hoke/dnsmasq/dnsmasq.d/ 目录中
  3. 重启 DNSmasq
    1
    systemctl restart dnsmasq

conf 说明

  • accelerated-domains.china.conf:一般域加速。

    使用中文DNS服务器时,这些域的解析速度和/或结果更好。要确定某个域是否符合条件,必须满足以下条件之一:

    • 域的NS服务器位于中国大陆。
    • 使用中国的DNS服务器时,该域将解析为位于中国大陆的IP,但使用外国的DNS服务器(例如,在中国具有节点的CDN加速站点)时,该域并非总是如此。但是,这不包括在中国大陆附近有节点的节点,例如日本,香港,台湾等。
    • 如果顶级域名已经在列表中,请不要添加子域名。这包括该/cn/规则已匹配的所有.cn域。
  • google.china.conf:加速Google域。

    使用中文DNS时,会将这些域解析到Google中国服务器。在大多数情况下,这将为使用Google网络服务(例如Google Web Fonts和AdSense)的网站缩短页面加载时间。

    请记住,它们不被认为是稳定的。使用风险自负。

  • apple.china.conf:Apple域名将加速发展。

    一些ISP(通常是较小的ISP)在使用其中国大陆CDN服务器访问Apple资产时遇到问题。如果发生这种情况,请考虑删除此文件。

  • bogus-nxdomain.china.conf:反劫持,一般某域名如果不存在 dns 解析结果,会返回 nxdomain ,但是有些运营商会无良重定向至 114 导航等广告页面,dnsmasq-china-list 项目收集了一些这种污染 IP

定时检测 hosts , 自动刷新 Dnsmasq

每次改动 hosts , 都需要手动 restart Dnsmasq ,整了个自动化脚本放到定时任务里,实现自动刷新
新增定时脚本dnsmasq_crontab.sh, 作用是检测 add_hosts 文件1分钟内有没有修改,如有修改执行 restart dnsmqsq 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/env bash
######################脚本注释#############################
# 功 能: Dnsmasq自动刷新 #
# 作 者: hoke #
# 时 间: 20191126 #
###########################################################
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
#Current folder
CUR_DIR=`pwd`
DNSMASQ_PATH=/home/hoke/dnsmasq/
DNSMASQ_HOSTS=add_hosts
DNSMASQ_CHECK=`find ${DNSMASQ_PATH} -name ${DNSMASQ_HOSTS} -mmin -2`

if [ -n $DNSMASQ_CHECK ];then
systemctl restart dnsmasq
fi

加入 crontab

1
*/1 * * * * /home/hoke/dnsmasq/dnsmasq_crontab.sh
坚持原创技术分享,您的支持将鼓励我继续创作!