当前位置: 首页 > news >正文

Orange的运维学习日记--35.DNS拓展与故障排除

Orange的运维学习日记–35.DNS拓展与故障排除

文章目录

  • Orange的运维学习日记--35.DNS拓展与故障排除
    • 名称解析架构
    • 名称解析来源顺序
    • 使用 dig 调试 DNS 查询
    • 网络连通性检查
    • DNS 响应代码
      • SERVFAIL 深入排查
      • NXDOMAIN 常见原因
      • REFUSED 常见原因
    • Zone 数据层面故障
      • DNS 轮询
      • 缺少 PTR 记录
      • 通配符记录误伤
      • 区域文件尾点与名称拼接
      • 循环或孤立的 CNAME 别名
      • 权威服务器数据不一致
    • 配置缓存名称服务器
      • Unbound
        • 安装
        • 基本配置
        • 启用与防火墙
        • 客户端测试
        • 管理缓存
      • Dnsmasq
        • 功能简介
        • 安装
        • 配置
        • 启用与防火墙
        • 客户端测试
        • 支持多于三个上游服务器
        • 支持多于三个上游服务器

名称解析架构

名称解析依赖客户端、本地缓存解析器、权威名称服务器及网络配置

客户端根据 /etc/nsswitch.conf 中 hosts 行和 /etc/resolv.conf 发起查询

缓存解析器对外转发查询并返回缓存结果或向权威服务器查询

权威名称服务器托管区域数据,确保记录正确并同步 SOA 序列号

网络通道需保证客户端与各级名称服务器的 UDP/TCP 53 端口互通

在这里插入图片描述


名称解析来源顺序

系统通过 /etc/nsswitch.conf 中 hosts 行的顺序决定名称解析方式

典型配置

hosts: files dns myhostname
  • files 表示优先读取 /etc/hosts
  • dns 表示接着发起 DNS 查询
  • myhostname 针对本地主机名做特殊处理

使用 getent hosts <主机名> 可严格按上述顺序执行解析

getent hosts server.laoma.cloud

使用 dig 调试 DNS 查询

dig 是调查 DNS 问题的利器

  • 默认查 A 记录:

    dig example.com
    
  • 指定记录类型 AAAA:

    dig AAAA example.com
    
  • 指定查询服务器和记录类型 MX:

    dig @10.0.0.1 mx example.com
    

输出片段

  • HEADER 段报告状态码和查询选项
  • QUESTION 段重述查询
  • ANSWER/AUTHORITY/ADDITIONAL 段列出响应记录

网络连通性检查

如果出现 connection timed out; no servers could be reached

  • 核实 /etc/resolv.conf 中 DNS 服务器地址正确性
  • 检查客户端防火墙或网络策略是否阻断 UDP/TCP 53
  • 使用 dig +tcp 强制走 TCP 排查截断或 EDNS 问题

当响应超过默认 UDP 容量(512 字节,EDNS 可达 4096)时,解析器会切换到 TCP


DNS 响应代码

HEADER 中 status 字段报告服务器处理结果

  • NOERROR 查询成功但记录可能不符合预期
  • SERVFAIL 服务器与权威服务器通信失败或内部故障
  • NXDOMAIN 名称不存在或被负缓存拦截
  • REFUSED 服务器因策略拒绝递归查询或区域传输

SERVFAIL 深入排查

使用 dig +trace 可从根服务器开始进行迭代查询,定位链路中断位置

NXDOMAIN 常见原因

  • 查询名称确实不存在
  • 孤立 CNAME 指向无 A/AAAA 记录的别名
  • 负缓存未过期,需等待或清理缓存

REFUSED 常见原因

  • 客户端无权限递归或请求非递归查询
  • 服务器策略限制导致拒绝服务

Zone 数据层面故障

DNS 轮询

同一名称配置多个 A/AAAA 记录实现简单负载分发

  • 响应顺序随机化,客户端通常使用列表首元素
  • 遗留旧 IP 未删除会导致部分请求指向失效地址

排查示例

for i in {1..10}; do dig example.com A +short; done

缺少 PTR 记录

  • SSHD 默认对客户端 IP 执行反向查找,缺 PTR 会导致连接延迟
  • 邮件服务器依赖 PTR 防垃圾邮件,缺 PTR 可能被拒收

使用 dig -x 1.2.3.4 检查反向区域并添加 PTR 记录

通配符记录误伤

通配符记录匹配所有未定义名称

*.laoma.cloud. IN A 172.25.254.254

删除特定 A 记录后仍返回通配符地址,需移除或精确化定义

区域文件尾点与名称拼接

  • 短主机名不以 . 结尾会自动追加区域名
  • 完整 FQDN 必须以 . 结尾避免二次拼接

示例

host   IN A 10.0.0.1   ; 解析为 host.zone.com
host.  IN A 10.0.0.1   ; 解析为 host

循环或孤立的 CNAME 别名

  • 孤立 CNAME 指向无 A/AAAA 记录名称,返回 NXDOMAIN
  • 循环 CNAME 互相指向,返回 NOERROR 但无法解析

使用 named-checkzone 或自定义脚本批量验证 CNAME 链条

权威服务器数据不一致

主从服务器返回结果不同时

  • 对比 SOA 序列号:

    dig @master example.com SOA
    dig @slave  example.com SOA
    
  • 确认主服务器更新时递增序列号并允许区域传输

  • 检查网络或防火墙是否阻断 AXFR/IXFR


