DNS服务器dnsmasq的简单用法

简介:dnsmasq是一个轻量级的DNS、DHCP和TFTP服务器软件,专为小型网络和路由器设计。它能够为局域网提供DNS缓存和DHCP服务,同时支持PXE网络启动功能

主要功能:

  • DNS服务:dnsmasq可以作为本地DNS服务器,缓存DNS查询结果,加速域名解析速度。它支持将特定域名解析到本地IP地址,常用于开发测试环境或家庭网络
  • DHCP服务:能够为局域网内的设备自动分配IP地址、网关、DNS服务器等网络配置信息
  • TFTP服务:支持PXE网络启动,允许客户端通过网络启动操作系统

核心特点:

  • 轻量级:资源占用极低,适合嵌入式设备和路由器
  • 配置简单:通过单个配置文件即可完成所有设置
  • 高性能:支持DNS缓存,减少对外部DNS服务器的查询
  • 安全性:支持DNS查询过滤,可屏蔽广告域名
  • 跨平台:支持Linux、macOS、Windows等系统

常用场景:dnsmasq广泛应用于家庭路由器、企业内网、开发测试环境、虚拟化平台等场景。在开发中,常用于将本地域名(如test.local)解析到开发服务器,方便多项目开发测试

本例子中演示使用ubuntu服务器,环境准备:

IP192.168.51.246192.168.49.224
用途DNS服务器应用服务器

1、安装dnsmasq,执行命令如下:

apt install dnsmasq
systemctl enable dnsmasq --now  #启动并设置自启动

注:ubuntu自带一个systemd-resolved.service也是提供本地DNS解析功能,可先停掉,否则提示53端口冲突


systemctl stop systemd-resolved
systemctl disable systemd-resolved

2、常用的dnsmasq的参数如下:

  • domain-needed:丢弃所有不包含点号(.)的纯主机名查询,默认不启用,需要取消注释,比如请求test域名,如果/etc/hosts中找不到,也不会发送到上游服务器,防止私有地址泄露到公网
  • port: 默认端口53,如果需要修改取消注释修改即可
  • bogus-priv: 过滤私有 IP 地址的反向 DNS 查询(PTR 记录查询),防止这些查询被转发到上游公共 DNS 服务器,如果没有开启bogus-priv,那么dig -x 192.168.1.1 @DNSIP  反向解析会被发送到上游DNS服务器中,在家庭和企业环境中,配合domain-needed使用,一起保护隐私,提高解析效率
  • dnssec:dnsmasq 会对从上游 DNS 服务器接收到的 DNS 响应进行 DNSSEC 验证,确保返回的 DNS 记录未被篡改,防止 DNS 欺骗攻击,配合dnssec-check-unsigned一起使用,启用dnssec需要上游 DNS 服务器支持 DNSSEC 验证,也会增加解析延迟和 CPU 开销
  • no-resolv:开启后将不读取/etc/resolv.conf中的nameserver地址为上游服务器,将使用server配置的地址为上游服务器,否则就读取/etc/resolv.conf
  • resolv-file:用于指定上游 DNS 服务器列表的配置文件路径,例如:resolv-file=/etc/resolv.dnsmasq,内容如下:
# /etc/resolv.dnsmasq
nameserver 8.8.8.8
nameserver 1.1.1.1

如果同时指定了 resolv-file和 server参数,server参数会覆盖 resolv-file中的配置

  • server:指定上游DNS服务器,如果配置了server,会覆盖resove-file参数
# 使用 Google DNS
server=8.8.8.8
server=8.8.4.4
# 使用 Cloudflare DNS
server=1.1.1.1
server=1.0.0.1
# 指定端口
server=8.8.8.8#53
# 为特定域指定专用服务器
server=/google.com/8.8.8.8
server=/cloudflare.com/1.1.1.1
# 使用 DNS over TLS (DoT)
server=8.8.8.8@853
server=1.1.1.1@853
# 使用 DNS over HTTPS (DoH)
server=https://dns.google/dns-query
server=https://cloudflare-dns.com/dns-query
  • address:用于配置本地 DNS 记录,实现域名到 IP 地址的静态映射,如下:

# 格式:address=/域名/IP地址
address=/example.com/192.168.1.100
address=/test.local/10.0.0.200
# 所有 .local 域名都解析到 192.168.1.1
address=/.local/192.168.1.1
  • 注意:如果/etc/hosts中配置了相同的域名,会覆盖掉address的地址,如果要禁止/etc/hosts而使用address,那么需要配置no-hosts参数或者addn-hosts
  • addn-hosts:指定域名解析的文件位置,类似/etc/hosts,优先级高于address
addn-hosts=/etc/dnsmasq-hosts
#vim /etc/dnsmasq-hosts
192.168.0.1  abcd.com
  • no-hosts:开启后,将不会读取/etc/hosts文件,所以不建议开启
  • listen-address:监听地址,可直接写本机IP和回环地址即可
  • interface:监听网络接口,填写本机网卡即可
  • log-queries:记录所有DNS日志
  • log-facility:日志位置
  • cache-size:缓存大小,单位为条数
  • local-ttl:客户端缓存的DNS记录时间,单位为秒

完整的常用配置如下:

#port=5353
domain-needed
bogus-priv
##dnssec   开启后解析会变慢 
##dnssec-check-unsigned
#resolv-file=
no-resolv
server=8.8.8.8
server=8.8.4.4
server=1.0.0.1
server=/google.com/8.8.8.8
server=/cloudflare.com/1.1.1.1
#address=/local.gong.com/192.168.49.15
interface=ens3
listen-address=192.168.51.246,127.0.0.1
cache-size=150
local-ttl=300
#no-hosts   不开启那就读取/etc/hosts
#addn-hosts=/etc/dnsmasq-hosts #和/etc/hosts用一个就行了
log-queries
log-facility=/var/log/dnsmasq.log

配置完成后,可通过命令测试配置是否正常,然后重启dnsmasq,如下:

dnsmasq --test
systemctl restart dnsmasq

3、验证

在DNS服务器上配置/etc/hosts文件,添加域名解析,如图:

在应用服务器上配置DNS地址指向DNS服务器,如图:

配置好后ping对应的域名,已经成功解析,如图:

也可以通过dig命令来测试解析,如图:

如果没有dig命令可通过命令安装,如下:

apt install bind-uils
or
yum -y install bind-uils

标签