DNS域名解析
域名服务(Domain Name System,简称DNS)是互联网的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口来传输数据,默认情况下,DNS服务使用以下两个端口号:
- UDP端口53:用于DNS查询请求和响应。
- TCP端口53:用于区域传输(zone transfers)、DNSSEC(DNS安全扩展)和其他需要可靠传输的操作。
DNS服务的作用
DNS 的核心功能
- 域名解析:将域名转换为 IP 地址(正向解析)或 IP 地址转换为域名(反向解析)。
- 分层管理:采用分布式数据库结构,通过层级域名(如
.com、.org)和权威服务器分工协作。 - 负载均衡:通过返回不同的 IP 地址实现流量分发(如 CDN 或大型网站)。
DNS解析类型
正向解析
功能:通过域名查询IP地址(最常用的DNS查询方式)。
记录类型:
- A记录(IPv4)
- AAAA记录(IPv6)
- CNAME记录(别名)
示例:
bashdig www.example.com A nslookup www.example.com适用场景:浏览器访问网站、应用程序连接服务器等。
反向解析
功能:通过IP地址查询域名(主要用于日志分析、邮件反垃圾验证)。
记录类型:PTR记录(Pointer Record)。
查询方式:
- IPv4:
dig -x 192.0.2.1 - IPv6:
dig -x 2001:db8::1
- IPv4:
示例:
bashdig -x 8.8.8.8 # 查询8.8.8.8对应的域名适用场景:
- 邮件服务器验证(防止垃圾邮件)。
- 网络日志分析(IP归属查询)。
DNS服务类型
递归DNS服务器
- 功能:接收客户端请求,代替客户端从根服务器逐级查询,直到获取最终IP地址。
- 特点:
- 通常由ISP(如电信、联通)或公共DNS服务商(如Google DNS
8.8.8.8、Cloudflare1.1.1.1)提供。 - 具备缓存机制,可加速重复查询。
- 通常由ISP(如电信、联通)或公共DNS服务商(如Google DNS
- 适用场景:终端用户直接使用的DNS解析服务
权威DNS服务器
- 功能:管理特定域名的DNS记录(如A、MX记录),直接提供域名解析结果。
- 特点:
- 由域名注册商或企业自行维护(如
ns1.example.com)。 - 不处理递归查询,仅响应自身管理的域名请求。
- 由域名注册商或企业自行维护(如
- 适用场景:托管域名解析记录的服务器
缓存域名服务器
- 功能:缓存近期查询结果,减少重复解析时间。
- 特点:
- 通常与递归服务器结合部署(如ISP的本地DNS服务器)。
- 根据TTL(生存时间)控制缓存有效期
根域名服务器
- 功能:全球共13组逻辑根服务器,管理顶级域(TLD)服务器的地址(如
.com、.org的TLD服务器)。 - 特点:
- 不直接解析域名,仅引导查询到下一级TLD服务器。
- 通过任播(Anycast)技术扩展为数百台物理服务器提升容灾能力
顶级域名服务器
- 功能:管理特定顶级域(如
.com)下的二级域名权威服务器地址。 - 分类:
- 通用顶级域(gTLD):如
.com、.net。 - 国家代码顶级域(ccTLD):如
.cn、.uk。
- 通用顶级域(gTLD):如
- 示例:
.comTLD服务器返回example.com的权威服务器地址
转发DNS服务器
- 功能:将查询请求转发至其他递归服务器(如公共DNS),并缓存结果。
- 特点:
- 适用于内网环境,减少外部查询流量。
- 依赖上游递归服务器的可靠性
公共DNS服务器
- 示例:
- Google DNS:
8.8.8.8、8.8.4.4 - Cloudflare DNS:
1.1.1.1、1.0.0.1 - 阿里DNS:
223.5.5.5、223.6.6.6
- Google DNS:
- 优势:提供更快的解析速度、更高的安全性(如支持DoH/DoT加密)
DNS查询模式
递归查询
适用对象:客户端 → 递归DNS服务器(如ISP DNS、Google DNS)。
特点:
- 递归DNS服务器必须返回最终结果(IP地址或错误),不能转交查询。
- 如果本地缓存没有记录,递归服务器会从根服务器开始逐级查询,直到找到答案。
示例:
bash用户(浏览器) ↓ 本地映射记录hosts ↓ localDNS(可以是网关) ↓ 递归DNS服务器(8.8.8.8)适用场景:普通用户访问网站时,本地DNS服务器执行的查询方式。
迭代查询
适用对象:递归DNS服务器 → 根(.)/TLD/权威DNS服务器。
特点:
- 被查询的服务器(如根服务器)不会代替查询,而是返回下一级服务器的地址。
- 递归DNS服务器需要自己继续向下一级服务器查询。
示例:
bash# 迭代查询是从一级域名->二级域名->三级域名顺序返回信息 递归DNS服务器(8.8.8.8) ↓ 根服务器(返回.com TLD服务器地址) 递归DNS服务器 ↓ .com TLD服务器(返回example.com权威服务器地址) 递归DNS服务器 ↓ example.com权威服务器(返回www.example.com的IP)适用场景:DNS服务器之间的查询方式,递归DNS服务器负责完成整个查询链。
示例
访问 www.example.com ① 根服务器指向 .com TLD 服务器 → ② TLD 服务器指向 example.com 的权威服务器 → ③ 权威服务器返回 www.example.com 的 IP。
DNS 记录类型
| 记录类型 | 描述 | 示例 | 主要用途 |
|---|---|---|---|
| A | IPv4 地址记录 | 192.0.2.1 | 将域名解析到 IPv4 地址(如网站服务器)。 |
| AAAA | IPv6 地址记录 | 2001:db8::1 | 将域名解析到 IPv6 地址。 |
| CNAME | 规范名称(别名)记录 | www.example.com → example.com | 将一个域名指向另一个域名(别名)。 |
| MX | 邮件交换记录 | mail.example.com(优先级 10) | 指定接收邮件的服务器。 |
| TXT | 文本记录 | "v=spf1 include:_spf.example.com ~all" | 用于验证、SPF(反垃圾邮件)、DKIM/DMARC 等。 |
| NS | 域名服务器记录 | ns1.example.com | 指定管理该域名的权威 DNS 服务器。 |
| PTR | 指针记录(反向解析) | 1.2.0.192.in-addr.arpa → example.com | 将 IP 地址解析回域名(常用于邮件服务器验证)。 |
| SOA | 起始授权记录(Start of Authority) | ns1.example.com admin.example.com (...) | 存储域名的管理信息(如主 DNS 服务器、序列号、刷新时间等)。 |
| SRV | 服务定位记录 | _sip._tcp.example.com → 10 60 5060 sipserver.example.com | 定义特定服务的服务器地址和端口(如 VoIP、LDAP)。 |
| CAA | 证书颁发机构授权记录 | 0 issue "letsencrypt.org" |
说明
- 优先级(MX/SRV):数值越小优先级越高(如 MX 记录中的
10和20)。 - TTL(Time To Live):所有记录均可设置缓存时间(单位:秒)。
- 通配符记录:可使用
*.example.com匹配所有子域名(A/CNAME 等支持)。
DNS查询流程示例
sequenceDiagram
客户端->>本地DNS: 查询www.example.com
本地DNS->>根服务器: 请求.com地址
根服务器-->>本地DNS: 返回.com NS
本地DNS->>.com服务器: 请求example.com地址
.com服务器-->>本地DNS: 返回权威NS
本地DNS->>权威NS: 请求A记录
权威NS-->>本地DNS: 返回IP地址
本地DNS->>客户端: 返回解析结果1. 客户端本地检查
- ① 浏览器/应用缓存 浏览器(如Chrome)或应用程序会先检查自己的DNS缓存(如近期访问过的域名)。
- ② 操作系统Hosts文件 检查本地
hosts文件(如Windows的C:\Windows\System32\drivers\etc\hosts),如果存在对应记录,直接使用。 - ③ 操作系统DNS缓存 检查系统DNS缓存(如Windows的
ipconfig /displaydns),若有缓存且未过期,直接返回IP。
✅ 若以上任意一步命中,则直接返回IP,查询终止。
2. 向本地递归DNS服务器查询
如果本地无缓存,客户端会向配置的 递归DNS服务器 发起请求(通常由ISP或手动指定,如 8.8.8.8):
④ 路由器/本地DNS服务器
家用路由器或企业内网DNS服务器会检查自己的缓存,若命中则返回IP。
- 如果未命中,递归DNS服务器会代表客户端 从根服务器开始迭代查询(见下文)。
🔄 递归DNS服务器的核心任务:代替客户端完成后续所有查询,直到拿到最终IP或报错。
3. 递归DNS服务器的迭代查询过程
递归DNS服务器会按以下顺序逐级查询(迭代方式):
- ⑤ 根域名服务器(Root Server) 询问根服务器
www.example.com的IP,根服务器返回.com顶级域(TLD)服务器的地址。 - ⑥ TLD服务器(.com 服务器) 询问
.com服务器,返回example.com的权威DNS服务器地址。 - ⑦ 权威DNS服务器(example.com 的NS记录) 询问
example.com的权威服务器,最终返回www.example.com的A记录(如192.0.2.1)。
4. 结果返回与缓存
- ⑧ 递归DNS服务器缓存结果 递归服务器将IP存入缓存(根据TTL时间),并返回给客户端。
- ⑨ 客户端缓存IP 客户端操作系统和浏览器缓存该记录,后续访问直接使用。
DNS查询工具
| 工具 | 命令示例 | 用途 |
|---|---|---|
dig | dig www.example.com A | 专业DNS查询(支持所有记录) |
nslookup | nslookup www.example.com | 基础DNS查询(Windows/Linux) |
host | host www.example.com | 快速查询域名IP |
ping | ping www.example.com | 测试DNS解析+网络连通性 |
重点路径说明
- 主配置文件:
/etc/named.conf - 数据配置文件目录:
/var/named
数据配置目录文件解析
| 目录/文件 | 所属用户/组 | 用途 |
|---|---|---|
| data/ | named:named | 动态数据存储(如DNSSEC密钥、查询缓存等) |
| dynamic/ | named:named | 动态更新的区域文件(需配合allow-update配置) |
| slaves/ | named:named | 从服务器同步的区域文件存放位置 |
| named.ca | root:named | 根DNS服务器列表(hint zone数据源) |
| named.localhost | root:named | 本地回环域的正向解析模板(localhost → 127.0.0.1) |
| named.loopback | root:named | 反向解析模板(127.0.0.1 → localhost) |
| named.empty | root:named | 空区域文件(用于黑洞域名解析) |
主配置文件 named.conf
named.conf 是BIND DNS服务的核心配置文件,采用类C语言语法,主要包含全局配置、日志定义、区域声明等模块。
配置文件结构
// 全局配置(影响整个DNS服务)
options {
// 全局参数
};
// 日志配置(可选)
logging {
// 日志参数
};
// 定义DNS根提示(根服务器列表)
zone "." IN {
type hint;
file "named.ca";
};
// 自定义区域(正向/反向解析)
zone "example.com" IN {
// 区域参数
};options 全局配置
options {
listen-on port 53 { 127.0.0.1; 192.168.1.10; }; // 监听IPV4和端口,可设置any
listen-on-v6 port 53 { ::1; }; // 监听IPV6和端口,可设置any
directory "/var/named"; // 工作目录(区域文件存放路径)
allow-query { any; }; // 允许查询的客户端(any/特定网段)
recursion yes; // 是否递归查询(缓存服务器需开启)
forwarders { 8.8.8.8; 8.8.4.4; }; // 转发查询到上游DNS
dnssec-validation yes; // DNSSEC验证(安全增强)
};关键参数说明:
listen-on:绑定服务的IP地址(默认仅localhost,生产环境需指定服务器IP)。allow-query:限制查询来源(如内网网段{ 192.168.1.0/24; })。recursion:设为no可防止DNS放大攻击(仅权威DNS需关闭)
logging 日志配置
logging {
channel default_debug {
file "data/named.run"; // 日志文件路径
severity dynamic; // 日志级别(dynamic/info/debug)
};
};日志级别建议:
dynamic:默认级别(记录错误和警告)。debug 3:调试模式(会记录详细查询过程,慎用,日志量极大)。
zone 区域定义
正向解析(域名 → IP)
zone "example.com" IN {
type master; // 主服务器类型(master/slave)
file "example.com.zone"; // 区域文件路径(默认在/var/named/)
allow-update { none; }; // 禁止动态更新(安全考虑)
};反向解析(IP → 域名)
zone "1.168.192.in-addr.arpa" IN { // 反向网段(IP倒写)
type master;
file "192.168.1.rev";
};域配置文件
正向解析示例
$TTL 86400 ; 默认缓存时间(24小时)
@ IN SOA ns1.example.com. admin.example.com. (
2024060301 ; 序列号 (格式:YYYYMMDDNN)
3600 ; 刷新时间(1小时)
1800 ; 重试时间(30分钟)
604800 ; 过期时间(7天)
86400 ; 最小TTL(24小时)
)
; 权威DNS服务器记录
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
; A记录(域名 → IPv4)
@ IN A 192.168.1.10 ; 主域名解析
ns1 IN A 192.168.1.10 ; NS服务器IP
www IN A 192.168.1.20 ; 子域名解析
mail IN A 192.168.1.30
; CNAME记录(别名)
web IN CNAME www.example.com.
; MX记录(邮件服务器)
@ IN MX 10 mail.example.com.反向解析示例
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2024060301 ; 序列号
3600 ; 刷新
1800 ; 重试
604800 ; 过期
86400 ; 最小TTL
)
; 权威DNS服务器
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
; PTR记录(IP最后一字节 → 域名)
10 IN PTR ns1.example.com.
20 IN PTR www.example.com.
30 IN PTR mail.example.com.配置文件检查与重载
# 检查主配置语法错误
named-checkconf /etc/named.conf
# 检测域名解析配置语法错误
named-checkzone example.com example.com.zone
# 重载配置(不中断服务)
systemctl reload named安装与配置
- bind:提供了域名服务器的主要程序及相关文件
- bind-utils:提供了对 DNS 服务器的测试工具程序,如
nslookup等 - bind-libs:提供了
bind、bind-utils需要使用的库函数 - bind-chroot:为 BIND 服务提供一个伪装的根目录(将
/var/named/chroot文件夹作为 BIND的跟目录)以提高安全性。也称为 jail(监牢)机制。BIND 安装以后,会自动增加一个名为named的系统服务
# CentOS/RedHat
dnf -y install bind bind-utils bind-libs bind-chroot构建缓存DNS服务器
流程说明
缓存域名服务器 IP 地址为
192.168.148.140,并能够正常访问互联网缓存域名服务器代为处理客户端的 DNS 解析请求,并缓存查询结果
局域网内的各 PC 将首选 DNS 服务器设为
192.168.148.140,访问外网页面mermaidgraph LR 网关服务器 -->|管理访问| 局域网缓存域名服务器 局域网缓存域名服务器 -->|解析服务| 客户端1 局域网缓存域名服务器 -->|解析服务| 客户端2 subgraph 局域网[192.168.148.0/24] 客户端1 客户端2 end
修改主配置文件/etc/named.conf
修改完检测配置语法错误named-checkconf /etc/named.conf
options {
//需要监听的真实服务器ip,如果所有地址都监听可以只写端口,括号内可填any
listen-on port 53 { 192.168.148.160; };
listen-on-v6 port 53 { ::1; };
// 关闭DNSSEC验证
dnssec-validation no;
};
// 屏蔽掉请求根域名(国内无法访问根域名地址)
//zone "." IN {
// type hint;
// file "named.ca";
//};
// 正向解析
zone "yun.com" IN {
type master;
file "yun.com.zone";
};
// 反向解析
zone "148.168.192.in-addr.arpa" IN {
type master;
file "192.168.148.arpa";
};生成域配置文件
正向解析
cat > /var/named/repo.local.zone << EOF
$TTL 3H
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1.repo.local.
ns1 A 192.168.148.201
www A 192.168.148.200
EOF
# 修改完检测配置语法错误
named-checkzone yum.com /var/named/yun.com.zone
# 出现一下信息正确
zone yum.com/IN: loaded serial 0
OK反向解析
cat > 192.168.148.arpa << EOF
$TTL 3H
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1.yun.com.
240 PTR www.yun.com
240 PTR news.yun.com
132 PTR map.yun.com
EOF
# 修改完检测配置语法错误
named-checkzone 148.168.192.in-addr.arpa 192.168.148.arpa
# 出现一下信息正确
zone 148.168.192.in-addr.arpa/IN: loaded serial 0
OK重启服务
systemctl restart named客户端测试
将客户端网卡中的DNS设置192.168.148.140
# 修改网卡
DNS1=192.168.148.140
# 检查
[root@localhost ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.148.140
# 验证DNS域名
## 正向解析
nslookup www.yun.com
## 反向解析
nslookup 192.168.148.240DNS主从搭建
流程说明
主、从域名服务器均位于 Internet 中,所负责的 DNS 区域为“yun.com”
主服务器 IP 地址 192.168.148.140/24,主机名为 ns1.yun.com
从服务器 IP 地址 192.168.148.141/24,主机名为 ns2.yun.com
在 amber.com 区域中,除了 NS 记录以外提供的解析记录包括如下内容:
网站服务器:www.yun.com, IP 地址 192.168.148.10/24
邮件服务器:mail.yun.com,IP 地址 192.168.148.20/24
新闻服务器:news.yun.com,IP 地址 192.148.91.30/24
论坛服务器:bbs.yun.com,IP 地址 192.148.91.40/24
修改主配置文件 /etc/named
zone "yun.com" IN {
type master;
file "yun.com.zone";
allow-transfer { 192.168.148.141; };
};
zone "148.168.192.in-addr.arpa" IN {
type master;
file "192.168.148.arpa";
allow_transfer { 192.168.148.141; };
};配置文件语法检测
named-checkconf /etc/named重启服务
systemctl restart named修改从配置文件
配置文件其他部分和主的保持一致即可。域配置文件会自动同步到/var/named/slaves中,从服务器指定域文件需要设置slaves路径。
zone "yun.com" IN {
type slave;
file "slaves/yun.com.zone";
masters { 192.168.148.140; };
};
zone "148.168.192.in-addr.arpa" IN {
type slave;
file "slaves/192.168.148.arpa";
masters { 192.168.148.140; };
};配置文件语法检测
named-checkconf /etc/named重启服务
systemctl restart named