Loading... # dnsmasq DNS 配置基础 # 一、概述 ## 1. DNS 服务概述 ### A. 什么是 DNS 转发器 dnsmasq 的 DNS 功能本质上是一个转发器(Forwarder)和缓存服务器的组合,而不是一个完整的递归解析器。这意味着 dnsmasq 不会像 BIND 那样从根服务器开始逐级查询域名,而是将客户端的 DNS 查询请求转发到上游的递归 DNS 服务器,然后将结果返回给客户端。 这种设计有以下几个优势: **资源占用小**:不需要维护完整的域名树数据结构,内存占用极小 **响应速度快**:利用缓存机制,重复查询直接从内存返回 **配置简单**:不需要配置根区域、区域文件等复杂概念 **安全性高**:不直接与互联网上的 DNS 服务器通信,减少攻击面 ### B. DNS 转发工作原理 当一个 DNS 查询到达 dnsmasq 时,会经历以下处理流程: ```mermaid 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)自动维护。 **查看当前上游服务器**: ```bash cat /etc/resolv.conf ``` **手动指定上游服务器**: 使用 --server 选项可以指定上游 DNS 服务器: ```bash # 配置文件语法 server=8.8.8.8 server=8.8.4.4 server=114.114.114.114 ``` **完全禁用 /etc/resolv.conf**: 如果不想使用 /etc/resolv.conf 中的服务器,可以使用 --no-resolv 选项: ```bash # 完整配置示例 no-resolv server=8.8.8.8 server=8.8.4.4 ``` ### B. 指定域名使用特定服务器 dnsmasq 最强大的功能之一是可以根据域名将查询转发到不同的上游服务器。这在国际网络环境下特别有用,可以实现国内外 DNS 分流。 **基本语法**: ```bash # 将特定域名的查询转发到指定服务器 server=/domain/upstream_dns ``` **实际应用示例**: ```bash # 国内域名使用国内 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.1 ``` ### C. 域名匹配规则详解 dnsmasq 的域名匹配规则非常灵活,支持多种匹配模式: **精确匹配**: ```bash # 只匹配 example.com,不匹配 www.example.com server=/example.com/192.168.1.1 ``` **子域名匹配**: ```bash # 匹配 example.com 和所有子域名 # 包括 www.example.com、api.example.com 等 # 但不包括 notexample.com server=/example.com/192.168.1.1 # 匹配所有以 .google.com 结尾的域名 server=/google.com/8.8.8.8 ``` **通配符匹配**: ```bash # * 在开头表示匹配任何前缀 # 匹配 google.com、www.google.com、mygoogle.com 等 server=/*google.com/8.8.8.8 # /*.google.com 只匹配子域名,不匹配 google.com 本身 server=/*.google.com/8.8.8.8 ``` **优先级规则**: 更具体的规则优先于通配符规则: ```bash # 这个配置会这样工作: # - www.google.com 使用 8.8.4.4 # - google.com 使用 8.8.8.8 # - mygoogle.com 使用 1.1.1.1 server=/google.com/8.8.8.8 server=/www.google.com/8.8.4.4 server=/*google.com/1.1.1.1 ``` ### D. 本地域名配置 对于不应该转发到上游服务器的本地域名,使用 --local 或 --server 选项(不带服务器地址): ```bash # 声明本地域名 local=/local.lan/ local=/home.lan/ # 或使用 server 语法(效果相同) server=/local.lan/ server=/home.lan/ # 禁用特定域名的转发 server=/example.local/ ``` 这样配置后,对于这些域名的查询: - 如果在 /etc/hosts 或 DHCP 租约中找到,返回对应记录 - 如果找不到,返回 NXDOMAIN(不存在) - 永远不会转发到上游服务器 ## 2. 高级转发配置 ### A. 指定源地址或接口 在复杂网络环境中,可能需要指定 dnsmasq 向特定上游服务器发送查询时使用的源地址或网络接口: ```bash # 指定源 IP 地址 server=8.8.8.8@192.168.1.10 # 指定网络接口 server=8.8.8.8@eth0 # 同时指定 IP 地址和接口 server=8.8.8.8@192.168.1.10@eth0 # 为特定域名指定路由 server=/vpn.example.com/10.0.0.1@tun0 ``` ### B. 反向解析配置 使用 --rev-server 选项可以简化反向解析区域的配置: ```bash # 传统方法(使用 server 选项) server=/1.168.192.in-addr.arpa/192.168.1.1 # 使用 rev-server(更简洁) rev-server=192.168.1.0/24,192.168.1.1 # IPv6 反向解析 rev-server=2001:db8::/32,2001:db8::1 ``` ### C. 多服务器策略 默认情况下,dnsmasq 只向第一个可用的上游服务器发送查询。要改变这种行为: ```bash # 向所有可用服务器发送查询(最快响应者胜出) all-servers # 严格按顺序使用服务器 strict-order # 设置服务器超时时间 timeout=5 ``` **all-servers 的效果**: ```bash # 配置示例 server=8.8.8.8 server=114.114.114.114 all-servers # 工作原理: # - 对于每个查询,向所有服务器同时发送 # - 使用第一个收到的响应 # - 优点:响应速度更快 # - 缺点:网络流量增加 ``` **strict-order 的效果**: ```bash # 配置示例 server=8.8.8.8 server=114.114.114.114 strict-order # 工作原理: # - 总是先尝试第一个服务器 # - 只有第一个服务器超时或失败才尝试第二个 # - 优点:可预测的行为 # - 缺点:第一个服务器故障时响应慢 ``` ### D. DNSSEC 配置 DNSSEC(DNS Security Extensions)是一组 DNS 安全扩展,用于验证 DNS 响应的真实性。 **启用 DNSSEC**: ```bash # 启用 DNSSEC 验证 dnssec # 信任特定域名(忽略其 DNSSEC 状态) trust-anchor=/com/,. DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E8804 9B4587B016A3C8E21B4D4D5A2F9A26E3B8B1 # 将特定域名视为未签名 dnssec-check-unsigned=no ``` **DNSSEC 工作原理**: ```mermaid sequenceDiagram participant C as 客户端 participant D as dnsmasq participant U as 上游 DNS participant R as 根服务器 C->>D: DNS 查询 D->>U: 转发查询 U->>R: 验证链查询 R-->>U: DNSKEY 记录 U-->>D: 答案 + RRSIG D->>D: 验证签名 D-->>C: 验证结果 ```  **注意事项**: - 启用 DNSSEC 会增加查询延迟和 CPU 使用 - 某些上游 DNS 服务器可能不完全支持 DNSSEC - 需要系统时间准确,否则验证可能失败 ## 3. DNS 缓存配置 ### A. 缓存大小设置 缓存大小直接影响 DNS 查询性能和内存使用: ```bash # 设置缓存条目数量 cache-size=10000 # 查看实际缓存大小 dig +short chaos txt cachesize.bind @127.0.0.1 ``` **缓存大小建议**: | 网络规模 | 设备数量 | 建议缓存大小 | 内存占用 | |---------|---------|------------|---------| | 家庭网络 | 1-20 | 1000-3000 | 约 2-5 MB | | 小型办公室 | 20-100 | 3000-10000 | 约 5-15 MB | | 中型企业 | 100-500 | 10000-50000 | 约 15-50 MB | ### B. TTL 控制选项 TTL(Time To Live)决定 DNS 记录在缓存中的存活时间: ```bash # 本地记录的 TTL(/etc/hosts、DHCP、配置) local-ttl=3600 # DHCP 租约记录的 TTL dhcp-ttl=3600 # 否定响应的缓存时间 neg-ttl=1800 # 返回给客户端的最大 TTL max-ttl=86400 # 缓存条目的最大 TTL max-cache-ttl=86400 # 缓存条目的最小 TTL min-cache-ttl=1800 # 权威服务器的 TTL auth-ttl=3600 ``` **TTL 配置建议**: ```bash # 平衡性能和数据新鲜度 # 对于家庭网络,可以适当延长 TTL max-cache-ttl=86400 min-cache-ttl=3600 # 对于需要频繁变更的环境 max-cache-ttl=3600 min-cache-ttl=300 # 防止否定响应被缓存太久 neg-ttl=600 ``` ### C. 缓存管理 **查看缓存统计**: ```bash # 发送 SIGUSR1 信号查看统计 sudo systemctl kill -s USR1 dnsmasq sudo journalctl -u dnsmasq --since "1 second ago" ``` 输出示例: ``` dnsmasq[1234]: cache size 10000, 0/50 cache insertions re-used unexpired cache entries. dnsmasq[1234]: queries forwarded 1234, queries answered locally 5678 dnsmasq[1234]: queries for authoritative zones 123 ``` **清空缓存**: ```bash # 方法一:重载服务(清空缓存并重读 hosts) sudo systemctl kill -s HUP dnsmasq # 方法二:重启服务 sudo systemctl restart dnsmasq # 方法三:使用 dbus(如果支持) dbus-send --system --dest=uk.org.thekelleys.dnsmasq /uk/org/thekelleys/dnsmasq uk.org.thekelleys.dnsmasq.ClearCache ``` # 三、本地主机名解析 ## 1. /etc/hosts 文件 ### A. 基本使用 dnsmasq 自动读取 /etc/hosts 文件,并将其内容用于本地主机名解析: ```bash # /etc/hosts 文件示例 127.0.0.1 localhost 192.168.1.1 router 192.168.1.10 server1 192.168.1.20 printer ``` **禁用 /etc/hosts**: ```bash # 完全禁用 /etc/hosts no-hosts # 禁用 /etc/hosts,但使用其他 hosts 文件 no-hosts addn-hosts=/etc/dnsmasq.hosts ``` ### B. 域名扩展 使用 --expand-hosts 选项可以自动将简单主机名扩展为完全限定域名: ```bash # 配置示例 domain=local.lan expand-hosts # /etc/hosts 中的简单主机名 192.168.1.10 server1 # 实际解析为 server1.local.lan -> 192.168.1.10 ``` ## 2. 额外 hosts 文件 ### A. 静态 hosts 文件 使用 --addn-hosts 选项可以指定额外的 hosts 文件: ```bash # 单个额外文件 addn-hosts=/etc/dnsmasq.hosts # 多个额外文件 addn-hosts=/etc/dnsmasq.hosts addn-hosts=/etc/dnsmasq.static # 指定目录(读取目录下所有文件) addn-hosts=/etc/dnsmasq.d ``` ### B. 动态 hosts 目录 使用 --hostsdir 选项可以监控目录变化,自动加载新增或修改的文件: ```bash # 监控目录 hostsdir=/etc/dnsmasq.hosts.d # 创建目录 sudo mkdir -p /etc/dnsmasq.hosts.d # 添加 hosts 文件 sudo tee /etc/dnsmasq.hosts.d/custom.conf <<EOF 192.168.1.100 device1.local.lan 192.168.1.101 device2.local.lan EOF # 无需重启,dnsmasq 会自动检测变化 ``` ## 3. DNS 重定向与拦截 ### A. 域名重定向 使用 --address 选项可以将特定域名解析到指定 IP 地址: ```bash # 基本语法 address=/domain/ip_address # 重定向示例 address=/ad.example.com/0.0.0.0 address=/tracker.analytics.com/127.0.0.1 address=/oldsite.com/192.168.1.100 # 重定向所有未匹配的域名 address=/#/192.168.1.1 ``` ### B. 广告拦截 通过配置大量广告域名指向 0.0.0.0,可以实现广告拦截功能: ```bash # 方法一:手动配置 address=/ad.doubleclick.net/0.0.0.0 address=/ads.google.com/0.0.0.0 address=/tracking.example.com/0.0.0.0 # 方法二:使用现成的 hosts 文件 addn-hosts=/etc/dnsmasq.adblock.list # 下载广告拦截列表 sudo wget -O /etc/dnsmasq.adblock.list https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts # 或使用 blocklist.site 格式 sudo curl -s https://blocklist.site/app/dl/hosts | \ sudo sed 's/^0.0.0.0/address=/' | \ sudo sed 's/$/\//' >> /etc/dnsmasq.adblock.list ``` # 四、域名匹配规则与通配符 ## 1. 匹配模式详解 ### A. 标准匹配 ```bash # 精确域名匹配 server=/example.com/192.168.1.1 # 匹配:example.com # 匹配:www.example.com # 不匹配:notexample.com # 使用 . 前缀的等价形式 server=/.example.com/192.168.1.1 # 效果同上 ``` ### B. 子域名匹配 ```bash # 只匹配子域名 server=/*.example.com/192.168.1.1 # 匹配:www.example.com # 匹配:api.example.com # 不匹配:example.com ``` ### C. 通配符匹配 ```bash # 通配符在开头 server=/*google.com/8.8.8.8 # 匹配:google.com # 匹配:www.google.com # 匹配:mygoogle.com ``` ### D. 优先级规则 ```bash # 更具体的规则优先 server=/google.com/8.8.8.8 server=/www.google.com/8.8.4.4 server=/*google.com/1.1.1.1 # 结果: # www.google.com -> 8.8.4.4 (最具体) # google.com -> 8.8.8.8 # mygoogle.com -> 1.1.1.1 (通配符) ``` ## 2. 高级匹配技巧 ### A. 特殊域名 ```bash # 空域名 = 不带点的域名 server=//192.168.1.1 # 只匹配 "localhost" 这样的单段名称 # # 符号 = 使用标准服务器 server=/google.com/1.2.3.4 server=/www.google.com/# # www.google.com 使用标准服务器,google.com 其他子域名使用 1.2.3.4 ``` ### B. IP 版本控制 ```bash # 过滤 AAAA 记录(禁用 IPv6) filter-AAAA # 过滤 A 记录(禁用 IPv4) filter-A # 过滤特定记录类型 filter-rr=TXT filter-rr=SRV ``` # 五、配置示例与最佳实践 ## 1. 常见配置场景 ### A. 家庭网络配置 ```bash # 家庭网络完整配置 interface=eth0 bind-interfaces # 上游 DNS server=8.8.8.8 server=8.8.4.4 # 本地域名 domain=home.lan expand-hosts local=/home.lan/ # DHCP 同步 dhcp-range=192.168.1.100,192.168.1.200,12h # 缓存设置 cache-size=5000 max-cache-ttl=86400 # 日志 log-queries log-facility=/var/log/dnsmasq.log ``` ### B. 企业内网配置 ```bash # 企业内网 DNS 配置 # 内网域名服务器 server=/corp.example.com/192.168.1.1 server=/ad.corp.example.com/192.168.1.2 # 本地域段 local=/corp.example.com/ # 外网查询 server=8.8.8.8 server=8.8.4.4 # 反向解析 rev-server=192.168.0.0/16,192.168.1.1 # 安全设置 bogus-priv local-service stop-dns-rebind ``` ## 2. 性能优化建议 ```bash # 缓存优化 cache-size=10000 max-cache-ttl=86400 min-cache-ttl=1800 # 并发查询 dns-forward-max=5000 # 快速重试 fast-dns-retry=1000,10000 # 端口范围 min-port=1024 max-port=65535 ``` # 六、实战案例 ## 1. 构建企业内网 DNS 服务 ### 场景描述 某企业需要搭建内网 DNS 服务,需求如下: - 内网域名使用 .corp.example.com 后缀 - 内网域名由独立的 DNS 服务器管理(192.168.1.1) - 外网域名查询使用公共 DNS - 支持反向解析 - 启用 DNSSEC 验证 ### 实现步骤 **步骤一:基础配置** ```bash sudo tee /etc/dnsmasq.conf <<EOF # ==================== 网络配置 ==================== interface=eth0 bind-interfaces # ==================== DNS 配置 ==================== # 内网域名服务器 server=/corp.example.com/192.168.1.1 server=/ad.corp.example.com/192.168.1.1 # 声明内网域名 local=/corp.example.com/ local=/ad.corp.example.com/ # 外网 DNS 服务器 server=8.8.8.8 server=8.8.4.4 # 反向解析 rev-server=192.168.0.0/16,192.168.1.1 rev-server=10.0.0.0/8,192.168.1.1 # DNSSEC 验证 dnssec # ==================== 缓存配置 ==================== cache-size=10000 max-cache-ttl=86400 min-cache-ttl=1800 # ==================== 安全配置 ==================== bogus-priv local-service stop-dns-rebind # ==================== 日志配置 ==================== log-queries log-facility=/var/log/dnsmasq.log EOF ``` **步骤二:测试配置** ```bash # 测试配置文件语法 dnsmasq --test --conf-file=/etc/dnsmasq.conf # 重启服务 sudo systemctl restart dnsmasq # 测试内网域名解析 dig @192.168.1.10 server1.corp.example.com # 测试外网域名解析 dig @192.168.1.10 google.com # 测试反向解析 dig @192.168.1.10 -x 192.168.1.100 ``` ### 验证结果 ```bash # 查看缓存统计 sudo systemctl kill -s USR1 dnsmasq sudo journalctl -u dnsmasq --since "1 second ago" | grep cache # 查看查询统计 sudo journalctl -u dnsmasq --since "1 minute ago" | grep "queries" ``` ## 2. 实现 DNS 分流 ### 场景描述 在国内网络环境下,需要实现以下 DNS 分流策略: - 国内域名使用国内 DNS 服务器(114.114.114.114、223.5.5.5) - 国外域名使用国外 DNS 服务器(8.8.8.8、1.1.1.1) - 某些特定网站使用专用 DNS 服务器 - 启用广告拦截功能 ### 实现步骤 **步骤一:创建分流配置** ```bash sudo tee /etc/dnsmasq.conf <<EOF # ==================== 网络配置 ==================== interface=eth0 bind-interfaces # ==================== DNS 分流配置 ==================== # 国内主要域名后缀使用国内 DNS server=/cn/114.114.114.114 server=/com.cn/114.114.114.114 server=/net.cn/114.114.114.114 server=/org.cn/114.114.114.114 server=/gov.cn/114.114.114.114 # 国内大型网站 server=/qq.com/119.29.29.29 server=/taobao.com/223.5.5.5 server=/tmall.com/223.5.5.5 server=/jd.com/223.6.6.6 server=/baidu.com/180.76.76.76 server=/sina.com.cn/114.114.114.114 server=/sohu.com/114.114.114.114 server=/163.com/114.114.114.114 server=/126.com/114.114.114.114 # 国外主要域名后缀使用国外 DNS server=/com/8.8.8.8 server=/org/8.8.8.8 server=/net/1.1.1.1 server=/io/8.8.8.8 server=/co/8.8.8.8 # 特定网站使用专用 DNS server=/youtube.com/8.8.8.8 server=/google.com/8.8.8.8 server=/facebook.com/1.1.1.1 server=/twitter.com/8.8.8.8 # 默认 DNS(用于未匹配的域名) server=8.8.8.8 server=1.1.1.1 # ==================== 广告拦截 ==================== addn-hosts=/etc/dnsmasq.adblock.list # ==================== 缓存配置 ==================== cache-size=10000 max-cache-ttl=86400 min-cache-ttl=1800 # ==================== 性能配置 ==================== all-servers dns-forward-max=5000 # ==================== 日志配置 ==================== log-queries log-facility=/var/log/dnsmasq.log EOF ``` **步骤二:下载广告拦截列表** ```bash # 下载 hosts 格式的广告列表 sudo wget -O /etc/dnsmasq.adblock.list https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts # 转换为 dnsmasq 格式 sudo sed -i 's/^0.0.0.0/address=/' /etc/dnsmasq.adblock.list sudo sed -i 's/$/\//' /etc/dnsmasq.adblock.list # 或直接下载 dnsmasq 格式 sudo wget -O /etc/dnsmasq.adblock.list https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/MobileFilter/sections/adservers.txt sudo sed -i 's/^||address=/' /etc/dnsmasq.adblock.list sudo sed -i 's/\^/\//' /etc/dnsmasq.adblock.list ``` **步骤三:创建自定义广告规则** ```bash sudo tee -a /etc/dnsmasq.adblock.list <<EOF # 自定义广告域名 address=/ad.doubleclick.net/ address=/ads.google.com/ address=/googlesyndication.com/ address=/googleadservices.com/ address=/tracker.analytics.com/ EOF ``` **步骤四:测试配置** ```bash # 测试国内域名 dig @192.168.1.10 baidu.com dig @192.168.1.10 qq.com # 测试国外域名 dig @192.168.1.10 google.com dig @192.168.1.10 youtube.com # 测试广告拦截 dig @192.168.1.10 ad.doubleclick.net dig @192.168.1.10 ads.google.com # 查看查询日志 sudo tail -f /var/log/dnsmasq.log ``` ### 验证与调优 **查看分流效果**: ```bash # 分析日志,查看各域名使用的上游服务器 sudo grep "server" /var/log/dnsmasq.log | tail -20 # 统计各上游服务器的查询次数 sudo grep "queries forwarded" /var/log/dnsmasq.log ``` **性能调优**: ```bash # 根据实际使用情况调整缓存大小 # 查看缓存命中率 sudo systemctl kill -s USR1 dnsmasq sudo journalctl -u dnsmasq --since "1 second ago" | grep "cache" # 调整并发连接数 echo "dns-forward-max=10000" | sudo tee -a /etc/dnsmasq.conf ``` # 七、常见问题 ## 1. 配置问题 ### Q: DNS 查询没有响应 A: 检查以下几点: ```bash # 1. 检查服务状态 sudo systemctl status dnsmasq # 2. 检查端口监听 sudo netstat -tulnp | grep 53 # 3. 测试本地 DNS dig @127.0.0.1 google.com # 4. 检查防火墙 sudo iptables -L -n -v | grep 53 # 5. 启用详细日志 log-queries=extra ``` ### Q: 某些域名无法解析 A: 可能的原因和解决方案: ```bash # 1. 检查是否被本地配置拦截 grep domain /etc/dnsmasq.conf grep address /etc/dnsmasq.conf # 2. 检查 DNSSEC 验证是否失败 grep dnssec /etc/dnsmasq.conf # 3. 尝试禁用 DNSSEC # dnssec-check-unsigned=no # 4. 查看详细查询日志 log-queries=extra sudo tail -f /var/log/dnsmasq.log ``` ## 2. 性能问题 ### Q: DNS 解析速度慢 A: 优化建议: ```bash # 1. 增大缓存 cache-size=20000 # 2. 启用快速重试 fast-dns-retry=500,5000 # 3. 使用 all-servers all-servers # 4. 检查网络延迟 ping -c 10 8.8.8.8 ping -c 10 114.114.114.114 ``` ### Q: 内存占用过高 A: 调整配置: ```bash # 1. 减小缓存大小 cache-size=1000 # 2. 减少并发连接 dns-forward-max=1000 # 3. 减少 TTL 值 max-cache-ttl=3600 ``` ## 3. 安全问题 ### Q: 防止 DNS 放大攻击 A: 安全配置: ```bash # 限制服务范围 local-service # 限制 TTL limit-ttl=100 # 限制递归 bogus-priv # 禁止查询特定记录 filter-rr=ANY ``` *** **标签**:dnsmasq、DNS、网络技术 **相关文档**: - [dnsmasq-简介与安装](202601301200.dnsmasq-简介与安装.md) - [dnsmasq-DNS记录与解析](dnsmasq-DNS记录与解析.md) - [dnsmasq-配置文件与管理](dnsmasq-配置文件与管理.md) 最后修改:2026 年 01 月 30 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