DNS深入学习与配置
DNS深入学习与配置
DNS工作原理
DNS(Domain Name System)是互联网的"电话簿",将人类可读的域名转换为机器可读的IP地址。
DNS解析流程
1. 客户端检查本地DNS缓存
2. 查询系统hosts文件
3. 向本地DNS服务器发起查询
4. 本地DNS服务器查询根DNS服务器
5. 根服务器返回顶级域(TLD)服务器地址
6. 查询TLD服务器(如.com)
7. TLD服务器返回权威DNS服务器地址
8. 查询权威DNS服务器
9. 返回最终IP地址
10. 本地DNS服务器缓存结果并返回给客户端
DNS记录类型
A记录
将域名映射到IPv4地址:
example.com. IN A 93.184.216.34
AAAA记录
将域名映射到IPv6地址:
example.com. IN AAAA 2606:2800:220:1:248:1893:25c8:1946
CNAME记录
域名别名:
www.example.com. IN CNAME example.com.
MX记录
邮件服务器:
example.com. IN MX 10 mail.example.com.
NS记录
指定域名服务器:
example.com. IN NS ns1.example.com.
TXT记录
文本记录,常用于验证:
example.com. IN TXT "v=spf1 include:_spf.google.com ~all"
常用DNS查询工具
nslookup
# 基本查询
nslookup example.com
# 指定DNS服务器
nslookup example.com 8.8.8.8
# 查询特定记录类型
nslookup -type=MX example.com
dig
# 基本查询
dig example.com
# 查询特定记录
dig example.com A
dig example.com MX
# 追踪解析过程
dig example.com +trace
# 简洁输出
dig example.com +short
# 反向查询
dig -x 93.184.216.34
host
host example.com
host -t MX example.com
DNS缓存
# 查看本地DNS缓存(Windows)
ipconfig /displaydns
# 清除本地DNS缓存(Windows)
ipconfig /flushdns
# 清除DNS缓存(Linux)
systemd-resolve --flush-caches
配置本地DNS解析
/etc/hosts文件
# 添加静态解析
echo "192.168.1.100 myserver.local" >> /etc/hosts
实践:搭建本地DNS服务器
安装BIND
# Debian/Ubuntu
sudo apt-get install bind9 bind9utils
# CentOS/RHEL
sudo yum install bind bind-utils
主配置文件
# /etc/bind/named.conf.local
zone "mydomain.local" {
type master;
file "/etc/bind/db.mydomain.local";
};
区域文件
# /etc/bind/db.mydomain.local
$TTL 604800
@ IN SOA ns1.mydomain.local. admin.mydomain.local. (
2024010101 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS ns1.mydomain.local.
ns1 IN A 192.168.1.10
www IN A 192.168.1.100
mail IN A 192.168.1.200
DNS故障排查
# 检查DNS解析是否正常
dig example.com @8.8.8.8
# 检查本地DNS服务器配置
named-checkconf
named-checkzone mydomain.local /etc/bind/db.mydomain.local
# 查看DNS服务状态
systemctl status named
journalctl -u named
总结
DNS是互联网基础设施的关键组成部分。理解DNS的工作原理和配置方法,对于Web服务的部署和故障排查至关重要。