序
-
最初的诉求:自建DNS,篡改公开网站的url为自建web服务的url。
-
在使用浏览器进行网上冲浪的时候,我们只需要输入网址即可访问,但是在网络中,网址并不是一个有效的东西,真正起作用的是网址所对应的IP地址,但是IP地址是一堆没有规律的数字,难以记忆、使用,所以就有了DNS服务器。
-
DNS服务器的功能就是将域名转换成IP地址,这样在我们想要访问一个主机的时候就不需要记住它的IP地址,而是只需要记住它的网址即可,剩下的工作有DNS服务器去替我们完成,由它来将一个网址转换成IP地址,来供给我们访问。
下面就来介绍如何在CentOS7中搭建一个DNS服务器。
- 版本信息
- os : centos 7.9
理论:DNS体系
DNS记录的指令
A := domainA => IP Addr
xx.xx.com IN A aa.bb.cc.dd
CNAME := 别名 := domainA => domainB
xx.xx.com IN CNAME yy.servers.com
即: 域名
xx.xx.com
指向另一目标域名yy.servers.com
NS
安装步骤
机器列表及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
重要配置文件的阐释
/etc/nsswitch.conf
etc/nsswitch.conf
文件是Linux系统中的一个重要配置文件,它定义了系统如何查找各种数据库(如用户、组、密码、主机名等)的方法,以及在查找时应首先使用哪些数据库。
具体来说,/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缓存服务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