← 返回首页
🔍

DNS深入学习与配置

📂 devops ⏱ 2 min 220 words

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服务的部署和故障排查至关重要。