一个计算机技术爱好者与学习者

0%

好好学Linux:CentOS7安装配置DNS服务

1. 前言

本文中,我们学习在CentOS7中安装配置DNS服务。
DNS服务选择使用BIND,BIND(Berkeley Internet Name Domain)是一种开源的DNS服务器软件,可以安装在CentOS 7上。

参考文档:BIND官网

2. 安装BIND

1
yum install -y bind bind-utils

3. 配置BIND

1、编辑bind配置

1
vim /etc/named.conf

默认配置内容为:named.conf

引用zone配置文件和反向数据文件:

1
2
3
4
5
6
7
8
9
zone "example.com" {
type master;
file "/var/named/example.com.zone";
};

zone "1.168.192.in-addr.arpa" {
type master;
file "/var/named/1.168.192.in-addr.arpa.zone";
};

2、创建zone配置文件

1
vim /var/named/example.com.zone

内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2023101601 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL

@ IN NS ns1.example.com.
@ IN NS ns2.example.com.

ns1 IN A 192.168.1.10
ns2 IN A 192.168.1.11
www IN A 192.168.1.100

其中 @ IN SOA ns1.example.com. admin.example.com. 是DNS区域文件(zone file)中的一行,它定义了域的”Start of Authority”(SOA)记录。

  • @: 在这种上下文中,@ 代表当前域的根(例如,如果您定义的是example.com,那么@ 表示 example.com)。这是一种特殊的缩写,表示当前域。
  • IN: 表示资源记录的类别(Class),通常为“IN”(Internet)。
  • SOA: 这是资源记录类型,表示”Start of Authority”,它包含有关域的基本信息。
  • ns1.example.com.: 这是主要名称服务器(Primary Name Server)的域名。它指定了此域的主要权威DNS服务器的域名。
  • admin.example.com.: 这是负责管理此域的负责人的电子邮件地址。通常,电子邮件地址以.替换@

此行的示例告诉DNS服务器,在当前域(例如,example.com)中,主要的权威DNS服务器是 ns1.example.com ,同时负责人的电子邮件地址是admin@example.com

SOA记录还包括其他信息,如序列号、刷新时间、重试时间、过期时间等,这些信息对于域名的管理和更新非常重要。

这是DNS区域文件的一部分,用于配置DNS服务器以提供有关域名的信息,以便其他计算机能够解析域名并找到与之相关的IP地址。

其中 @ IN NS ns1.example.com. 用于指定当前域的NS服务器的域名。

其中 www IN A 192.168.1.100 是一条解析,www.example.com 域名解析到 192.168.1.100

3、创建反向数据文件

1
vim /var/named/1.168.192.in-addr.arpa.zone

内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2023101601 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL

@ IN NS ns1.example.com.
@ IN NS ns2.example.com.

10 IN PTR ns1.example.com.
11 IN PTR ns2.example.com.
100 IN PTR www.example.com.

其中 100 IN PTR www.example.com. 是一条反向解析,192.168.1.100 反向解析到 www.example.com

4. 启动BIND

1、启动BIND

1
2
systemctl start named
systemctl enable named

2、查看服务状态

1
2
systemctl status named
netstat -nlp | grep 53

3、配置防火墙(可选)

1
2
firewall-cmd --add-service=dns --permanent
firewall-cmd --reload

5. 测试DNS服务器

1、正向解析测试

1
2
nslookup www.example.com 127.0.0.1
dig @127.0.0.1 -p 53 www.example.com

正常的话,会看到解析结果为 192.168.1.100

2、反向解析测试

1
2
nslookup 192.168.1.100 127.0.0.1
dig @127.0.0.1 -p 53 -x 192.168.1.100

正常的话,会看到反向解析结果为 www.example.com

6. 配置上游DNS服务器

自建的DNS服务器无法解析的查询请求,会进行递归查询。DNS具体解析流程,可以参考《DNS入门篇

此时,我们可以配置指定的上游DNS服务器,如果自建DNS服务器无法解析,那么会将该查询请求转发到指定的上游DNS服务器。上游DNS服务器将尝试解析该查询,并返回答案给自建DNS服务器。自建DNS服务器接收到上游DNS服务器的响应后,将答案返回给发起原始查询的客户端。
这样就可以让上游DNS服务器进行递归查询,从而减少自建服务器的递归查询数量,提高性能。

具体配置方法为:

1、编辑named.conf

1
vim /etc/named.conf

添加 forwarders 配置:

1
2
3
4
options {
forwarders { 180.76.76.76; 114.114.114.114; };
forward first;
};

这里的 forwarders 指定了需要前向查询的DNS服务器,多个服务器之间用分号间隔。
forward first 的意思是首先尝试将请求转发给forwarders中的服务器,如果失败,那么才会尝试使用传统的DNS递归查询来解析。

2、重启named

1
systemctl restart named

3、测试访问

1
2
nslookup www.baidu.com 127.0.0.1
nslookup www.google.com 127.0.0.1

7. 配置使用DNS服务器

1、配置允许其他主机使用DNS服务器

1
vim /etc/named.conf

修改options部分的参数:

1
2
3
4
5
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { any; };
allow-query { any; };
};

2、重启named

1
systemctl restart named

3、其他主机配置使用DNS服务器

1
vim /etc/resolv.conf

假设DNS服务器的IP地址为 192.168.56.101 ,那么配置为:

1
nameserver 192.168.56.101

8. 解析报错解决办法

8.1. 问题描述

查看bind服务的日志:

1
2
cd /var/named/data
grep "xxx.oss-cn-hangzhou.aliyuncs.com" named.run

发现很多错误的解析:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
no valid DS resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 114.114.114.114#53
no valid DS resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 180.76.76.76#53
network unreachable resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 2001:503:d414::30#53
network unreachable resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 2001:502:8cc::30#53
network unreachable resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 2001:502:1ca1::30#53
network unreachable resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 2001:503:eea3::30#53
network unreachable resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 2001:501:b1f9::30#53
network unreachable resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 2001:503:83eb::30#53
network unreachable resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 2001:502:7094::30#53
network unreachable resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 2001:503:a83e::2:30#53
network unreachable resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 2001:500:d937::30#53
network unreachable resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 2001:503:d2d::30#53
network unreachable resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 2001:500:856e::30#53
network unreachable resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 2001:503:39c1::30#53
network unreachable resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 2001:503:231d::2:30#53
network unreachable resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 2401:b180:4100::12#53
network unreachable resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 2401:b180:4100::13#53
network unreachable resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 2401:b180:4100::11#53

8.2. 解决办法

1、对于 no valid DS resolving ,需要关闭dnssec。

1
vim /etc/named.conf

修改:

1
2
3
4
options {
dnssec-enable no;
dnssec-validation no;
}

2、对于 network unreachable resolving ,需要关闭IPv6解析。

1
vim /etc/sysconfig/named

添加:

1
OPTIONS="-4"

3、重启named

1
systemctl restart named

9. 后记

如果想要配置多个顶级域名,那么在 named.conf 中添加多个 zone 即可。

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-centos-dns-server/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~