【Network】dnsmasq 初学

Posted by 西维蜀黍 on 2019-01-30, Last Modified on 2024-05-02

dnsmasq的简介

dnsmasq 提供 DNS 缓存DHCP 服务功能。作为域名解析服务器(DNS),dnsmasq可以通过缓存 DNS 请求来提高对访问过的网址的连接速度。作为DHCP 服务器,dnsmasq 可以用于为局域网电脑分配内网 IP 地址和提供路由。DNS和DHCP两个功能可以同时或分别单独实现。

dnsmasq配置

查看配置文件语法是否正确

$ dnsmasq --test
dnsmasq: syntax check OK.

Debug

# 关于log的几个选项
# For debugging purposes, log each DNS query as it passes through
# dnsmasq.
log-queries
 
# Log lots of extra information about DHCP transactions.
#log-dhcp
 
# Log to this syslog facility or file. (defaults to DAEMON)
log-facility=/var/log/dnsmasq.log

指定上游DNS服务器

指定单个上游DNS服务器

$ vi /etc/dnsmasq.conf
server=1.1.1.1

指定多个上游DNS服务器

添加all-servers的意义在于:向所有列出的上游服务器均发送DNS查询,而不是只向一个发送DNS查询。

all-servers 表示对以下设置的所有 server 发起查询,选择回应最快的一条作为查询结果返回。

$ vi /etc/dnsmasq.conf
all-servers
server=1.1.1.1
server=8.8.8.8 
server=1.2.4.8 
server=223.5.5.5

dnsmasq的主要作用

智能DNS加快解析速度

智能DNS加快解析速度,打开/etc/dnsmasq.conf文件,server=后面可以添加指定的DNS,例如国内外不同的网站使用不同的DNS。

国内域名指定DNS

server=/cn/114.114.114.114
server=/taobao.com/114.114.114.114
server=/taobaocdn.com/114.114.114.114

国外域名指定DNS

server=/google.com/223.5.5.5

屏蔽网页广告

屏蔽网页广告,将指广告的URL指定127这个IP,就可以将网页上讨厌的广告给去掉了。

address=/ad.youku.com/127.0.0.1

address=/ad.iqiyi.com/127.0.0.1

dnsmasq的解析流程

dnsmasq先去解析hosts文件, 再去解析/etc/dnsmasq.d/下的*.conf文件,并且这些文件的优先级要高于dnsmasq.conf,我们自定义的resolv.dnsmasq.conf中的DNS也被称为上游DNS,这是最后去查询解析的;

如果不想用hosts文件做解析,我们可以在/etc/dnsmasq.conf中加入no-hosts这条语句,这样的话就直接查询上游DNS了,如果我们不想做上游查询,就是不想做正常的解析,我们可以加入no-reslov这条语句。

dnsmasq的参数及常用设置说明

编辑 dnsmasq 的配置文件 /etc/dnsmasq.conf 。这个文件包含大量的选项注释。

dnsmasq经常修改的比较重要参数说明

具体参数 参数说明
resolv-file 定义dnsmasq从哪里获取上游DNS服务器的地址, 默认从/etc/resolv.conf获取。
strict-order 表示严格按照resolv-file文件中的顺序从上到下进行DNS解析,直到第一个解析成功为止。
listen-address 定义dnsmasq监听的地址,默认是监控本机的所有网卡上。
address 启用泛域名解析,即自定义解析a记录,例如:address=/long.com/192.168.115.10 访问long.com时的所有域名都会被解析成192.168.115.10
bogus-nxdomain 对于任何被解析到此 IP 的域名,将响应 NXDOMAIN 使其解析失效,可以多次指定****通常用于对于访问不存在的域名,禁止其跳转到运营商的广告站点
server **指定使用哪个DNS服务器进行解析,对于不同的网站可以使用不同的域名对应解析。**例如:server=/google.com/8.8.8.8 表示对于google的服务,使用谷歌的DNS解析。

OpenWrt 安装 dnsmasq-full

root@OpenWrt:~# opkg install dnsmasq-full
Installing dnsmasq-full (2.82-4) to root...
Downloading http://downloads.openwrt.org/snapshots/packages/mipsel_24kc/base/dnsmasq-full_2.82-4_mipsel_24kc.ipk
Collected errors:

- satisfy_dependencies_for: Cannot satisfy the following dependencies for dnsmasq-full:
- kernel (= 5.4.65-1-70f97ad5368ab3f3a02f0694a397f029)
- opkg_install_cmd: Cannot install package dnsmasq-full.

Solution

root@OpenWrt:~# opkg install dnsmasq-full --force-depends

Reference