# Dnsmasq安装配置

Dnsmasq 是一个轻量级的 DNS 转发器和 DHCP 服务器,适用于小型网络。它可以将 DNS 查询缓存到本地,从而提高网络访问速度,并支持 DHCP 功能,为局域网设备分配 IP 地址。以下是 Dnsmasq 的安装、配置和使用指南。

# 安装

在 Arch Linux 上安装 Dnsmasq:

sudo pacman -S dnsmasq

# 配置

# 基本配置

Dnsmasq 的主要配置文件位于 /etc/dnsmasq.conf。以下是一些常见的配置选项:

  1. 监听地址: 默认情况下,Dnsmasq 只监听本地回环地址 127.0.0.1。如果你希望局域网中的其他设备也能使用 Dnsmasq,可以添加局域网 IP 地址:

    listen-address=127.0.0.1,192.168.1.123
    
  2. 上游 DNS 服务器: Dnsmasq 会从 /etc/resolv.conf 中读取上游 DNS 服务器。你可以通过 resolv-file 选项指定自定义的上游 DNS 文件:

    resolv-file=/etc/resolv.dnsmasq.conf
    

    /etc/resolv.dnsmasq.conf 中添加上游 DNS 服务器,例如:

    nameserver 8.8.8.8
    nameserver 114.114.114.114
    
  3. 缓存设置: 你可以通过 cache-size 选项设置 DNS 缓存的大小:

    cache-size=1000
    
  4. 本地域名解析: Dnsmasq 会优先解析 /etc/hosts 文件中的域名。你可以通过 addn-hosts 选项添加额外的 hosts 文件:

    addn-hosts=/etc/dnsmasq.hosts
    

# 高级配置

  1. 泛域名解析: 你可以通过 address 选项实现泛域名解析。例如,将所有 .local 域名解析到 192.168.1.100

    address=/local/192.168.1.100
    
  2. 屏蔽广告: 通过将广告域名解析到 127.0.0.1,可以屏蔽网页广告:

    address=/ad.youku.com/127.0.0.1
    address=/ad.iqiyi.com/127.0.0.1
    
  3. DHCP 功能: 如果需要启用 DHCP 功能,可以在配置文件中添加以下内容:

    interface=eth0
    dhcp-range=192.168.1.50,192.168.1.150,12h
    

    这将为 eth0 接口分配 192.168.1.50192.168.1.150 的 IP 地址,租期为 12 小时。

# 启动与测试

  1. 启动 Dnsmasq

    sudo systemctl start dnsmasq
    sudo systemctl enable dnsmasq
    
  2. 测试 DNS 缓存: 使用 dig 命令测试 DNS 查询速度:

    dig archlinux.org | grep "Query time"
    

    第一次查询时间较长,第二次查询由于缓存的存在,时间会显著缩短。

# 清除 DNS 缓存

如果需要清除 Dnsmasq 的 DNS 缓存,可以重启 Dnsmasq 服务:

sudo systemctl restart dnsmasq

# DNS 缓存配置

Dnsmasq 的核心功能之一是 DNS 缓存,通过缓存 DNS 查询结果,可以显著提升网络访问速度。

# 配置步骤:

  1. 设置缓存大小: 在 /etc/dnsmasq.conf 中,通过 cache-size 参数设置缓存大小。默认值为 150,建议根据网络规模调整:

    cache-size=1000
    
  2. 启用负缓存: 负缓存可以记录“域名不存在”的查询结果,避免重复查询不存在的域名:

    neg-ttl=3600
    

    如果需要禁用负缓存,可以取消注释 no-negcache

    #no-negcache
    
  3. 设置上游 DNS 服务器: 通过 resolv-file 指定上游 DNS 服务器文件,例如 /etc/resolv.dnsmasq.conf

    resolv-file=/etc/resolv.dnsmasq.conf
    

    resolv.dnsmasq.conf 中添加上游 DNS 服务器:

    nameserver 8.8.8.8
    nameserver 114.114.114.114
    
  4. 严格顺序解析: 启用 strict-order 参数,强制按照上游 DNS 服务器列表的顺序解析域名:

    strict-order
    

