运维123 - DNS
type: channel
link: https://www.sddts.cn/index.php/category/dns/
items: Linux systemd-resolved DNS 缓存失效问题排查
items: dnsmasq 故障排查与参考
items: dnsmasq 配置文件与管理
items: dnsmasq 高级配置
items: dnsmasq TFTP 与网络启动
items: dnsmasq DHCPv6 与 IPv6
items: dnsmasq DHCPv4 配置
items: dnsmasq DNS 记录与解析
items: dnsmasq DNS 配置基础
items: dnsmasq 简介与安装

Linux systemd-resolved DNS 缓存失效问题排查
type: item
date: 2026-01-30T09:03:27+00:00
description: Linux systemd-resolved DNS 缓存失效问题排查一、事件概述1. 事件背景在 Linux 系统上使用 dnscache 工具检查 DNS 缓存状态时，发现缓存统计数据异常，缓存条目始终为 0，命中率极低。2. 影响范围A. 影响功能DNS 查询无法利用本地缓存，每次查询都需要访问网络，增加延迟和网络负载。B. 影响程度缓存命中率仅 4.85%所有 DNS 查询均走网络请求3. 问题表现Total Entries 始终为 0Cache Hits 不增加Cache Misses 持续增长resolvectl query 显示 Data from: network二、事件时间线1. 问题发现A. 现象描述执行 dnscache -stats 命令，观察到以下异常输出：DNS Cache Statistics ==================== Total Entries: 0 Cache Hits: 3551 Cache Misses: 69660 Hit Rate: 4.85%B. 初步判断缓存条目为 0 但有历史命中记录，说明缓存曾经工作过但当前无法保留条目。2. 深入排查A. 验证缓存刷新执行 dnscache -flush 后再次查看统计，Misses 继续增加但 Entries 仍为 0。B. 系统级验证使用 resolvectl statistics 确认系统级 DNS 缓存状态：Cache Current Cache Size: 0 Cache Hits: 3551 Cache Misses: 696853. 配置检查A. resolved 配置文件检查 /etc/systemd/resolved.conf：#Cache=no-negative #CacheFromLocalhost=no配置项被注释，使用默认值（Cache=yes），排除配置禁用缓存的可能。4. 根因定位A. 查询来源验证执行 resolvectl query google.com，输出显示：-- Data from: network确认 DNS 查询结果来自网络而非缓存，即使刚刚查询过同一域名。sequenceDiagram participant U as 用户 participant D as dnscache 工具 participant R as systemd-resolved participant N as 网络 DNS U->>D: dnscache -stats D->>R: 获取统计信息 R-->>D: Entries=0, Hits=3551 D-->>U: 显示统计结果 U->>R: resolvectl query google.com R->>N: DNS 查询请求 N-->>R: 返回 IP（TTL=0?） R-->>U: Data from: network Note over R: 缓存条目因 TTL 过期 立即被清除三、问题分析1. 直接原因DNS 查询结果没有被缓存，或缓存后立即过期被清除。2. 根本原因（5 Whys 分析）A. 为什么缓存条目始终为 0？DNS 记录的 TTL（Time To Live）值非常短或为 0，导致缓存立即过期。B. 为什么 TTL 会是 0？上游 DNS 服务器（企业内网 DNS 或特定配置的公共 DNS）返回的记录 TTL 被设置为极短值。C. 为什么上游 DNS 要设置短 TTL？企业 DNS 策略：便于快速切换 IP、负载均衡CDN 服务：动态调整流量分配安全考虑：防止 DNS 缓存投毒攻击3. 深层反思Cache Hits 是累计值，表示历史上有过缓存命中Current Cache Size 是实时值，表示当前缓存中的条目数两者不一致说明缓存机制正常，但条目因 TTL 过期被清除四、解决方案1. 诊断方法A. 检查 DNS 记录 TTL使用 dig 命令查看具体域名的 TTL 值：dig google.com +noall +answer若 TTL 显示为 0 或极小值（1-5 秒），确认是上游 DNS 配置问题。B. 连续查询对比# 第一次查询 dig example.com +noall +answer # 等待几秒后再次查询 dig example.com +noall +answer观察 TTL 值变化，正常情况下第二次查询的 TTL 应该比第一次小。2. 可能的解决方案A. 更换 DNS 服务器若当前使用企业 DNS，可尝试切换到公共 DNS（如 8.8.8.8、1.1.1.1）测试：# 临时测试 resolvectl dns eth0 8.8.8.8B. 配置本地 DNS 缓存部署 dnsmasq 或 unbound 作为本地缓存层…

