DNS(Domain Name System,域名系统)是互联网的核心基础设施之一,它将人类易记的域名转换为机器可识别的IP地址,被称为“互联网的电话簿”。本文将系统梳理DNS域名解析的核心知识点,从基础概念到工作原理、记录类型、排查方法、安全机制再到进阶应用等。
DNS是一个分布式、分层级的数据库系统,核心作用是实现域名与IP地址的相互映射。用户在浏览器输入域名时,DNS负责将其解析为对应的IP地址,让计算机能够找到目标服务器并建立连接,整个过程通常在毫秒级完成。
如果没有DNS,我们访问网站就必须记住180.101.50.188这样的数字IP,既难记忆也不便管理。
域名是倒序的层级结构,从右到左级别依次降低,用点分隔:
主机名.二级域名.顶级域名.根域名
www.bbab.net.
.,通常省略不写,全球共有13组根域名服务器.com、.cn、.org、.net,分为通用顶级域名(gTLD)和国家顶级域名(ccTLD)bbab.net中的example,是用户可注册的主体部分www.bbab.net中的www,用于区分不同服务(如mail、ftp)按照功能划分,DNS服务器主要分为以下几类:
全球共13个逻辑根服务器(编号A-M),实际部署了上千台物理服务器镜像。根服务器不存储具体域名解析记录,只保存顶级域名服务器的地址,是DNS解析的“总入口”。
管理对应顶级域名下的所有二级域名,如.com服务器存储所有.com后缀域名的权威DNS服务器地址。
负责存储具体域名的解析记录,是域名解析数据的“源头”。当你在域名服务商处配置解析时,数据就保存在该域名的权威DNS服务器上。
也叫缓存DNS服务器,通常由运营商、公共服务商提供。它接收用户的解析请求,代替用户去逐级查询,最终返回结果并缓存。我们电脑/手机上配置的DNS地址就是递归DNS。
常见的递归DNS:
以访问www.bbab.net为例,完整解析过程分为8步:
.com顶级域名服务器地址,递归DNS再向其查询bbab.net的权威DNS地址,递归DNS再向其查询www.bbab.net对应的IP地址核心区分:递归查询是“我替你查到底”(用户→本地DNS),迭代查询是“我告诉你下一个找谁”(本地DNS→根→TLD→权威)。
DNS记录是域名与IP/其他信息的映射规则,不同类型对应不同功能。
| 记录类型 | 全称 | 作用 | 示例 |
|---|---|---|---|
| A记录 | Address | 将域名指向IPv4地址 | www → 192.168.1.1 |
| AAAA记录 | IPv6 Address | 将域名指向IPv6地址 | www → 2400:3200::1 |
| CNAME记录 | Canonical Name | 将域名指向另一个域名,别名解析 | www → bbab.net |
| MX记录 | Mail Exchange | 邮件交换记录,指向邮件服务器 | @ → mx1.bbab.net |
| TXT记录 | Text | 文本说明,用于域名验证、反垃圾邮件 | @ → v=spf1 include:_spf.bbab.net |
| NS记录 | Name Server | 指定该域名的权威DNS服务器 | @ → ns1.bbab.net |
| SOA记录 | Start of Authority | 起始授权记录,描述域名的管理信息 | 主服务器、管理员邮箱、刷新时间等 |
| PTR记录 | Pointer | 反向解析,将IP指向域名 | 1.1.168.192.in-addr.arpa → www.bbab.net |
| SRV记录 | Service Locator | 服务定位记录,指定服务的端口和地址 | _sip._tcp → sip.bbab.net:5060 |
| CAA记录 | Certification Authority Authorization | 指定哪些CA机构可以签发该域名的证书 | @ → 0 issue "letsencrypt.org" |
TTL(Time To Live)是DNS记录的缓存有效期,单位为秒。它决定了递归DNS服务器、操作系统、浏览器会将解析结果缓存多久。
使用通配符*匹配所有子域名,例如*.bbab.net,可以让所有未单独配置的子域名都指向同一个IP。常用于批量提供子域名服务的场景。
根据访问者的地理位置、运营商、线路类型等条件,返回不同的解析结果:
智能解析是CDN、多云部署的核心技术之一,能够大幅提升访问速度和稳定性。
DNS缓存是提升解析效率的核心设计,存在于多个层级:
修改DNS解析后,需要等待各级缓存过期才能全网生效,这个过程叫“DNS传播”。
ipconfig /flushdnssudo dscacheutil -flushcache; sudo killall -HUP mDNSRespondersudo systemd-resolve --flush-caches(systemd系统)全球所有DNS节点完全同步通常需要24-48小时,大部分地区会在几小时内生效。修改解析前建议先将TTL改小,降低等待时间。
| 服务商 | IPv4地址 | 特点 |
|---|---|---|
| 114DNS | 114.114.114.114 / 114.114.115.115 | 国内老牌,访问稳定 |
| 阿里DNS | 223.5.5.5 / 223.6.6.6 | 国内节点多,解析速度快 |
| 腾讯DNS | 119.29.29.29 | 依托腾讯云,防劫持能力强 |
| 百度DNS | 180.76.76.76 | 百度云提供,智能优化 |
| Google DNS | 8.8.8.8 / 8.8.4.4 | 全球通用,纯净无劫持 |
| Cloudflare | 1.1.1.1 / 1.0.0.1 | 全球最快,隐私保护好 |
选择建议:国内访问优先选国内公共DNS,国际访问优先选Google或Cloudflare。
最基础的连通性与解析验证工具,可同时验证DNS是否解析成功以及网络是否可达。
ping www.bbab.net
Windows/macOS/Linux自带的DNS查询工具,支持指定DNS服务器查询。
# 默认使用本地DNS查询A记录
nslookup www.bbab.net
# 指定DNS服务器查询
nslookup www.bbab.net 8.8.8.8
# 查询MX记录
nslookup -type=mx bbab.net
# 查询所有记录
nslookup -type=any bbab.net
Name为域名,Address为解析到的IPServer字段显示当前使用的DNS服务器地址功能最强大的DNS排查工具,输出信息最完整,Linux/macOS默认自带,Windows需安装。
# 基础查询A记录
dig www.bbab.net
# 指定DNS服务器查询
dig @8.8.8.8 www.bbab.net
# 查询指定类型记录
dig bbab.net MX
dig bbab.net NS
dig bbab.net TXT
# 追踪完整解析路径(+trace参数)
dig +trace www.bbab.net
dig输出结构解读:
HEADER:查询头部信息,状态NOERROR表示查询成功QUESTION SECTION:本次查询的问题ANSWER SECTION:最终解析结果,包含TTL、记录类型、值AUTHORITY SECTION:该域名的权威DNS服务器信息ADDITIONAL SECTION:附加信息,如权威DNS的IP地址
+trace参数可以模拟完整的递归解析过程,从根服务器一步步查到权威服务器,是定位解析异常的神器。
排查解析到IP后,网络路径哪一跳出现问题。
# Windows
tracert www.bbab.net
# Linux/macOS
traceroute www.bbab.net
结合解析结果可以判断:是DNS解析错误,还是解析到正确IP但网络不通。
当出现域名访问异常时,按以下顺序逐步定位:
ipconfig /flushdns,重启浏览器,排除本地缓存污染dig @权威DNS 域名确认记录是否配置正确DNS天生设计上缺乏安全验证机制,是网络攻击的重灾区,常见攻击与防护手段如下:
攻击者通过篡改用户的DNS服务器地址、篡改运营商DNS缓存、入侵权威DNS等方式,将域名解析到恶意IP,用户访问正常域名却打开钓鱼网站。
攻击者向递归DNS服务器注入伪造的解析记录,让缓存中保存错误的IP,导致所有使用该递归DNS的用户都解析到错误地址。污染通常针对特定域名,且难以在本地修复。
属于DDoS攻击的一种。攻击者利用DNS响应远大于请求的特点,伪造源IP向大量开放DNS服务器发送请求,将流量放大后导向目标服务器,可将攻击流量放大数十倍。
盗取域名注册商账号,将域名转移到其他注册商,或者直接修改域名的NS服务器,彻底接管域名解析。
通过数字签名技术验证DNS记录的真实性和完整性,确保解析结果来自真实的权威服务器且未被篡改,从根源上防止缓存投毒和劫持。
传统DNS查询是明文传输,容易被监听和篡改。加密DNS将查询内容加密传输:
主流浏览器和操作系统已支持DoH/DoT,可有效防止本地和运营商层面的DNS劫持与监听。
基于访问者的IP地址归属地、运营商,匹配GeoIP数据库,返回不同的解析结果。核心是DNS服务器识别请求来源,返回最优节点IP。
在同一条记录中配置多个IP地址,DNS服务器按顺序或随机返回,实现基础的流量分摊。
bbab.net A 192.168.1.1
bbab.net A 192.168.1.2
bbab.net A 192.168.1.3
CDN(内容分发网络)的核心就是基于DNS的智能调度。
CDN通常使用CNAME记录接入:
www.bbab.net CNAME www.bbab.net.cdn.com
将某个子域名的解析权交给其他DNS服务器管理,适用于大型组织分部门管理域名。
api.bbab.net NS ns1.cloudprovider.com
api.bbab.net NS ns2.cloudprovider.com
配置后,api.bbab.net及其所有下级子域名的解析,全部由指定的DNS服务器负责,主域名服务器不再管理。
将IP地址反向解析为域名,与正向解析正好相反。
.in-addr.arpa,例如1.1.168.192.in-addr.arpa注意:反向解析需要向IP地址的服务商申请配置,个人无法直接配置。
用*作为通配符匹配所有未单独配置的子域名。
*.bbab.net A 192.168.1.1
*.*.bbab.net无效@配置A记录指向服务器IPwww子域名配置A记录或CNAMEping或nslookup测试@ A 123.123.123.123
www A 123.123.123.123
mail A 123.123.123.124
@ MX 10 mail.bbab.net
@ TXT "v=spf1 a mx ~all"
@ A 123.123.123.123 (源站IP,用于回源)
www CNAME www.bbab.net.cdn3.com
static CNAME static.bbab.net.cdn3.com
www 【默认线路】 A 123.123.123.100 (北京 BGP)
www 【电信线路】 A 123.123.123.101 (上海电信)
www 【联通线路】 A 123.123.123.102 (广州联通)
www 【海外线路】 A 45.45.45.45 (美国节点)
dig @新DNS验证配置正确,再切流量<link rel="dns-prefetch" href="//xxx.com">Whois是域名的公共信息数据库,包含注册人、注册商、注册时间、过期时间、域名状态等。
ok / activeclientTransferProhibited(域名锁,建议开启)clientHold / serverHold(通常因未实名、违规、过期)redemptionPeriod(过期30-45天,高价赎回)