[计算机网络/Linux] 基于CENTOS7自建DNS服务

  • 最初的诉求:自建DNS,篡改公开网站的url为自建web服务的url。

  • 在使用浏览器进行网上冲浪的时候,我们只需要输入网址即可访问,但是在网络中,网址并不是一个有效的东西,真正起作用的是网址所对应的IP地址,但是IP地址是一堆没有规律的数字,难以记忆、使用,所以就有了DNS服务器。

  • DNS服务器的功能就是将域名转换成IP地址,这样在我们想要访问一个主机的时候就不需要记住它的IP地址,而是只需要记住它的网址即可,剩下的工作有DNS服务器去替我们完成,由它来将一个网址转换成IP地址,来供给我们访问。

下面就来介绍如何在CentOS7中搭建一个DNS服务器。

  • 版本信息
    • os : centos 7.9

理论:DNS体系

DNS解析流程: 递归查询 vs 迭代查询 | 正向解析 vs 反向解析

  • 域名解析的过程(如下图):
  • 递归查询:

本主机本地域名服务器的查询,一般是采用递归查询

  • 迭代查询:

本地域名服务器根服务器的查询,一般是迭代查询

  • 本地正向解析域名的步骤:(以www.google.com为例的一般步骤,实际情况可能有细微变化)
  • 第一步:先去问/etc/hosts文件,有就直接回复;
  • 第二步:再去问本地dns缓存服务器(如:nscd),有就直接回复;
  • 第三步:再去问根域名服务器,根域名服务器(.只能解析x.中的x,也就是说根只能解析出顶级域名.com),知道顶级域后,再去顶级域服务器(顶级域只能解析x.com.中的x为google),再去二级域服务器,最终查到权威服务器,就可以查询到主机名为www,最终获得到www.google.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 --> IPv6
  • PTR:PoinTeR,IP --> FQDN
  • NS: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.

注意:网络地址及后缀可省略;主机地址依然需要反着写

DNS服务端的安装与客户端配置

机器列表及hosts

  • 服务器列表及etc/hosts 的大致配置:
192.168.100.102 vmw-b.servers.com 
	cpu架构 = x86_64bit / cpu=1c / memory=2g / disk=20g
	os = centos7.9
192.168.100.103 vmw-c.servers.com 
	cpu架构 = x86_64bit / cpu=1c / memory=2g / disk=20g
	os = centos7.9
192.168.100.104 vmw-d.servers.com 
	cpu架构 = x86_64bit / cpu=1c / memory=2g / disk=20g
	os = centos7.9
192.168.100.105 vmw-e.servers.com 
	cpu架构 = x86_64bit / cpu=1c / memory=2g / disk=20g
	os = 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.zone


