使用 dnsmasq 缓存域名解析结果加快上网速度

  • 安装 dnsmasq
    yaourt -S dnsmasq
    
  • 配置 NetworkManager

    NetworkManager 包含 dnsmasq 插件,可以很方便地支持 dns 缓存。

    修改 /etc/NetworkManager/NetworkManager.conf

    dns=dnsmasq
    

    参考 dnsmasq - ArchWiki

  • 配置 dnsmasq

    NetworkManager 将 dnsmasq 的配置存放在其它位置。

    /etc/NetworkManager/dnsmasq.d/dnsmasq.conf

    listen-address=127.0.0.1
    bind-interfaces
    dhcp-authoritative
    no-negcache
    strict-order
    

    参考 《使用 dnsmasq 进行 DNS 缓存注意事项

  • 生效配置

    重启 NetworkManager 正式生效配置

    sudo systemctl restart NetworkManager
    

    dnsmasq 不要通过 systemd 以服务方式启动,它会由 NetworkManager 启动

    $ COLUMNS=400 ps wax | grep dnsmasq
     6072 ?        S      0:00 /usr/bin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/NetworkManager/dnsmasq.pid --listen-address=127.0.0.1 --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=400 --proxy-dnssec --conf-dir=/etc/NetworkManager/dnsmasq.d
    

    上游域名服务器在 /var/run/NetworkManager/dnsmasq.conf 中指定,通常由 dhcp 服务分配。

    添加其它域名服务器,在 /etc/NetworkManager/dnsmasq.d/dnsmasq.conf 中添加以下配置:

    server=114.114.114.114
    

    输出日志调试 dnsmasq ,在 /etc/NetworkManager/dnsmasq.d/dnsmasq.conf 中添加以下配置:

    log-facility=/var/log/dnsmasq.log
    log-queries
    

    重启 NetworkManager 生效。

  • 看看效果

    多次执行下面的命令,可以感觉到后几次明显比第一次快,这就是 DNS 缓存在起作用。

    nslookup www.baidu.com
    
  • 与 pdnsd 比较

    之前写过一篇《 使用Pdnsd缓存域名解析结果加快上网速度 》,本篇改用 dnsmasq 实现,可以发现 dnsmasq 和 NetworkManager 集成度很高,即插即用, 而 pdnsd 则要手动做很多设置,而且很难实现自动使用 dhcp 分配的域名服务器做为上游域名服务器。