dnsmasq 故障排查与参考
type: item
date: 2026-01-29T22:54:46+00:00
description: dnsmasq 故障排查与参考一、退出代码1. 退出代码含义0：正常退出1：配置错误2：网络错误3：文件访问错误二、常见问题1. DHCP 客户端无法获取地址# 检查服务状态 systemctl status dnsmasq # 检查端口监听 netstat -tulnp | grep 67 # 查看日志 journalctl -u dnsmasq -f2. DNS 解析缓慢# 检查上游服务器 ping -c 5 8.8.8.8 # 查看缓存 dig +short chaos txt cachesize.bind @127.0.0.1三、案例分析1. PXE 启动失败# 检查 TFTP 服务 netstat -tulnp | grep 69 # 检查文件权限 ls -la /var/tftpboot/ # 测试 TFTP tftp 192.168.1.1 -c get pxelinux.0标签：dnsmasq、故障排查

dnsmasq 配置文件与管理
type: item
date: 2026-01-29T22:54:42+00:00
description: dnsmasq 配置文件与管理一、配置文件语法1. 基本语法# 配置文件格式 option=value # 注释 # 这是注释 # 多值选项 server=8.8.8.8 server=8.8.4.42. 配置文件组织# 主配置文件 /etc/dnsmasq.conf # 额外配置目录 conf-dir=/etc/dnsmasq.d conf-file=/etc/dnsmasq/custom.conf二、信号处理与热重载1. 信号处理# SIGHUP - 重载 hosts 文件 sudo systemctl kill -s HUP dnsmasq # SIGUSR1 - 输出统计信息 sudo systemctl kill -s USR1 dnsmasq # SIGUSR2 - 重新打开日志文件 sudo systemctl kill -s USR2 dnsmasq三、实战案例1. 配置文件自动化# 分离配置 mkdir -p /etc/dnsmasq.d echo "server=8.8.8.8" > /etc/dnsmasq.d/dns.conf echo "dhcp-range=192.168.1.100,192.168.1.200" > /etc/dnsmasq.d/dhcp.conf标签：dnsmasq、运维

dnsmasq 高级配置
type: item
date: 2026-01-29T22:54:37+00:00
description: dnsmasq 高级配置一、标签系统1. 标签工作原理# 设置标签 dhcp-range=set:tag1,192.168.1.100,192.168.1.150 dhcp-option=tag:tag1,3,192.168.1.1 # 条件标签 dhcp-option=tag:known,3,192.168.1.12. 动态标签# 基于厂商的标签 dhcp-vendorclass=set:pxeclient,PXEClient dhcp-option=tag:pxeclient,17,/var/tftpboot二、脚本事件1. DHCP 事件脚本# 配置脚本 dhcp-script=/usr/local/bin/dhcp-event.sh # 脚本内容 #!/bin/bash case "$1" in add) logger "New device: $2 ($3)" ;; del) logger "Device left: $2 ($3)" ;; esac三、实战案例1. 多 VLAN 部署# VLAN 10 - 办公网络 interface=eth0.10 dhcp-range=eth0.10,192.168.10.100,192.168.10.200,12h dhcp-option=eth0.10,3,192.168.10.1 # VLAN 20 - 客人网络 interface=eth0.20 dhcp-range=eth0.20,192.168.20.100,192.168.20.200,2h dhcp-option=eth0.20,3,192.168.20.1标签：dnsmasq、网络技术