配置缓存名称服务器

在内部网络部署缓存名称服务器可大幅提升解析性能

Unbound

安装
yum install -y unbound
基本配置

编辑 /etc/unbound/unbound.conf

  • 定义监听接口

    server:interface: 10.1.8.20interface: 2001:db8:1001::f0interface-automatic: no
    
  • 配置访问控制

    access-control: 127.0.0.0/8   allow
    access-control: 172.25.0.0/24 allow
    access-control: 10.1.7.0/24   refuse
    
  • 可选转发所有或特定域

    forward-zone:name: "."forward-addr: 10.1.8.10
    
  • 可选跳过 DNSSEC 验证

    domain-insecure: laoma.cloud
    harden-dnssec-stripped: no
    
启用与防火墙
unbound-checkconf
systemctl enable --now unbound
firewall-cmd --add-service=dns --permanent
客户端测试
dig @10.1.8.20 client.laoma.cloud
dig @10.1.8.20 student.laoma.cloud
dig @10.1.8.20 dns.laoma.cloud
管理缓存
  • 导出缓存

    unbound-control dump_cache > dns_dump
    
  • 清空单个记录

    unbound-control flush student.laoma.cloud
    
  • 清空整个区域

    unbound-control flush_zone laoma.cloud
    
  • 导入缓存

    unbound-control load_cache < dns_dump
    

Dnsmasq

功能简介

Dnsmasq 集成 DNS 缓存、DHCP、PXE 等功能,适合个人或小型网络

安装
yum install -y dnsmasq
配置

编辑 /etc/dnsmasq.conf

  • resolv-file 指定上游 DNS 列表
  • strict-order 按顺序使用上游服务器
  • listen-address 定义监听地址
  • address=/domain/ip 强制域名解析至指定 IP
  • server=/domain/dns 针对不同域使用不同上游 DNS
  • bogus-nxdomain 拦截被劫持的 NXDOMAIN 重定向

禁止 /etc/hosts/etc/resolv.conf 解析

no-hosts
no-resolv

示例

resolv-file=/etc/resolv.dnsmasq.conf
server=/laoma.cloud/10.1.8.10
启用与防火墙
dnsmasq -test
systemctl enable --now dnsmasq
firewall-cmd --add-service=dns --permanent
客户端测试
dig @10.1.8.20 client.laoma.cloud
dig @10.1.8.20 student.laoma.cloud
dig @10.1.8.20 dns.laoma.cloud
支持多于三个上游服务器

/etc/resolv.conf 仅保留 localhost

新建上游列表文件 /etc/resolv.dnsmasq.conf

nameserver 8.8.8.8
nameserver 8.8.4.4

在 dnsmasq 配置中引用

resolv-file=/etc/resolv.dnsmasq.conf
bash
dig @10.1.8.20 client.laoma.cloud
dig @10.1.8.20 student.laoma.cloud
dig @10.1.8.20 dns.laoma.cloud
支持多于三个上游服务器

/etc/resolv.conf 仅保留 localhost

新建上游列表文件 /etc/resolv.dnsmasq.conf

nameserver 8.8.8.8
nameserver 8.8.4.4

在 dnsmasq 配置中引用

resolv-file=/etc/resolv.dnsmasq.conf
http://www.dtcms.com/a/320690.html

相关文章:

  • 31-数据仓库与Apache Hive-Insert插入数据
  • 专利服务系统平台|个人专利服务系统|基于java和小程序的专利服务系统设计与实现(源码+数据库+文档)
  • 代数系统的一般概念与格与布尔代数
  • 云平台运维工具 ——Azure 原生工具
  • 二倍精灵图的做法
  • Jetpack Compose 动画全解析:从基础到高级,让 UI “动” 起来
  • 网络基础——网络层级
  • VSCode 禁用更新检查的方法
  • 并查集算法的一个实战应用详解
  • 基于Flask + Vue3 的新闻数据分析平台源代码+数据库+使用说明,爬取今日头条新闻数据,采集与清洗、数据分析、建立数据模型、数据可视化
  • 认识爬虫 —— 正则表达式提取
  • MySQL数据库操作练习
  • 基于大数据的地铁客流数据分析预测系统 Python+Django+Vue.js
  • css 瀑布流布局
  • 查看泰山派 ov5695研究(1)
  • 线程池基础知识
  • gmssl私钥文件格式
  • Arm Qt编译Qt例程出错 GLES3/gl3.h: No such file or directory
  • 【前端后端部署】将前后端项目部署到云服务器
  • 终端是什么,怎么用?
  • 基于Spring Boot的Minio图片定时清理实践总结
  • Mac下安装Conda虚拟环境管理器
  • Vue3 计算属性与监听器
  • 基于django电子产品销售系统的设计与实现/基于python的在线购物商城系统
  • 豆包新模型矩阵+PromptPilot:AI开发效率革命的终极方案
  • 3 种简单方法备份 iPhone 上的短信 [2025]
  • 僵尸进程、孤儿进程、进程优先级、/proc 文件系统、CRC 与网络溢出问题处理(实战 + 原理)
  • 从安卓兼容性困境到腾讯Bugly的救赎:全链路崩溃监控解决方案-卓伊凡|bigniu
  • 【前端】纯代码实现Power BI自动化
  • 【Linux系统】万字解析,文件IO