vim /var/named/my-servers.com.zone
编辑的内容:
@       IN SOA  dns.my-servers.com. root.my-servers.com (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ns.my-servers.com.
ns      IN A    192.168.100.102
@       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

案例参考
from : 【Linux网络】本地DNS服务器搭建 - CSDN

$TTL 1D表示缓存时间为一天
@表示代替域名本身(比如我现在是xuexin.com.)
IN:表示互联网
SOA:表示开始权限记录,这个一定要有
xueyin.com.处写主域名服务器名称,也可以是@,还可以是master
admin.xueyin.com.处写区域文件管理员的邮件地址,随便写,也可用“.”代替,但是不能不写
 
括号内参数:0 表示serial——更新序列号,标记新旧程度,可以是10位以内的整数
                      1D  表示refresh——刷新时间
                      1H 表示retry ——重试时间,连接不上时多长时间重试一次
                      1W 表示expire——失效时间,如果一直重连接不上,多长时间后就不再连接
                      3H 表示minimum——无效解析记录的缓存时间
 
几种记录的作用:
SOA:表示起始权限记录,这个一定要有
NS:表示域名服务器的名字,每一个NS后面要加一个A对应;
CNAME:别名,访问news.xueyin.com时,允许将news替换为mail
A :正向解析ipv4地址
PTR :表示反向解析
MX:表示邮件交换记录,后面写数字和接收邮件的服务器主机名字(10数字表示优先级,范围0-50,越小优先级越高)(可以不管,一般不用)
 
几种特殊符号的作用:
* 代表泛域名
@ 代表自己

Step1.4 重启DNS服务的相关网络服务

rndc reload
  # 注: BIND(Berkeley Internet Name Domain)DNS服务器软件包中的一个工具,用于远程管理BIND守护进程`named`
  # 注: 让BIND DNS服务器重新加载其配置文件(通常是`named.conf`),并应用这些更改,而无需重启服务。这包括重新加载所有的区域文件(zone files),以及根据新的配置调整DNS服务的行为。

sudo systemctl restart  named
    # 注: 启动命令的本质: /usr/sbin/named -u named -c /etc/named.conf

sudo systemctl enable named
    # 设置为开机自启

sudo systemctl restart network
  • rndc(Remote Name Daemon Control)服务
  • rndc是BIND(Berkeley Internet Name Domain)DNS服务器软件包中的一个工具,用于远程管理BIND守护进程named
  • rndc允许管理员在不停止,并重新启动named服务的情况下,动态地加载配置文件、重新加载区域数据(zone data)以及其他实时操作。
  • rndc reload命令的作用是让BIND DNS服务器重新加载其配置文件(通常是named.conf),并应用这些更改,而无需重启服务。这包括重新加载所有的区域文件(zone files),以及根据新的配置调整DNS服务的行为。
  • 以下是rndc reload命令的一些关键点:
  1. 实时更新rndc reload允许DNS服务器实时更新其配置,这意味着任何对named.conf或区域文件的更改都可以立即生效,而不需要重启服务。
  2. 减少服务中断:由于不需要重启named服务,使用rndc reload可以减少因配置更改而导致的服务中断时间。
  3. 安全性rndc通常需要配置访问控制,只有授权的主机和用户才能执行rndc命令,这增加了操作的安全性。
  4. 日志记录rndc操作会被记录在named的日志文件中,这有助于跟踪配置更改和故障排除。
  5. 配置验证:在重新加载配置之前,rndc reload会检查配置文件的语法是否正确。如果配置文件有错误,named将不会重新加载配置,并且会在日志中记录错误信息。
  • 使用rndc reload命令时,你需要确保有足够的权限,通常需要以root用户或具有相应权限的用户执行该命令。此外,rndc配置(在named.conf中)必须正确设置,以允许从你的管理主机执行rndc命令。
  • 示例用法:
rndc reload

这条命令会重新加载BIND DNS服务器的配置,应用任何在配置文件中所做的更改。

Step1.5 为客户端计算机的网卡配置DNS服务器

注:假定客户端服务器也是CENTOS7,且仅启用了network服务,禁用了NetworkManager服务。

vim /etc/sysconfig/network-scripts/ifcfg-ens33
    ...
    DNS=192.168.100.102
    DNS1=... //其他备用的DNS服务器
    DNS2=... //其他备用的DNS服务器
    PEERDNS=no
    ...

ifconfig ens33 down
ifconfig ens33 up
或 : sudo systemctl restart network
    # 注: 此举将重置 /etc/resolv.conf 的 dns 配置
    # 注:此举将重载 /etc/.../ifcfg-ens33 的网卡 配置

vim /etc/resolv.conf
  nameserver 192.168.100.102
  nameserver 114.114.114.114
  # 注: 此操作一定要在 `systemctl restart network` 之后进行,否则被重置;
  # 否则,建议网卡(ifcfg-ens33)中配置: PEERDNS=no 以禁止 network 服务启动时自动刷新 resolv.conf

Step1.6 验证与使用

[root@vmw-b named]# nslookup www.my-servers.com
Server:         192.168.100.102
Address:        192.168.100.102#53

Name:   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 -g

systemctl status named
journalctl -u named

systemctl status network
journalctl -u network

tail -f /var/log/messages

Step2 DNS 高速缓存服务(nscd) 的安装与使用【可选步骤】

  • NSCD (Name Service Cache Daemon)是一个系统缓存服务,用于缓存常见的名称服务信息,例如用户、组、主机名和服务。它可以提高系统的性能,减少对名称服务的频繁查询和网络流量,从而加快系统的响应速度。

  • NSCD在许多 Linux 发行版中默认安装,可以使用 systemctl status nscd 命令检查其运行状态。如果需要启动、停止或重新启动 NSCD,可以使用 systemctl start nscdsystemctl stop nscdsystemctl 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 nscd

sudo 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/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/hosts : 本地本机的主机名与IP的映射关系

默认存放的是本机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/named.conf : 本地or自建的dns服务(DNS服务端资源记录的配置)

/etc/sysconfig/network-script/ifcfg-* : 网卡的网络配置

/etc/resolv.conf : DNS客户端的DNS Server地址及检索顺序的策略

  • 样例配置
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服务器地址,以及当访问非完全限定域名时,系统会自动添加哪些后缀进行尝试解析。
  1. DNS解析/etc/resolv.conf文件包含了系统用于将域名转换为IP地址的DNS服务器的地址。当系统需要解析一个域名时,它会查询这个文件中列出的DNS服务器。

  2. 域名搜索顺序:除了DNS服务器地址,/etc/resolv.conf还可以包含搜索域(search)和域名(domain),这些定义了系统在解析不完全限定域名时应该附加哪些后缀。

  3. 轮询DNS服务器:如果有多个DNS服务器被列出,系统会按照文件中列出的顺序轮询这些服务器,直到域名被成功解析。

  4. 缓存:虽然/etc/resolv.conf不直接缓存DNS查询结果,但它是系统进行DNS查询的基础配置文件。

Q:resolv.confnetwork服务的关系?

  • 在CentOS 7及以前的版本中,network服务(通过/etc/sysconfig/network-scripts/目录下的配置文件管理)直接管理网络接口,包括DNS设置。当network服务【启动】或【重启】时,它会读取 /etc/resolv.conf 文件,并根据网络接口配置文件中的设置(如/etc/sysconfig/network-scripts/ifcfg-*)来更新DNS服务器信息。
  1. 动态更新:如果network服务配置了动态DNS解析,它会在网络接口状态变化时(如接口启用或禁用)更新/etc/resolv.conf文件。

  2. 静态配置:如果管理员手动编辑了/etc/resolv.conf文件以设置静态DNS服务器,network服务在启动时会覆盖这些设置,除非配置文件中明确指示不从DHCP自动获取DNS服务器信息。

  3. 冲突:如果NetworkManagernetwork服务同时运行,它们可能会争夺对/etc/resolv.conf文件的控制权,导致DNS设置冲突。通常建议在CentOS 7及更新版本中使用NetworkManager,因为它提供了更灵活的网络管理功能。(笔者的实际做法:禁用了NetworkManager

  4. 禁用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.confNetworkManager的关系在于,当NetworkManager服务在系统中运行时,它会动态修改/etc/resolv.conf文件。NetworkManager负责管理网络连接,并在每次服务重启时重写/etc/resolv.conf,以反映当前活动连接提供的DNS服务器信息。

这意味着,如果你手动编辑了/etc/resolv.conf文件,但NetworkManager服务正在运行,那么NetworkManager可能会覆盖你的更改,因为它会根据DHCP客户端获取的DNS信息更新nameserversearch字段。

  • 为了防止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地址。
  • search:指定DNS向哪些域名服务器查询主机名的域名后缀

search是一个关键字,用于指定DNS向哪些域名服务器查询主机名的域名后缀。
当我们在主机上使用主机名进行访问时,通常需要指定目标主机所在的完整域名,否则会导致无法直接访问。
如果使用的是短名,则需要将其转换为完整的主机名,向DNS服务器查询该主机名对应的IP地址。
总结:reslov.conf中的search主要是用来补全hostname的,有时候域名太长,可以做一个短域名做主机名字,但是DNS解析需要的是FQDN,而在resolv.conf中设置search能进行补全。

例如,在/etc/resolv.conf文件中添加以下内容:

search example.com

这个意思是告诉DNS服务器,在查询不带域名后缀的主机名(非限定域名,如:www)时,应该自动加上"example.com"后缀进行查询(如:www.example.com)。这样就可以方便地使用主机名进行访问而不需要输入完整的域名。

案例: ping www

# vim /etc/hosts<br>//添加下面这行
8.8.8.8 www

ping www能通,返回就是8.8.8.8,ping会首先解析hosts

# vim /etc/resolv.conf<br>//添加下面行
search oliver.ren
nameserver 223.5.5.5

这时执行命令: nslookup www

Server:  223.5.5.5
Address: 223.5.5.5#53
Non-authoritative answer:
Name:  www.oliver.ren
Address: 8.8.8.8

看到没,search的作用就是补全要访问的短域名
正确的域名解析顺序是:

  1. 查找/etc/hosts
  2. 根据nameserver查找域名
  3. 如果在nameserver查找不到域名就进行search补全,重新走1~2步
  • domain:domain:设置本地主机所在的域名,一般为机构或公司的网址后缀名。

  • options : 设置DNS客户端选项,例如超时时间、是否启用IPv6等。

  • sortlist:对gethostbyname返回的地址进行排序

  • 样例配置: /etc/resolv.conf

nameserver 8.8.8.8
nameserver 114.114.114.114
search example.com
options timeout:1 attempts:3 rotate
  • 指定了两个DNS服务器的IP地址:8.8.8.8和114.114.114.114。

当进行主机名解析时,先尝试访问第一个DNS服务器,如果无响应再访问第二个服务器。
此时,我们在Linux系统中进行主机名解析的操作,将首先查询8.8.8.8,如果未能解析到对应IP地址,则会查询114.114.114.114。

  • 设置了查询主机名的域名后缀为example.com

也就是说,在我们使用没有完整域名的主机名进行访问时,DNS会自动加上.example.com作为后缀查询。
换言之,如果我们使用不带域名后缀的主机名(例如,“server-01”),则DNS会在查询时自动将其转换为"server-01.example.com"进行查询。

  • 设置了客户端选项,包括每次超时时间为1秒、最多重试3次,并且每次按照给出的域名服务器顺序轮流进行查询。

DNS体系中的重要站点

  • 常用的、公共的 DNS Server
114.114.114.114
8.8.8.8
8.8.4.4
  • 根域名服务器
root-server.net
https://www.isc.org/support

Y 推荐文献

dns 理论 / bind / named 服务

bind / named服务

nscd 服务

X 参考文献

[main] plugins=ifcfg-rh dns=none
/etc/NetworkManager/NetworkManager.conf

posted @ 2024-12-20 01:18  千千寰宇  阅读(494)  评论(0)    收藏  举报