dnsmasq TFTP 与网络启动
type: item
date: 2026-01-29T22:54:33+00:00
description: dnsmasq TFTP 与网络启动一、TFTP 协议原理TFTP（Trivial File Transfer Protocol）是一个简单文件传输协议，主要用于网络启动场景。1. TFTP 配置# 启用 TFTP enable-tftp tftp-root=/var/tftpboot # 安全模式 tftp-secure tftp-max=50二、PXE 启动配置1. PXE 配置# PXE 提示 pxe-prompt="Press F8 for menu", 5 # PXE 服务 pxe-service=x86PC, "Install Linux", pxelinux pxe-service=x86PC, "Boot from local disk", 02. 引导菜单配置# /srv/tftp/pxelinux.cfg/default DEFAULT linux LABEL linux KERNEL vmlinuz APPEND initrd=initrd.img ip=dhcp LABEL local LOCALBOOT 0三、实战案例1. PXE 批量装机# 完整 PXE 配置 enable-tftp tftp-root=/srv/tftp dhcp-range=192.168.1.100,192.168.1.200,12h pxe-prompt="Install System", 10 pxe-service=x86PC, "Install Ubuntu", ubuntu-installer2. 多系统启动环境# 多启动选项 pxe-service=x86PC, "Ubuntu 22.04", ubuntu22 pxe-service=x86PC, "CentOS 8", centos8 pxe-service=x86PC, "Windows PE", winpe pxe-service=x86PC, "Local Disk", 0标签：dnsmasq、TFTP、PXE

dnsmasq DHCPv6 与 IPv6
type: item
date: 2026-01-29T22:54:28+00:00
description: dnsmasq DHCPv6 与 IPv6一、IPv6 地址基础1. 地址类型链路本地地址：fe80::/10唯一本地地址：fd00::/8全球单播地址：2000::/32. DHCPv6 配置# 有状态 DHCPv6 dhcp-range=tag:br0,2001:db8::100,2001:db8::200,64,12h # 无状态 DHCPv6（仅提供 DNS） dhcp-range=::,constructor:br0,ra-stateless,ra-names # 路由器通告 enable-ra ra-param=br0,0,18003. 双栈网络配置# IPv4 和 IPv6 同时启用 dhcp-range=192.168.1.100,192.168.1.200,12h dhcp-range=tag:br0,2001:db8::100,2001:db8::200,64,12h二、实战案例1. 纯 IPv6 家庭网络# 启用 RA enable-ra dhcp-range=::,constructor:eth0,ra-stateless,ra-names2. 双栈企业网络# 双栈配置 dhcp-range=192.168.1.100,192.168.1.200,12h dhcp-range=2001:db8::100,2001:db8::200,64,12h ra-param=eth0,mtu:1500,1800标签：dnsmasq、IPv6、DHCP

dnsmasq DHCPv4 配置
type: item
date: 2026-01-29T22:54:24+00:00
description: dnsmasq DHCPv4 配置一、DHCPv4 协议深度讲解1. DORA 流程sequenceDiagram participant C as 客户端 participant S as DHCP 服务器 C->>S: DHCP Discover (广播) S->>C: DHCP Offer (广播) C->>S: DHCP Request (广播) S->>C: DHCP Ack (广播)2. 地址池配置# 基本地址池 dhcp-range=192.168.1.100,192.168.1.200,12h # 多地址池 dhcp-range=eth0,192.168.1.100,192.168.1.200,12h dhcp-range=eth1,192.168.2.100,192.168.2.200,2h # 指定网关和掩码 dhcp-range=192.168.1.100,192.168.1.200,255.255.255.0,12h3. 静态地址分配# 通过 MAC 地址 dhcp-host=AA:BB:CC:DD:EE:FF,192.168.1.10,server1,infinite # 通过主机名 dhcp-host=printer,192.168.1.20 # 忽略设备 dhcp-host=AA:BB:CC:DD:EE:FF,ignore4. DHCP 选项# 网关 dhcp-option=3,192.168.1.1 # DNS 服务器 dhcp-option=6,8.8.8.8,8.8.4.4 # 域名后缀 dhcp-option=15,example.com二、实战案例1. 家庭网络配置interface=eth0 dhcp-range=192.168.1.100,192.168.1.200,12h dhcp-option=3,192.168.1.1 dhcp-option=6,192.168.1.1 dhcp-host=AA:BB:CC:DD:EE:FF,192.168.1.10,myserver,infinite2. 多网段企业网络# VLAN 接口 interface=eth0.10 dhcp-range=eth0.10,192.168.10.100,192.168.10.200,12h dhcp-option=eth0.10,3,192.168.10.1 interface=eth0.20 dhcp-range=eth0.20,192.168.20.100,192.168.20.200,12h dhcp-option=eth0.20,3,192.168.20.1标签：dnsmasq、DHCP、网络技术

