DNS 与 53 端口
53 是域名系统的标准端口,域名到地址的解析全部发生在这里。常规查询走 UDP,报文小、开销低;响应超过协商长度(传统上限 512 字节,启用 EDNS0 后可放宽)或进行区域传送时改走 TCP。权威服务器负责回答自己管辖的域,递归服务器替客户端逐级查询,两者职责必须分开部署:对外只开放权威,递归只对内网提供服务。
基本信息
| 服务 | DNS(BIND、PowerDNS、dnsmasq、Unbound、Windows DNS) |
|---|---|
| 协议 | UDP 53 常规查询;TCP 53 大响应与区域传送 |
| 规范 | RFC 1035;区域传送见 RFC 5936 |
| 权限要求 | 监听 53 需 root 或相应能力;配置改动需重载服务 |
| 安全等级 | 权威可对外;递归仅限内网并开启速率限制 |
| 常用工具 | dig、drill、kdig、nslookup |
典型使用场景
- 内网名称解析:自建区域解析内部域名,或转发到上游公共解析器
- 对外权威托管:为自有域名提供公网查询应答
- AD 环境解析:域控同时承担域内名称服务,客户端 DNS 必须指向域控
- 容器与服务发现:集群内用轻量解析器解析服务名
- 解析排障与变更验证:用 dig 逐层确认权威与缓存的实际应答
常用排查命令
常用排查命令
dig example.com A +short # 只看结果地址,最快确认能否解析
dig @8.8.8.8 example.com MX # 指定公共服务器查邮件记录,排除本机缓存干扰
dig @ns1.example.com example.com SOA +norecurse # 直接问权威,验证权威应答是否符合预期
dig @10.0.0.53 example.com A # 问内网递归,验证内网解析链路
dig example.com AXFR @ns1.example.com # 尝试区域传送,正常情况下应被拒绝
ss -lunp | grep ':53' # 确认 UDP 53 监听进程;TCP 用 ss -ltnp 查看输出逐列读法
| 输出项 | 含义 | 正常/异常 |
|---|---|---|
| status | 应答状态码 | NOERROR 正常;NXDOMAIN 域名不存在;SERVFAIL 多为上游故障或校验失败 |
| flags 中的 tc | 响应被截断标志 | 置位说明客户端需改用 TCP 重试 |
| ANSWER 条数 | 返回记录数量 | 为 0 且 NOERROR 表示该类型无记录 |
| SERVER | 实际应答的服务器 | 与预期不符说明本机缓存或转发在起作用 |
| Query time | 查询耗时 | 首次查询偏高正常,持续偏高要查上游与缓存命中 |
权威与递归的职责分工
| 角色 | 回答范围 | 对外暴露 |
|---|---|---|
| 权威服务器 | 只回答自己管辖的域 | 可对外,须拒绝区域传送 |
| 递归服务器 | 替客户端查询任意域名 | 仅限内网,禁止对外提供服务 |
| 转发器 | 把请求转给上游解析器 | 按需要限制来源网段 |
| 本地缓存 | 缓存已解析结果 | 仅本机或本网段使用 |
验证权威与递归行为
验证权威与递归行为
dig +norecurse @ns1.example.com example.com SOA +short # 权威应直接给出 SOA
dig @dns.example.com google.com +short # 对外服务器应拒绝递归外部域名
dig +trace example.com A | head -20 # 从根开始逐级跟踪,定位哪一层断链
cat /etc/resolv.conf # 本机实际使用的解析器,排障前先确认大响应与 TCP 回退观察
大响应与 TCP 回退观察
dig +dnssec example.com DNSKEY +short # DNSSEC 记录较大,容易触发截断
dig +bufsize=1232 example.com A # 观察 tc 标志是否置位
dig +tcp example.com A +short # 强制走 TCP,验证 TCP 链路是否可用
ss -ltnp | grep ':53 ' # 确认 TCP 53 也在监听BIND 关键安全配置片段
BIND 关键安全配置片段
// 权威侧:只允许指定从库做区域传送
allow-transfer { 10.0.0.11; 10.0.0.12; };
// 递归侧:只对内网提供递归
recursion yes;
allow-recursion { 10.0.0.0/8; 192.168.0.0/16; };
// 速率限制,缓解放大与洪水
rate-limit { responses-per-second 10; };对公网开放递归查询会同时带来缓存投毒面与 DNS 放大攻击风险,服务器还可能被用于攻击第三方;权威与递归应分离部署,递归只服务内网。
排障顺序:先用 dig 直连目标服务器,排除本机缓存与解析配置的干扰;确认 UDP 与 TCP 都可达,因为大响应与区域传送依赖 TCP;最后再看服务端日志与转发上游状态。
缓存与生效时间:修改记录后能否立即看到取决于 TTL,排查变更未生效时先用 dig 直接问权威服务器,再回头看本地与运营商的缓存,否则容易误判为配置没生效。