[Linux入门] 初学者入门:Linux DNS 域名解析服务详解
目录
一、域名服务基础:从 “名字” 到 “地址” 的转换
1️⃣什么是域名?
2️⃣什么是 DNS?
3️⃣DNS 用 TCP 还是 UDP?
二、DNS 服务器:各司其职的 “导航站”
1️⃣根域名服务器
2️⃣顶级域名服务器
3️⃣权威域名服务器
4️⃣本地 DNS 服务器
5️⃣转发服务器
三、正向解析与反向解析:DNS 的两种 “查询模式”
1️⃣正向解析:域名→IP
2️⃣反向解析:IP→域名
3️⃣区域(Zone)的概念
四、DNS 查询方式:递归与迭代
1️⃣递归查询:“你帮我搞定”
2️⃣迭代查询:“你告诉我下一步找谁”
3️⃣完整查询过程(以www.linuxprobe.com为例)
五、Linux 构建缓存域名服务器
1️⃣为什么需要缓存 DNS?
2️⃣工具:BIND(最常用的 DNS 软件)
3️⃣配置缓存 DNS 服务器(步骤)
步骤 1:修改主配置文件
步骤 2:重启服务并测试
六、Linux 构建主从域名服务器
1️⃣主从服务器的角色
2️⃣配置示例(环境:主服务器 192.168.141.130,从服务器 192.168.141.129)
步骤 1:配置主服务器
步骤 2:配置从服务器
步骤 3:测试
DNS(域名系统)是互联网的 “导航系统”,让我们能通过好记的域名(如www.baidu.com)访问网站,而不是复杂的 IP 地址(如 14.215.177.38)。对于 Linux 初学者来说,理解 DNS 的工作原理并掌握其配置方法,是搭建网络服务的重要基础。
一、域名服务基础:从 “名字” 到 “地址” 的转换
1️⃣什么是域名?
域名(Domain Name)是互联网上计算机或服务器的 “名字”,由一串用点分隔的字符组成,必须以点结尾(如www.qq.com.cn.),我们日常看到的 “www.qq.com.cn” 只是简略形式。
它的核心作用是替代 IP 地址:人类对 “www.baidu.com” 的记忆远比对 “14.215.177.38” 容易,而 DNS 的任务就是把 “名字” 翻译成 “地址”。
通过域名系统(DNS)实现域名与IP地址的映射。
2️⃣什么是 DNS?
DNS 就是用于将网站的域名转换为IP地址的系统。DNS(域名系统)是一个分布式数据库,负责存储域名与 IP 地址的对应关系,并提供查询服务。简单说,当你在浏览器输入 “www.example.com” 时:
- 你的电脑会向 DNS 服务器发送查询:“这个域名对应的 IP 是多少?”
- DNS 服务器通过一系列查询,找到对应的 IP(如 93.184.216.34)并返回;
- 电脑用 IP 地址连接服务器,获取网页内容。
DNS 的关键参数:
- 使用端口:TCP 和 UDP 的 53 端口;
- 长度限制:每级域名最长 63 字符,总长度不超过 253 字符。
3️⃣DNS 用 TCP 还是 UDP?
DNS 根据场景选择协议,初学者只需记住:
- UDP:用于常规查询(如浏览器查域名),速度快、数据量小(≤512 字节),适合缓存查询、迭代查询;
- TCP:用于大量数据传输(如主从服务器同步数据)、大型响应(>512 字节),或防止攻击,因为 TCP 需要建立连接,更可靠。
二、DNS 服务器:各司其职的 “导航站”
DNS 系统是分层的,不同服务器负责不同环节,就像 “国家 - 省 - 市” 的行政体系:
1️⃣根域名服务器
DNS 的 “顶层领导”,全球共 13 组(标识为 A-M),不直接解析域名,而是指引查询到对应的顶级域名服务器。例如:
- A 根服务器:管理单位INTERNIC.NET,位于美国弗吉尼亚州,IP 为 198.41.0.4;
- M 根服务器:由 WIDE Project 管理,位于日本东京,IP 为 202.12.27.33。
2️⃣顶级域名服务器
负责 “顶级域名”(如.com、.org、.cn)的解析,指引查询到下一级服务器。例如:
- .com 服务器:管理所有以.com 结尾的域名;
- .cn 服务器:管理中国国家域名(如.qq.com.cn的顶级域是.cn)。
3️⃣权威域名服务器
“具体管事的”,保存某一域名的详细解析记录(如www.baidu.com的 IP),是该域名的 “官方服务器”(如阿里云 DNS、腾讯云 DNS)。
4️⃣本地 DNS 服务器
你家宽带或公司网络提供的 DNS(如 114.114.114.114),负责替你完成整个查询过程:
- 先查自己的缓存,有结果直接返回;
- 没有则依次向根、顶级、权威服务器查询,最后把结果返回给你,并缓存下来。
5️⃣转发服务器
可选的 “中间代理”,接收查询后转发给其他 DNS 服务器,适合大型网络减少重复查询(比如公司内网用转发服务器统一处理外部查询)。
三、正向解析与反向解析:DNS 的两种 “查询模式”
DNS 的核心是 “地址对应关系”,分为两种查询方向:
1️⃣正向解析:域名→IP
最常用的功能,根据域名查 IP。例如:输入 “www.baidu.com”,得到 IP“14.215.177.38”。
2️⃣反向解析:IP→域名
根据 IP 查域名,用途较少但重要(如反垃圾邮件验证:验证发送邮件的 IP 是否对应宣称的域名)。例如:输入 “14.215.177.38”,得到 “www.baidu.com”。
3️⃣区域(Zone)的概念
每台 DNS 服务器只负责一小部分 “范围”(称为 “区域”):
- 正向区域:存储域名→IP 的记录(如xykj.com区域);
- 反向区域:存储 IP→域名的记录(如 192.168.141.x 网段的区域)。
四、DNS 查询方式:递归与迭代
DNS 查询有两种方式,就像 “找人” 的两种策略:
1️⃣递归查询:“你帮我搞定”
客户端(如你的电脑)向本地 DNS 服务器查询时,本地 DNS 会 “包办到底”:如果自己不知道,就主动向其他服务器查询,直到拿到结果返回给你。
特点:只需发一次请求,等待结果即可(类似 “我问快递员我的快递在哪,他查清楚告诉我市井”)。
2️⃣迭代查询:“你告诉我下一步找谁”
本地 DNS 服务器向其他服务器(如根、顶级服务器)查询时,对方不会直接给结果,而是告诉你 “去问下一个服务器”。本地 DNS 需要自己一步步找下去。
特点:可能发多次请求,目标不断变化(类似 “我问路人邮局在哪,他说‘前面路口问交警’,我再去问交警”)。
3️⃣完整查询过程(以www.linuxprobe.com为例)
- 你的电脑先查本地缓存和 hosts 文件(hosts 文件优先级高于 DNS,Linux 路径为 /etc/hosts,Windows 为 C:\Windows\System32\drivers\etc\hosts);
- 缓存和 hosts 中没有,就向本地 DNS 服务器发送递归查询;
- 本地 DNS 服务器查自己的缓存,没有则开始迭代查询:
- 问根服务器:“www.linuxprobe.com在哪?” 根服务器说:“去问.com 顶级服务器”;
- 问.com 顶级服务器,对方说:“去问linuxprobe.com的权威服务器”;
- 问linuxprobe.com的权威服务器,得到 IP 地址;
- 本地 DNS 服务器将结果缓存,再返回给你的电脑。
五、Linux 构建缓存域名服务器
缓存 DNS 服务器的作用是 “记住” 之前的查询结果,让后续查询更快(类似 “记笔记”),适合内网环境(如公司、学校)。
1️⃣为什么需要缓存 DNS?
- 提高速度:重复访问同一域名时,直接用缓存结果,不用再查外部服务器;
- 节省流量:减少对外部 DNS 的依赖,降低出口带宽占用;
- 增强安全:可屏蔽恶意网站,限制内网用户访问风险站点;
- 方便管理:内网设备用缓存服务器,统一解析规则。
2️⃣工具:BIND(最常用的 DNS 软件)
BIND(Berkeley Internet Name Domain)是 Linux 上主流的 DNS 服务软件,通过以下步骤安装和控制:
- 安装:
sudo apt install bind9
(Debian/Ubuntu)或yum install bind
(CentOS); - 服务控制:
systemctl start named
(启动)、systemctl status named
(查看状态)。
3️⃣配置缓存 DNS 服务器(步骤)
以 “192.168.141.130” 作为缓存服务器为例:
步骤 1:修改主配置文件
主配置文件为/etc/bind/named.conf.options
,关键设置:
options
directory "/var/cache/bind"; # 数据文件存放目录
recursion yes; # 启用递归查询(必须,因为缓存服务器要替客户端查询)
listen-on { any; }; # 监听所有网络接口
allow-query { any; }; # 允许所有客户端查询
forwarders { # 转发器:自己查不到时,转发给这些服务器223.5.5.5; # 阿里云DNS114.114.114.114; # 国内通用DNS
};
dnssec-validation auto; # 自动验证DNS数据有效性
步骤 2:重启服务并测试
bash
sudo systemctl restart named # 重启服务
sudo systemctl stop firewalld # 关闭防火墙(避免端口被挡)
在客户端(如 192.168.141.128)的/etc/resolv.conf
中设置 DNS 为 192.168.141.130,然后用nslookup www.baidu.com
测试:如果能返回 IP,说明配置成功。
六、Linux 构建主从域名服务器
主从域名服务器用于 “热备份”:主服务器负责维护数据,从服务器同步主服务器的数据,避免主服务器故障导致解析失效。
1️⃣主从服务器的角色
- 主域名服务器:拥有某区域的 “决定权”,维护该区域的解析记录(如xykj.com的 A 记录),可自主修改数据;
- 从域名服务器:同步主服务器的数据,提供相同的解析服务,作为备份(不能自己修改数据)。
2️⃣配置示例(环境:主服务器 192.168.141.130,从服务器 192.168.141.129)
步骤 1:配置主服务器
- 安装 bind9:
sudo apt install bind9
; - 修改区域配置文件
/etc/bind/named.conf.default-zones
,添加正向区域:zone
zone "xykj.com" {type master; # 主服务器file "/etc/bind/xykj.local"; # 区域数据文件路径 };
- 创建区域数据文件
/etc/bind/xykj.local
(存储域名→IP 记录):zone
$TTL 604800 # 记录在缓存中存活7天 @ IN SOA xykj.com. admin.xykj.com. (2 ; 序列号(每次修改+1)604800 ; 刷新时间(7天,从服务器多久查一次主服务器)86400 ; 重试时间(1天,查不到时多久再试)2419200 ; 过期时间(28天,超过多久不再同步)604800 ; 否定缓存时间(7天,查不到的记录缓存多久) ) @ IN NS xykj.com. # 域名服务器记录 @ IN A 192.168.141.131 # xykj.com对应IP www IN A 192.168.141.131 # www.xykj.com对应IP
- 检查配置:
named-checkzone xykj.com /etc/bind/xykj.local
,显示 “OK” 则有效; - 启动服务:
systemctl start named
。
步骤 2:配置从服务器
- 安装 bind9:
sudo apt install bind9
; - 修改区域配置文件
/etc/bind/named.conf.default-zones
,添加正向区域(指向主服务器):zone
zone "xykj.com" {type slave; # 从服务器masters { 192.168.141.130; }; # 主服务器IPfile "/var/cache/bind/xykj.local.slave"; # 同步的文件路径 };
- 启动服务:
systemctl start named
,从服务器会自动同步主服务器的数据。
步骤 3:测试
在客户机(192.168.141.128)的/etc/resolv.conf
中设置 DNS 为 192.168.141.129,用nslookup www.xykj.com
测试:能返回 192.168.141.131,说明从服务器工作正常。