dnsmasq DNS 记录与解析
type: item
date: 2026-01-29T22:54:19+00:00
description: dnsmasq DNS 记录与解析一、概述1. DNS 记录类型深度解析A. 什么是 DNS 记录DNS 记录（Resource Record，RR）是 DNS 系统中存储域名相关信息的基本单位。每条记录包含以下信息：名称（Name）：记录所属的域名类型（Type）：记录的类型（A、AAAA、CNAME、MX 等）类（Class）：通常是 IN（Internet）TTL：生存时间数据（Data）：记录的具体内容B. dnsmasq 支持的记录类型dnsmasq 支持以下 DNS 记录类型的配置：记录类型用途配置选项AIPv4 地址映射--host-record, --addressAAAAIPv6 地址映射--host-record, --addressCNAME域名别名--cnameMX邮件服务器--mx-host, --mx-targetSRV服务定位--srv-hostTXT文本信息--txt-recordPTR反向解析--ptr-recordNS域名服务器(权威模式自动生成)NAPTR命名权限指针--naptr-recordCAA证书颁发机构授权--caa-record二、各类记录详细配置1. A 和 AAAA 记录A. host-record 选项--host-record 是最灵活的主机记录配置方式：# 基本语法 host-record=name[,name...],[IPv4],[IPv6],[TTL] # 单个主机 host-record=server1,192.168.1.10 # 多个名称指向同一地址 host-record=www,web,server,192.168.1.10 # 同时配置 IPv4 和 IPv6 host-record=server1,192.168.1.10,2001:db8::10 # 指定 TTL host-record=server1,192.168.1.10,3600 # 完整示例 host-record=laptop,laptop.local.lan,192.168.1.100,fd00::100B. address 选项--address 选项主要用于域名重定向：# 基本语法 address=/domain/ipaddr # 广告拦截 address=/ad.example.com/0.0.0.0 # 服务重定向 address=/api.old.com/192.168.1.50 # 通配符重定向 address=/.internal.com/192.168.1.12. CNAME 记录A. 基本配置# 基本语法 cname=cname[,cname...],target[,TTL] # 单个别名 cname=www,server1 # 多个别名 cname=www,web,server1 # 指定 TTL cname=api,v2.api,backend.example.com,300 # 通配符别名 cname=*.example.com,default.example.comB. CNAME 链dnsmasq 支持多级 CNAME：# 配置示例 cname=blog,www cname=www,server1 host-record=server1,192.168.1.10 # 解析链：blog -> www -> server1 -> 192.168.1.103. MX 记录A. 邮件服务器配置# 指定邮件服务器 mx-host=mail.example.com,mail.example.com,10 # 使用 mx-target 设置默认目标 mx-target=mailserver.example.com mx-host=example.com # 多个 MX 记录（优先级不同） mx-host=mail1.example.com,mail1.example.com,10 mx-host=mail2.example.com,mail2.example.com,20B. MX 记录详解graph LR A[邮件发送者] -->|查询 MX| B[DNS 服务器] B -->|返回 MX 记录| C[邮件服务器列表] C --> D[MX 10: mail1] C --> E[MX 20: mail2] D -->|尝试连接| F[投递邮件] E -->|备用| F4. SRV 记录A. 服务定位配置# 基本语法 srv-host=_service._proto[.domain],[target][,port][,priority][,weight] # LDAP 服务器 srv-host=_ldap._tcp.example.com,ldap.example.c…

