序
-
最初的诉求:自建DNS,篡改公开网站的url为自建web服务的url。
-
在使用浏览器进行网上冲浪的时候,我们只需要输入网址即可访问,但是在网络中,网址并不是一个有效的东西,真正起作用的是网址所对应的IP地址,但是IP地址是一堆没有规律的数字,难以记忆、使用,所以就有了DNS服务器。
-
DNS服务器的功能就是将域名转换成IP地址,这样在我们想要访问一个主机的时候就不需要记住它的IP地址,而是只需要记住它的网址即可,剩下的工作有DNS服务器去替我们完成,由它来将一个网址转换成IP地址,来供给我们访问。
下面就来介绍如何在CentOS7中搭建一个DNS服务器。
- 版本信息
- os : centos 7.9
理论:DNS体系
DNS解析流程: 递归查询 vs 迭代查询 | 正向解析 vs 反向解析
- 域名解析的过程(如下图):
- 递归查询:
本主机向本地域名服务器的查询,一般是采用递归查询;
- 迭代查询:
本地域名服务器向根服务器的查询,一般是迭代查询:
- 本地正向解析域名的步骤:(以www.baidu.com为例的一般步骤,实际情况可能有细微变化)
- 第一步:先去问/etc/hosts文件,有就直接回复;
- 第二步:再去问本地dns缓存服务器,有就直接回复;
- 第三步:再去问根域名服务器,根域名服务器(.只能解析x.中的x,也就是说根只能解析出顶级域名.com),知道顶级域后,再去顶级域服务器(顶级域只能解析x.com.中的x为baidu),再去二级域服务器,最终查到权威服务器,就可以查询到主机名为www,最终获得到www.baidu.com的ip地址,获取到最终的域名地址,告诉缓存服务器;(看上面的流程图。类似)
- 第四步:缓存服务器最后告诉客户端,dns会把解析服务器会缓存结果,递归查询结束;
域名的分类及DNS架构
-
根域: 全球根服务器节点只有13个,10个在美国,1个荷兰,1个瑞典,1个日本
-
根域:用“.”表示
-
顶级域(一级域):一般代表一种类型的组织机构或国家区域,如.net,.com,.edu等
-
二级域:用来标明顶级域下面的的一个特定组织,国家顶级域下面的二级域名由国家安全部门统一管理,比如:.com.cn,.net.cn,.edu.cn
-
三级域(子域):由二级域创建的一般为子域,一般是由各个组织自己申请的
-
主机:如www和mail等表示主机名称
DNS服务器的类型
-
master域名服务器:一般来说主域名服务器会有自己构建的一部分域名对应数据库,另外还有“.”的信息;是主域名服务器的一种,也称为主服务器、主域名服务器,负责维护一个区域的所有域名信息,这些信息一般存储在文本文件中,如zone文件或hosts文件1。Master域名服务器本身含有域名的数据文件(就是zone),这个配置文件就是设置正解或反解的“数据库”,包含各种记录,所以它本身具有提供查询Internet查询所需的数据。
-
slave域名服务器:会获取主服务器的数据库信息,放在/var/named/slaves文件夹中加密,当主服务器down的时候,slave服务器可以继续使用;
-
缓存域名服务器:只提供域名解析的缓存功能,目的是为了可以更高效的查询,但没有域名数据库,是从远程服务器取得每次域名服务器查询的结果,放在高速缓存中,以后查询相同的信息的时候响应更快;远程域名服务器不是权威性服务器
-
转发域名服务器:负责所有非本地域名的本地查询。转发域名服务器接到查询请求后,在其缓存中查找,如找不到就将请求依次转发到指定的域名服务器,直到查找到结果为止,否则返回无法映射的结果。
DNS记录的指令 = 资源记录
- 区域(
zone
)解析库:由众多RR组成: - 资源记录:Resource Record, RR
- 记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX
SOA
:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录。A
:internet Address,作用: FQDN --> IP。AAAA
:FQDN --> IPv6PTR
:PoinTeR,IP --> FQDNNS
:Name Server,专用于标明当前区域的DNS服务器CNAME
: Canonical Name,别名记录MX
:Mail eXchanger,邮件交换器TXT
:对域名进行标识和说明的一种方式,一般做验证记录时会使用此项,如:SPF(反垃圾邮件)记录,https验证等
# 示例
_dnsauth TXT 2012011200000051qgs69bwoh4h6nht4n1h0lr038x
- 资源记录定义的格式:
语法:
name [TTL] IN rr_type value
- 注意事项
(1)TTL
可从全局继承。
(2)@
可用于引用当前区域的名字。
(3) 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应。
(4) 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机。
SOA记录
- name: 当前区域的名字,例如“test.com.”
- value: 有多部分组成
(1) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;
(2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换
例如:admin.magedu.com
(3) 主从服务区域传输相关定义以及否定的答案的统一的TTL
test.com. 86400 IN SOA ns.test.com.
nsadmin.test.com. (2015042201 ; 序列号2H ; 刷新时间10M ; 重试时间1W ; 过期时间1D ; 否定答案的TTL值
)
NS记录
- name: 当前区域的名字
- value: 当前区域的某DNS服务器的名字,例如ns.test.com.
注意:一个区域可以有多个NS记录
- 例如:
test.com. IN NS ns1.test.com.
test.com. IN NS ns2.test.com.
注意:
(1) 相邻的两个资源记录的name相同时,后续的可省略
(2) 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
MX记录
- name: 当前区域的名字
- value: 当前区域的某邮件服务器(smtp服务器)的主机名
一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高
- 例如:
test.com. IN MX 10 mx1.test.com.
IN MX 20 mx2.test.com.
注意:对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
A记录 := domainA => IPv4 Addr
- name: 某主机的FQDN,例如www.test.com.
- value: 主机名对应主机的IP地址
- 样例配置
www.test.com. IN A 1.1.1.1
www.test.com. IN A 2.2.2.2
mx1.test.com. IN A3.3.3.3
mx2.test.com. IN A 4.4.4.4# server1 - server100 解析的地址为 1.2.3.1 - 1.2.3.100
$GENERATE 1-254 server$ A 1.2.3.$*.test.com. IN A 5.5.5.5
test.com. IN A 6.6.6.6
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
AAAA记录 := domainA => IPv6 Addr
- name: FQDN
- value: IPv6
CNAME := 别名 := domainA => domainB
- name: 别名的FQDN
- value: 真正名字的FQDN
- 例如:
www.test.com. IN CNAME websrv.test.com.xx.xx.com IN CNAME yy.servers.com
即: 域名
xx.xx.com
指向另一目标域名yy.servers.com
PTR
- name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.
所以完整写法为:4.3.2.1.in-addr.arpa.
-
value: FQDN
-
例如:
4.3.2.1.in-addr.arpa. IN PTR www.magedu.com.
如1.2.3为网络地址,可简写成:
4 IN PTR www.magedu.com.
注意:网络地址及后缀可省略;主机地址依然需要反着写
安装步骤
机器列表及hosts
- 服务器列表及
etc/hosts
的大致配置:
192.168.100.102 vmw-b.servers.com cpu架构 = x86_64bit / cpu=1c / memory=2g / disk=20gos = centos7.9
192.168.100.103 vmw-c.servers.com cpu架构 = x86_64bit / cpu=1c / memory=2g / disk=20gos = centos7.9
192.168.100.104 vmw-d.servers.com cpu架构 = x86_64bit / cpu=1c / memory=2g / disk=20gos = centos7.9
192.168.100.105 vmw-e.servers.com cpu架构 = x86_64bit / cpu=1c / memory=2g / disk=20gos = centos7.9
- 部署目标:在
vmw-b
节点搭建DNS
服务器
Step1 自建DNS服务(named
)
Step1.1 安装named
服务
yum install -y bind
对应DNS服务:
named
DNS:域名解析协议,用来解析域名与ip的对应关系
主配置文件: /etc/named.conf
子配置文件: /etc/named.rfc1912.zones
(子配置文件,被主配置文件引用)
数据目录: /var/named
DNS的高速缓存
举例如下:主机1向主机2询问百度的ip地址时,主机2不知道,所以通过询问别的主机得到百度的ip地址,然后记录下百度的地址,当主机3再次询问主机2百度地址时,可以直接反馈给主机3,不必再询问别的主机,这就是dns的高速缓存。
Step1.2 配置/etc/named.conf
vim /etc/named.conf
: 配置named.conf
更新如下配置项:
options {#listen-on port 53 { 127.0.0.1; };listen-on port 53 { any; };#allow-query { localhost; };allow-query { any; };# dnssec-enable yes;dnssec-enable no;#dnssec-validation yes;dnssec-validation no;#dnssec-lookaside yes;dnssec-lookaside no;...
}
【解释】
allow-query { acl|IP|Network; };
| 允许向本服务器发起查询请求的主机,即:白名单
allow-update { acl|IP|Network|none; };
| 因为谁都可以更新区域数据库不安全,所以需要这个来限制谁可以,DDNS(动态DNS,使用DHCP服务器), Dynamic DNS(因为不安全,所以一般禁用这个功能:allow-update { none; }
allow-transfer { acl|IP|Network; };
| 允许哪些从服务器可以从本机进行区域传送;默认是所有主机都可以;建议应该只允许从服务器完成此项工作,即:白名单;
追加自定义的域的配置
zone "my-servers.com" IN {type master;# file "my-servers.com.zone";file "/var/named/my-servers.com.zone";allow-update { none; };
};
Step1.3 创建并编辑自定义的zone配置文件(myservers.com.zone
)
cp -p /var/named/named.localhost /var/named/my-servers.com.zonevim /var/named/my-servers.com.zone
编辑的内容:
@ IN SOA dns.my-servers.com. root.my-servers.com (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumNS ns.my-servers.com.
ns IN A 192.168.100.102
www IN A 192.168.100.102
dl IN CNAME vmw-e.servers.com
test IN CNAME vmw-e.servers.com# 修正权限,防止重启 named 服务时,出问题
chmod +755 /etc/named*# 注: /etc/named.conf , ...
chmod +755 /var/named/
chown -R named:named /etc/named.conf# 注: 原始权限(/etc/named*) = root:named
chown -R named:named /var/named/# 注: 原始权限(/var/named/[data|dynamic|slaves]) = named:named# 注: 原始权限(/var/named/[named.ca|named.empty|named.localhost|named.loopback]) = root:named# 注: chown [-R] 账号名:用户组 文件或目录# 注: -R : 递归地更改指定目录下所有文件和子目录的所有者和所属组递归之意ls -la /etc/named*
ls -la /var/named/# 检验一下配置是否有问题
named-checkconf
named-checkzone my-servers.com /var/named/my-servers.com.zone
Step1.4 重启DNS服务的相关网络服务
rndc reloadsudo systemctl restart named# 注: 启动命令的本质: /usr/sbin/named -u named -c /etc/named.confsudo systemctl enable named# 设置为开机自启sudo systemctl restart network
Step1.5 为客户端计算机的网卡配置DNS服务器
注:假定客户端服务器也是CENTOS7,且仅启用了
network
服务,禁用了NetworkManager
服务。
vim /etc/sysconfig/network-scripts/ifcfg-ens33...DNS=192.168.100.102DNS1=... //其他备用的DNS服务器DNS2=... //其他备用的DNS服务器...ifconfig ens33 down
ifconfig ens33 up
或 : sudo systemctl restart network# 注: 此举将重置 /etc/resolv.conf 的 dns 配置# 注:此举将重载 /etc/.../ifcfg-ens33 的网卡 配置vim /etc/resolv.confnameserver 192.168.100.102nameserver 114.114.114.114# 注: 此操作一定要在 `systemctl restart network` 之后进行,否则被重置
Step1.6 验证与使用
[root@vmw-b named]# nslookup www.my-servers.com
Server: 192.168.100.102
Address: 192.168.100.102#53Name: www.my-servers.com
Address: 192.168.100.102[root@vmw-b named]# nslookup test.my-servers.com
Server: 192.168.100.102
Address: 192.168.100.102#53** server can't find test.my-servers.com: NXDOMAIN
Step1.X 查看DNS服务的运行状态及日志
named -gsystemctl status named
journalctl -u namedsystemctl status network
journalctl -u networktail -f /var/log/messages
Step2 DNS 高速缓存服务(nscd
) 的安装与使用【可选步骤】
-
NSCD (Name Service Cache Daemon)是一个系统缓存服务,用于缓存常见的名称服务信息,例如用户、组、主机名和服务。它可以提高系统的性能,减少对名称服务的频繁查询和网络流量,从而加快系统的响应速度。
-
NSCD在许多 Linux 发行版中默认安装,可以使用
systemctl status nscd
命令检查其运行状态。如果需要启动、停止或重新启动 NSCD,可以使用systemctl start nscd
、systemctl stop nscd
或systemctl restart nscd
命令。 -
如果你在/etc/Hosts指定某个IP解析域名,发现实际请求过程中并不生效,那么这时候就要考虑系统内是否存在nscd进程。
开启nscd的hosts缓存服务后,先会优先查找nscd缓存表,如果缓存表里没有,
/etc/hosts
也没有,再正常发起dns query。
- 值得注意的是,
CENTOS 7.9(DVD)
版中,没有提前预装nscd
服务。
CASE1:安装与启动
- 如果系统未安装nscd服务,可以通过以下命令安装
sudo yum -y install nscd
- 安装完成后,启动nscd服务,并设置为开机自启:
sudo systemctl start nscdsudo systemctl enable nscd
CASE2:清理NSCD服务的DNS缓存
-i
,--invalidate=TABLE
可使指定的缓存失效,后面可以接:
passwd、group、hosts、services、netgroup。
sudo nscd -i hosts
CASE3: 默认配置文件(nscd.conf
)
- 默认配置文件路径:
/etc/nscd.conf
Linux网络管理与DNS体系的重要配置文件
/etc/host.conf
:配置域名服务客户端的控制文件。/etc/hosts
:完成主机名映射为IP地址的功能。/etc/resolv.conf
:域名服务客户端的配置文件,用于指定域名服务器的位置。/etc/sysconfig/network
:包含了主机最基本的网络信息,用于系统启动。
/etc/sysconfig/network-script/ifcfg-*
:网卡的配置,系统启动时初始化网络的一些信息。
- /etc/xinetd.conf:定义了由超级进程xinetd启动的网络服务。
- /etc/networks:完成域名与网络地址的映射。
- /etc/protocols:设定了主机使用的协议以及各个协议的协议号。
- /etc/services:设定主机的不同端口的网络服务。
/etc/hosts
默认存放的是本机IP和本机一些主机名的对应关系,第一行是ipv4信息,第二行是ipv6信息,如果用不上ipv6本机解析,一般把该行注释掉。
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
/etc/nsswitch.conf
etc/nsswitch.conf
文件是Linux系统中的一个重要配置文件,它定义了系统如何查找各种数据库(如用户、组、密码、主机名等)的方法,以及在查找时应首先使用哪些数据库。
nsswitch.conf
是最初SUN公司开发的一种扩充(name services switch)
客户机根据 /etc/nsswitch.conf 文件来确定名字解析的顺序:
- 首先本地文件,其次NIS+服务器,最后是DNS
- 案例解释:
/etc/nsswitch.conf
:hosts
配置项
hosts: dns files
表示只在DNS失效时,才使用/etc/hosts文件hosts: dns
表示只用DNS解析主机host: files
表示只用/etc/hosts文件解析主机hosts: files dns
将使用/etc/inet/hosts文件解析主机,表示如果无法解析主机名将使用DNS。如果使用了NIS+,那么这行将如下所示:
hosts: dns nisplus nis files# CENTOS 7.9-2009 版本的默认策略:
hosts: files dns myhostname
- 换言之,/etc/nsswitch.conf文件定义了如下数据库和检索顺序(含DNS的检索与解析顺序):
passwd:用户账号信息
group:用户组信息
shadow:用户密码信息
hosts:主机名、IP地址对应关系
networks:网络名称、IP地址对应关系
protocols:网络协议信息
services:基于网络的服务信息(如NFS)
rpc:RPC协议信息
netgroup:网络组信息passwd:指定了所有计算机用户的账户信息,这些信息被记录在 /etc/passwd 文件中,包括用户 ID、用户名、密码(加密后)、用户家目录、默认 Shell 等信息。
group:指定了所有的用户组信息,被记录在 /etc/group 文件中,包括组 ID、组名、组成员等信息。
shadow:指定了所有用户的密码信息,其加密后的密文被保存在 /etc/shadow 文件中。
hosts:指定了计算机名、域名以及 IP 地址之间的对应关系,这些信息可以被记录在 /etc/hosts 文件中或者通过网络上的 DNS 服务器查询。
networks:指定了网络名称和 IP 地址之间的对应关系,被记录在 /etc/networks 文件中。
protocols:指定了网络协议的信息,被记录在 /etc/protocols 文件中。
services:指定了网络服务相关信息,如端口号、服务名称等,被记录在 /etc/services 文件中。
rpc:指定了 RPC 协议的信息,被记录在 /etc/rpc 文件中。
netgroup:指定了网络组信息,被记录在 /etc/netgroup 文件中,用于定义一组主机或用户的集合,以及这些主机和用户之间的关系。
/etc/resolv.conf
- 样例配置
search xx.yy.zz.kk
nameserver 114.114.114.114
nameserver 8.8.8.8
Q: CENTOS中,resolv.conf
的作用?
- 在CentOS系统中,
/etc/resolv.conf
文件是一个DNS客户机的配置文件,它用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序。这个文件指定了系统用于域名解析的DNS服务器地址,以及当访问非完全限定域名时,系统会自动添加哪些后缀进行尝试解析。
-
DNS解析:
/etc/resolv.conf
文件包含了系统用于将域名转换为IP地址的DNS服务器的地址。当系统需要解析一个域名时,它会查询这个文件中列出的DNS服务器。 -
域名搜索顺序:除了DNS服务器地址,
/etc/resolv.conf
还可以包含搜索域(search)和域名(domain),这些定义了系统在解析不完全限定域名时应该附加哪些后缀。 -
轮询DNS服务器:如果有多个DNS服务器被列出,系统会按照文件中列出的顺序轮询这些服务器,直到域名被成功解析。
-
缓存:虽然
/etc/resolv.conf
不直接缓存DNS查询结果,但它是系统进行DNS查询的基础配置文件。
Q:resolv.conf
与network
服务的关系?
- 在CentOS 7及以前的版本中,
network
服务(通过/etc/sysconfig/network-scripts/
目录下的配置文件管理)直接管理网络接口,包括DNS设置。当network服务【启动】或【重启】时,它会读取 /etc/resolv.conf 文件,并根据网络接口配置文件中的设置(如/etc/sysconfig/network-scripts/ifcfg-*)来更新DNS服务器信息。
-
动态更新:如果
network
服务配置了动态DNS解析,它会在网络接口状态变化时(如接口启用或禁用)更新/etc/resolv.conf
文件。 -
静态配置:如果管理员手动编辑了
/etc/resolv.conf
文件以设置静态DNS服务器,network
服务在启动时会覆盖这些设置,除非配置文件中明确指示不从DHCP自动获取DNS服务器信息。 -
冲突:如果
NetworkManager
和network
服务同时运行,它们可能会争夺对/etc/resolv.conf
文件的控制权,导致DNS设置冲突。通常建议在CentOS 7及更新版本中使用NetworkManager
,因为它提供了更灵活的网络管理功能。(笔者的实际做法:禁用了NetworkManager
) -
禁用
network
服务的DNS管理:为了避免network
服务覆盖/etc/resolv.conf
文件,可以配置网络接口不从DHCP自动获取DNS服务器信息,或者完全禁用network
服务,仅使用NetworkManager
管理网络。
以网卡
ens33
为例,展示如何配置禁用自动获取dns服务器:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
...
PEERDNS=no
...
即使网络接口通过DHCP获取IP地址,也不会自动更新/etc/resolv.conf文件中的DNS服务器信息。
总结来说,/etc/resolv.conf
是CentOS系统中DNS解析的关键配置文件,而network
服务在管理网络接口时会更新这个文件。为了避免配置冲突,通常建议在现代CentOS版本中使用NetworkManager
,并适当配置以保持DNS设置的一致性。
Q: resolv.conf
与NetworkManager的关系?
/etc/resolv.conf
与NetworkManager的关系在于,当NetworkManager服务在系统中运行时,它会动态修改/etc/resolv.conf
文件。NetworkManager负责管理网络连接,并在每次服务重启时重写/etc/resolv.conf
,以反映当前活动连接提供的DNS服务器信息。
这意味着,如果你手动编辑了
/etc/resolv.conf
文件,但NetworkManager服务正在运行,那么NetworkManager可能会覆盖你的更改,因为它会根据DHCP客户端获取的DNS信息更新nameserver
和search
字段。
- 为了防止NetworkManager覆盖
/etc/resolv.conf
文件,可以将其配置为不管理DNS设置。这可以通过在/etc/NetworkManager/NetworkManager.conf
文件中设置dns=none
来实现,这样NetworkManager就不会修改/etc/resolv.conf
文件了。配置示例如下:
[main]
#plugins=ifcfg-rh,ibft
dns=none
通过这种方式,你可以保持对
/etc/resolv.conf
文件的控制,确保DNS设置按照你的配置持久化,即使在系统重启后也不会被NetworkManager覆盖。
Q: 参数及其意义?
nameserver:指定DNS服务器的IP地址。
domain:定义本地域名信息。
search:定义域名的搜索列表。
sortlist:对gethostbyname返回的地址进行排序
DNS体系中的重要站点
- 常用的、公共的 DNS Server
114.114.114.114
8.8.8.8
8.8.4.4
- 根域名服务器
root-server.net
https://www.isc.org/support
Y 推荐文献
- 【Linux网络】本地DNS服务器搭建 - CSDN
dns 理论 /
bind
/named
服务
- DNS服务器搭建,centos7使用bind搭建DNS服务器,DNS超详细详解 - CSDN
bind
/named
服务
- Linux缓存服务NSCD用法总结及实践 - Name Service Cache Daemon-腾讯云开发者社区-腾讯云
nscd 服务
X 参考文献
-
Centos7 从0开始搭建DNS服务器 - CSDN 【推荐】
-
dns配置大全,你值得拥有! - CSDN
-
[[Solved] Bind doesn't work anymore | Named is Bind]([Solved] Bind doesn't work anymore | Named is Bind | DirectAdmin Forums)
-
bind9配置查错笔记--zone域文件权限permission denied_bind9 zone not loaded - CSDN博客
-
【报错】【CentOS_7】【BIND】解决named[7151]: loading from master file XXX.XXX.XXX failed: permission - CSDN博客 【推荐】
-
DNS服务器和主从DNS服务器的搭建 - 阿里云开发者社区 【推荐】x3
-
CentOS6.7搭建部署DNS服务 (详解主配置文件) - え稚始گ - 博客园 【推荐】x5
-
如何在CentOS上配置和管理域名?-HCRM博客 【推荐】x5
-
設定 /etc/named.conf檔案
-
任务4 DNS服务配置与管理_实训2:配置和管理dns服务器 在ip地址为192.168.100.252的服务器上配置主域名服务-CSDN博客 【推荐】x5
-
Centos7添加DNS设置的两种方法-百度经验
[main] plugins=ifcfg-rh dns=none
/etc/NetworkManager/NetworkManager.conf
- 【网络服务器管理】|hosts、resolve.conf、nsswitch.conf - CSDN 【推荐】x5
- Linux杂谈之nsswitch.conf配置文件 - CSDN