在数字世界的底层架构中,域名系统扮演着“互联网电话簿”的核心角色,它负责将我们易于记忆的域名(如 www.example.com)翻译成机器能够理解的IP地址(如 184.216.34),没有DNS,我们浏览网页、发送邮件或访问任何在线服务都将变得异常繁琐,本文将深入探讨DNS的基本原理,并重点说明如何在两大主流Linux发行版——CentOS和Debian上进行DNS客户端配置与服务器搭建。

DNS基础概念
在开始实际操作前,理解几个核心概念至关重要。
-
DNS记录类型:DNS信息以记录的形式存储在区域文件中,最常见的记录类型包括:
- A记录:将域名指向一个IPv4地址。
- AAAA记录:将域名指向一个IPv6地址。
- CNAME记录:将域名指向另一个域名(别名)。
- MX记录:指定负责处理该域名电子邮件的邮件服务器。
- NS记录:指定该域名的权威DNS服务器是哪些。
-
递归DNS与权威DNS:
- 递归DNS服务器:通常由ISP或公共DNS服务(如Google的
8.8.8)提供,当用户请求一个域名时,它会从根服务器开始,一路追踪,直到找到对应的IP地址并返回给用户,它像一个尽职的图书管理员,帮你找到任何一本书。 - 权威DNS服务器:存储特定域名“官方”记录的服务器,它不负责查找,只负责回答关于它所管理的域名的查询,它就是那个存放特定书籍的书架。
- 递归DNS服务器:通常由ISP或公共DNS服务(如Google的
在CentOS与Debian上配置DNS客户端
配置DNS客户端,即告诉你的Linux系统应该使用哪些DNS服务器来进行域名解析。
CentOS/RHEL 系统
在现代的CentOS/RHEL系统中,推荐使用NetworkManager的命令行工具nmcli来持久化配置DNS,直接编辑/etc/resolv.conf文件在系统重启或网络服务重启后可能会丢失。
-
查看当前网络连接名称:
nmcli connection show
假设你的主网卡连接名为
eth0。 -
设置DNS服务器:
sudo nmcli con mod eth0 ipv4.dns "8.8.8.8 1.1.1.1"
这条命令将
eth0连接的DNS服务器设置为Google和Cloudflare的公共DNS。 -
应用配置并重启网络:

sudo nmcli con up eth0
配置完成后,系统会自动更新
/etc/resolv.conf文件。
Debian/Ubuntu 系统
在较新的Debian和Ubuntu系统中,systemd-resolved服务通常负责管理DNS解析,直接编辑/etc/resolv.conf同样不是最佳实践,因为它通常是一个指向systemd-resolved管理文件的符号链接。
-
编辑
systemd-resolved的配置文件:sudo nano /etc/systemd/resolved.conf
-
取消注释并修改DNS设置: 在
[Resolve]部分,找到#DNS=行,取消注释并填入你想要的DNS服务器。[Resolve] DNS=8.8.8.8 1.1.1.1 #FallbackDNS= #Domains=
-
重启
systemd-resolved服务:sudo systemctl restart systemd-resolved
此后,
systemd-resolved会使用新的DNS设置,你可以通过resolvectl status命令来验证当前的DNS配置。
搭建DNS服务器:以BIND为例
BIND(Berkeley Internet Name Domain)是互联网上使用最广泛的DNS软件,在CentOS和Debian上安装和配置BIND的过程略有不同。
-
在CentOS上安装BIND:
sudo dnf install bind bind-utils
主要配置文件位于
/etc/named.conf,区域文件通常存放在/var/named/目录下。 -
在Debian上安装BIND:

sudo apt update sudo apt install bind9 bind9utils bind9-doc
主要配置文件包括
/etc/bind/named.conf.options、/etc/bind/named.conf.local等,区域文件默认存放在/etc/bind/目录下。
配置BIND涉及编辑主配置文件以定义区域,然后为每个区域创建具体的记录文件,这需要根据你的具体需求(如创建新的域名、解析内网主机等)进行详细规划。
CentOS与Debian DNS管理对比
为了更直观地展示两者差异,下表小编总结了关键管理点:
| 特性 | CentOS/RHEL | Debian/Ubuntu |
|---|---|---|
| 包管理器 | dnf / yum |
apt / apt-get |
| BIND服务名 | named |
bind9 |
| 服务管理 | systemctl restart named |
systemctl restart bind9 |
| 客户端配置工具 | nmcli (推荐) |
systemd-resolved (推荐) |
| 主配置文件路径 | /etc/named.conf |
/etc/bind/named.conf.local |
| 默认防火墙 | firewalld |
ufw (Uncomplicated Firewall) |
相关问答FAQs
问题1:我直接编辑了 /etc/resolv.conf 文件,为什么重启后设置就消失了?
解答:这是因为在现代Linux发行版中,/etc/resolv.conf文件通常不是由用户手动管理的,它是由网络管理服务(如CentOS中的NetworkManager或Debian/Ubuntu中的systemd-resolved)动态生成的,当系统启动或网络状态发生变化时,这些服务会根据它们自己的配置源(如nmcli的配置或/etc/systemd/resolved.conf)来重写/etc/resolv.conf,从而覆盖你的手动修改,要实现持久化配置,必须通过这些网络管理工具提供的正确途径进行设置。
问题2:DNS和DHCP有什么区别?
解答:DNS(域名系统)和DHCP(动态主机配置协议)是网络中两个不同但协同工作的基础服务。
- DNS 负责的是“名称解析”,它的工作是回答“这个域名对应的IP地址是什么?”这类问题,它将人类友好的名字映射到机器可读的地址,好比一本通讯录。
- DHCP 负责的是“地址分配”,它的任务是自动为网络中的设备分配IP地址、子网掩码、网关和DNS服务器等网络配置信息,当一个设备加入网络时,DHCP服务器会像一个前台接待员,给它分配一个临时的“房间号”(IP地址)和必要的网络信息,让它能够顺利上网。 简而言之,DHCP帮你“上网”,DNS让你在网上“认路”。