dnsmasq DNS 配置基础
type: item
date: 2026-01-29T22:54:14+00:00
description: dnsmasq DNS 配置基础一、概述1. DNS 服务概述A. 什么是 DNS 转发器dnsmasq 的 DNS 功能本质上是一个转发器（Forwarder）和缓存服务器的组合，而不是一个完整的递归解析器。这意味着 dnsmasq 不会像 BIND 那样从根服务器开始逐级查询域名，而是将客户端的 DNS 查询请求转发到上游的递归 DNS 服务器，然后将结果返回给客户端。这种设计有以下几个优势：资源占用小：不需要维护完整的域名树数据结构，内存占用极小响应速度快：利用缓存机制，重复查询直接从内存返回配置简单：不需要配置根区域、区域文件等复杂概念安全性高：不直接与互联网上的 DNS 服务器通信，减少攻击面B. DNS 转发工作原理当一个 DNS 查询到达 dnsmasq 时，会经历以下处理流程：flowchart TD A[客户端 DNS 查询] --> B{检查本地配置} B -->|有 address 配置| C[返回指定 IP] B -->|无配置| D{检查 /etc/hosts} D -->|找到记录| E[返回 hosts 记录] D -->|未找到| F{检查 DNS 缓存} F -->|缓存命中| G[返回缓存结果] F -->|缓存未命中| H[转发到上游 DNS] H --> I[等待上游响应] I --> J[存入缓存] J --> K[返回给客户端]C. 为什么使用 DNS 转发器使用 DNS 转发器而不是直接使用上游 DNS 服务器有以下好处：降低延迟：本地缓存可以显著减少查询延迟，尤其是对于频繁访问的域名减轻上游压力：减少对上游 DNS 服务器的查询次数，节省网络带宽提高可靠性：当上游服务器不可用时，缓存中的记录仍然可以提供服务灵活性：可以根据域名智能选择不同的上游服务器隐私保护：减少与外部 DNS 服务器的通信次数2. 前置知识A. DNS 基础概念域名结构：DNS 采用分层树状结构，从根域（.）开始，向下分为顶级域（.com、.cn）、二级域（example.com）、子域（www.example.com）等。记录类型：A 记录：将域名映射到 IPv4 地址AAAA 记录：将域名映射到 IPv6 地址CNAME 记录：域名别名MX 记录：邮件服务器TXT 记录：文本信息NS 记录：域名服务器PTR 记录：反向解析（IP 到域名）递归查询 vs 迭代查询：递归查询：DNS 服务器负责查询并返回最终结果迭代查询：DNS 服务器返回下一步应该查询的服务器地址B. 推荐知识了解 /etc/resolv.conf 文件的作用了解 dig 或 nslookup 工具的基本用法了解 DNS 查询日志如何查看和分析二、DNS 转发器配置1. 上游服务器设置A. 基本配置dnsmasq 默认从 /etc/resolv.conf 文件读取上游 DNS 服务器。对于大多数 Linux 发行版，这个文件由网络管理器（如 NetworkManager、systemd-networkd）自动维护。查看当前上游服务器：cat /etc/resolv.conf手动指定上游服务器：使用 --server 选项可以指定上游 DNS 服务器：# 配置文件语法 server=8.8.8.8 server=8.8.4.4 server=114.114.114.114完全禁用 /etc/resolv.conf：如果不想使用 /etc/resolv.conf 中的服务器，可以使用 --no-resolv 选项：# 完整配置示例 no-resolv server=8.8.8.8 server=8.8.4.4B. 指定域名使用特定服务器dnsmasq 最强大的功能之一是可以根据域名将查询转发到不同的上游服务器。这在国际网络环境下特别有用，可以实现国内外 DNS 分流。基本语法：# 将特定域名的查询转发到指定服务器 server=/domain/upstream_dns实际应用示例：# 国内域名使用国内 DNS server=/cn/114.114.114.114 server=/qq.com/119.29.29.29 server=/taobao.com/223.5.5.5 # 国外域名使用国外 DNS server=/com/8.8.8.8 server=/org/8.8.8.8 server=/net/1.1.1.1 # 企业内网域名 server=/internal.corp.com/192.168.1.1C. 域名匹配规则详解dnsmasq 的域名匹配规则非常灵活，支持多种匹配模式：精确匹配：# 只匹配 example.com，不匹配 www.example.com server=/example.com/192.168.1.1子域名匹配…