# DHCP 服务配置

Dnsmasq 可以作为 DHCP 服务器,为局域网设备分配 IP 地址。

# 配置步骤:

  1. 设置 DHCP 地址池: 在 /etc/dnsmasq.conf 中,通过 dhcp-range 参数定义 IP 地址范围和租期:

    dhcp-range=192.168.1.50,192.168.1.150,12h
    
  2. 静态 IP 分配: 通过 dhcp-host 参数为特定设备分配固定 IP 地址:

    dhcp-host=11:22:33:44:55:66,192.168.1.100
    
  3. 配置网关和 DNS: 使用 dhcp-option 参数为 DHCP 客户端分配网关和 DNS 服务器:

    dhcp-option=3,192.168.1.1  # 网关
    dhcp-option=6,8.8.8.8,114.114.114.114  # DNS 服务器
    
  4. 记录 DHCP 租约: 通过 dhcp-leasefile 参数记录 DHCP 分配的 IP 地址:

    dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases
    

# 日志记录与调试

Dnsmasq 支持详细的日志记录,便于排查问题。

# 配置步骤:

  1. 启用查询日志: 在 /etc/dnsmasq.conf 中,启用 log-queries 记录 DNS 查询日志:

    log-queries
    
  2. 自定义日志文件: 通过 log-facility 参数指定日志文件路径:

    log-facility=/var/log/dnsmasq.log
    
  3. 日志轮转配置: 使用 logrotate 配置日志轮转,避免日志文件过大:

    /var/log/dnsmasq.log {
        monthly
        missingok
        notifempty
        delaycompress
        postrotate
            /bin/kill -HUP $(cat /var/run/dnsmasq.pid 2>/dev/null) 2>/dev/null || true
        endscript
    }
    

# 泛域名解析与域名控制

Dnsmasq 支持泛域名解析和域名重定向功能,适用于内网 DNS 管理。

# 配置步骤:

  1. 泛域名解析: 通过 address 参数实现泛域名解析,例如将所有 .local 域名解析到 192.168.1.100

    address=/local/192.168.1.100
    
  2. 屏蔽广告域名: 将广告域名解析到 127.0.0.1,实现广告屏蔽:

    address=/ad.youku.com/127.0.0.1
    address=/ad.iqiyi.com/127.0.0.1
    
  3. 域名重定向: 将特定域名解析到指定 IP 地址,例如将 example.com 解析到 192.168.1.200

    address=/example.com/192.168.1.200
    

# 高级功能与优化

Dnsmasq 还支持 TFTP 服务、PXE 启动等高级功能。

# 配置步骤:

  1. 启用 TFTP 服务: 在 /etc/dnsmasq.conf 中,启用 TFTP 服务并指定文件目录:

    enable-tftp
    tftp-root=/var/lib/tftpboot
    
  2. PXE 启动支持: 通过 dhcp-boot 参数配置 PXE 启动文件:

    dhcp-boot=pxelinux.0
    
  3. 优化 DNS 查询: 通过 dns-forward-max 参数限制并发 DNS 查询数量,避免资源耗尽:

    dns-forward-max=150
    

# 常见问题排查

  1. Dnsmasq 无法启动

    • 检查配置文件语法:dnsmasq --test
    • 确保端口 53 未被占用:netstat -tunlp | grep 53
    • 使用 sudo 权限启动服务。
  2. DNS 查询失败

    • 检查上游 DNS 服务器配置。
    • 使用 nslookupdig 测试 DNS 解析。
  3. DHCP 地址冲突

    • 调整 DHCP 租约时间。
    • 确保网络中只有一个 DHCP 服务器。

# 参考