一.DNS简介
DNS(域名系统)是一种互联网服务,负责将我们熟悉的域名(比如 www.example.com)转换为计算机能理解的IP地址(比如 192.0.2.1)。这样,当你在浏览器中输入网址时,计算机能够找到对应的网站。
DNS服务的工作原理
- 输入网址:你在浏览器中输入一个网址。
- 查询本地缓存:计算机会先检查自己是否有这个网址的IP地址存储在本地缓存中。
- 向DNS服务器请求:如果没有找到,计算机会向DNS服务器发送请求。
- 递归查询:DNS服务器会帮你查找这个网址对应的IP地址,可能会向其他服务器询问,直到找到为止。
- 返回结果:一旦找到IP地址,DNS服务器将这个地址返回给你,浏览器再根据这个地址访问网站。
DNS服务器的角色
- 根服务器 :负责管理互联网的顶层域名,比如.com、.org等。
- TLD服务器:管理某一类域名的服务器,比如所有的.com域名。
- 权威DNS服务器:存储某个特定域名的详细信息(比如网站的IP地址)。
总结
DNS服务就像一个电话簿,将人类易懂的域名和计算机使用的IP地址关联起来,确保你可以快速访问想要的网站。DNS服务器则是提供这个服务的"助手",帮助完成查询和转换的工作。
二.域名结构
域名是以根开始的倒树状结构 ,以点为分割符,从上往下分别是:
国家顶级域名:中国(cn),英国(uk),mil(美国军事),gov(美国政府),edu(教育),org(开源非盈利组织),net(网络相关),com(公司企业),aero(航空航天相关),biz(商业和商业活动),info(信息相关),coop(合作社的身份识别).
基础结构域名:唯一arpa,用于反向解析.
域名服务器分类
根域名服务器:ipv4全球13台,1台主根服务器(美国),12台辅根服务器,9台美国,欧洲英国,瑞典,亚洲日本各一台.
顶级域名服务器:管理在该顶级域名服务器注册的2级域名
权限域名服务器:负责一个区的域名服务器
本地域名服务器:负责接收查询请求报文
主从DNS服务器:主服务器定期复制DNS记录到从服务器
缓存服务器:不解析域名,只缓存域名解析结果
DNS服务解析过程
1. 用户输入域名
当用户在浏览器中输入一个域名(例如:www.example.com)并按下回车键,浏览器会开始查找该域名对应的IP地址。
2. 检查本地缓存
- 浏览器缓存:首先,浏览器会检查其本地缓存中是否已经存储了该域名的IP地址。如果有,直接使用该地址进行连接。
- 操作系统缓存:如果浏览器没有缓存,操作系统也会检查其DNS缓存。
3. 查询DNS服务器
如果本地缓存没有找到,浏览器将向DNS解析器(通常由用户的互联网服务提供商提供)发送请求。
4. DNS解析器
DNS解析器接收到请求后,会进行以下步骤:
- 根域名服务器查询:首先,它向根域名服务器发送查询请求,根服务器会指向相应的顶级域名服务器(TLD服务器),例如".com"域名的TLD服务器。
5. TLD服务器查询
- 获取权威DNS服务器 :DNS解析器接下来向TLD服务器询问域名(例如,example.com)对应的权威DNS服务器的地址,TLD服务器返回该域名的权威DNS服务器的信息。
6. 权威DNS服务器查询
- 最终解析:DNS解析器向权威DNS服务器发送请求,以获取域名的实际IP地址。权威DNS服务器会返回该域名对应的IP地址。
7. 返回结果
- 返回给用户的浏览器:DNS解析器将获得的IP地址返回给用户的浏览器。
8. 建立连接
- 访问目标网站:浏览器使用该IP地址与目标服务器建立连接,开始请求网页内容。
9. 缓存结果
- 缓存机制:为了提高效率,DNS解析器和操作系统会将解析结果缓存一段时间(根据TTL设置),以便后续请求时可以快速响应。
10. 完成请求
- 网页加载:最终,浏览器加载网页,用户可以查看请求的内容。
三.DNS配置
DNS服务器的配置文件通常包含了域名解析所需的各种信息。不同类型的DNS服务器(如BIND、dnsmasq等)有不同的配置文件格式。以下是以BIND(Berkeley Internet Name Domain)为例的DNS服务器配置文件详解:
1. BIND基本结构
BIND的主要配置文件通常是named.conf
,这个文件定义了DNS服务器的全局选项、区域(zone)和转发器(forwarders)等信息。
主要配置文件示例
options {
directory "/var/named"; # DNS数据文件存放目录
allow-query { any; }; # 允许所有查询
recursion yes; # 启用递归查询
forwarders { # 指定转发器
8.8.8.8; # Google DNS
8.8.4.4;
};
dnssec-enable yes; # 启用DNSSEC
dnssec-validation auto; # 自动验证DNSSEC
};
2. 区域配置
区域配置用于定义DNS服务器管理的域名以及它们的记录。区域通常在named.conf
中定义,也可以放在单独的文件中。
示例区域配置
zone "example.com" {
type master; # 主DNS服务器
file "example.com.db"; # 区域数据文件
};
zone "0.168.192.in-addr.arpa" { # 反向查找区域
type master;
file "192.168.0.db";
};
3. 区域数据文件
区域数据文件包含域名及其对应的资源记录(RR)。每条记录的格式通常如下:
$TTL 86400 ; 默认生存时间为86400秒(1天)
@ IN SOA ns1.example.com. admin.example.com. (
2024010101 ; Serial #代表新旧程度
3600 ; Refresh #更新频率
1800 ; Retry #失败重传时间
604800 ; Expire #失败失效时间
86400 ) ; Negative Cache TTL #有效期
; Name Server Records
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
; A Records
@ IN A 192.168.0.1
www IN A 192.168.0.1
; CNAME Records
mail IN CNAME www
记录类型详解
- SOA (Start of Authority):定义区域的起始权威信息,包括主DNS、管理员邮箱、序列号等。
- NS (Name Server):定义域名使用的DNS服务器。
- A (Address):将域名映射到IPv4地址。
- AAAA:将域名映射到IPv6地址。
- CNAME (Canonical Name):将一个域名别名映射到另一个真实的域名。
4. 高级配置
-
ACL(Access Control Lists):用于控制哪些IP可以查询或更新DNS记录。
acl "trusted" {
192.168.0.0/24; # 允许本地网络
10.0.0.0/8; # 允许另一个网络
};options {
allow-query { trusted; }; # 仅允许受信任的网络查询
}; -
视图(Views):根据来源IP提供不同的DNS响应。
view "internal" {
match-clients { 192.168.0.0/24; };
zone "example.com" { type master; file "internal/example.com.db"; };
};view "external" {
match-clients { any; };
zone "example.com" { type master; file "external/example.com.db"; };
};
5. 重启DNS服务
在修改配置文件后,通常需要重启BIND服务以使更改生效:
sudo systemctl restart named
6.测试工具
host
host
是一个简单的 DNS 查询工具,用于查找主机名或 IP 地址。
基本用法:
host [选项] [主机名|IP地址]
示例:
-
查询域名的 IP 地址:
host example.com
-
查询指定 DNS 服务器:
host example.com 8.8.8.8
2. nslookup
nslookup
是一个交互式和非交互式的 DNS 查询工具,可以用于查找 DNS 记录。
基本用法:
nslookup [主机名|IP地址] [DNS服务器]
示例:
-
查询域名的 DNS 记录:
nslookup example.com
-
查询特定类型的记录(例如 MX 记录):
nslookup -query=mx example.com
3. dig
dig
(Domain Information Groper)是一个更为强大的 DNS 查询工具,提供详细的查询信息。
基本用法:
dig [选项] [主机名] [记录类型] @DNS服务器
示例:
-
查询域名的 A 记录:
dig example.com
-
查询特定类型的记录(如 MX 记录):
dig example.com MX
-
使用特定的 DNS 服务器:
dig @8.8.8.8 example.com
总结
- host:简单易用,适合基本的 DNS 查询。
- nslookup:适合交互式查询,提供更多选项。
- dig:功能强大,适合深入分析和脚本化使用。