dnsmasq 简介与安装
type: item
date: 2026-01-29T22:54:09+00:00
description: dnsmasq 简介与安装一、概述1. 简介A. 是什么dnsmasq 是一个轻量级的网络服务器软件，集成了 DNS、DHCP、TFTP、PXE 和路由器通告等多种网络服务功能。它最初由 Simon Kelley 开发，专为嵌入式系统和资源受限环境设计，因此在保持功能强大的同时，对系统资源的需求非常小。dnsmasq 的核心设计理念是提供耦合的 DNS 和 DHCP 服务，这两种服务在网络环境中通常是紧密相关的。当 DHCP 服务器为客户端分配 IP 地址时，DNS 服务器需要能够解析这些客户端的主机名，dnsmasq 将这两种功能无缝集成在一起。B. 为什么学学习 dnsmasq 有以下几个重要理由：广泛的应用场景：dnsmasq 被众多网络设备和系统采用。许多家用路由器（如 OpenWrt、DD-WRT）、Linux 发行版、虚拟化平台（如 libvirt）都默认使用 dnsmasq 作为网络服务组件。资源占用极小：相比 BIND 等重量级 DNS 服务器，dnsmasq 的内存占用和 CPU 使用率都非常低，适合在资源受限的环境中运行。配置简单直观：dnsmasq 的配置文件语法简洁明了，一个简单的配置文件就能实现复杂的网络服务需求，学习成本低。功能全面：虽然轻量，但 dnsmasq 提供了企业级网络服务所需的大部分功能，包括 DNS 缓存、DHCP 地址分配、静态地址绑定、TFTP 网络启动等。开源免费：dnsmasq 采用 GPL 许可证发布，完全免费且源代码开放，可以自由使用、修改和分发。C. 学完能做什么掌握 dnsmasq 后，你可以实现以下功能：搭建家庭网络服务：为家庭网络提供 DNS 解析和 DHCP 服务，实现设备自动获取 IP 地址和本地域名解析。构建企业内网 DNS：为企业内部网络提供高效的 DNS 缓存和转发服务，减轻公网 DNS 服务器压力，提高解析速度。部署 PXE 网络启动：搭建网络启动服务器，实现操作系统无人值守批量安装。实现 DNS 分流：配置智能 DNS 转发，将不同的域名查询转发到不同的上游服务器，实现国内外域名分流解析。搭建开发测试环境：为开发测试环境提供灵活的网络服务，支持多网段、多接口配置。实现广告拦截：通过 DNS 重定向和拦截功能，实现网络广告过滤和家长控制。2. 前置知识A. 必备技能基本 Linux 操作：熟悉 Linux 命令行，能够使用文本编辑器（如 vim、nano）编辑配置文件网络基础概念：了解 IP 地址、子网掩码、网关、DNS 服务器等基本网络概念服务管理：了解如何使用 systemd 或 init.d 管理系统服务B. 推荐知识DNS 协议基础：了解 DNS 域名结构、记录类型（A 记录、CNAME 等）、递归查询等概念DHCP 协议基础：了解 DHCP 地址分配流程、租期、选项等概念网络调试工具：熟悉 ping、dig、nslookup、tcpdump 等网络诊断工具的使用二、环境准备1. 系统要求dnsmasq 支持多种操作系统和平台：Linux 发行版：Ubuntu、Debian、CentOS、Red Hat、Fedora、Arch Linux、openSUSE 等BSD 系统：FreeBSD、OpenBSD、NetBSDUnix 系统：macOS、Solaris嵌入式系统：OpenWrt、DD-WRT、Tomato 等路由器系统最低硬件要求：内存：几 MB 即可运行（典型占用约 2-5 MB）存储：dnsmasq 二进制文件约 200-500 KBCPU：无特殊要求，任何支持运行 Linux 的处理器均可2. 安装步骤A. Debian/Ubuntu 系统使用 apt 包管理器安装：# 更新软件源 sudo apt update # 安装 dnsmasq sudo apt install dnsmasq -y安装完成后，dnsmasq 服务会自动启动。可以使用以下命令检查服务状态：# 检查服务状态 sudo systemctl status dnsmasq # 查看版本信息 dnsmasq --versionB. CentOS/RHEL 系统使用 yum 或 dnf 包管理器安装：# CentOS 7/RHEL 7 使用 yum sudo yum install dnsmasq -y # CentOS 8/RHEL 8/Fedora 使用 dnf sudo dnf install dnsmasq -y # 启动服务 sudo systemctl start dnsmasq # 设置开机自启 sudo systemctl enable dnsmasqC. Arch Linux使用 pacman 包管理器安装：# 安装 dnsmasq sudo pacm…