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 | zone "example.com" { |
2、创建zone配置文件
1 | vim /var/named/example.com.zone |
内容为:
1 | $TTL 86400 |
其中 @ 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 | $TTL 86400 |
其中 100 IN PTR www.example.com.
是一条反向解析,192.168.1.100
反向解析到 www.example.com 。
4. 启动BIND
1、启动BIND
1 | systemctl start named |
2、查看服务状态
1 | systemctl status named |
3、配置防火墙(可选)
1 | firewall-cmd --add-service=dns --permanent |
5. 测试DNS服务器
1、正向解析测试
1 | nslookup www.example.com 127.0.0.1 |
正常的话,会看到解析结果为 192.168.1.100
2、反向解析测试
1 | nslookup 192.168.1.100 127.0.0.1 |
正常的话,会看到反向解析结果为 www.example.com
6. 配置上游DNS服务器
自建的DNS服务器无法解析的查询请求,会进行递归查询。DNS具体解析流程,可以参考《DNS入门篇
》。
此时,我们可以配置指定的上游DNS服务器,从而减少自建DNS服务器的递归查询数量,提高性能。
具体配置方法为:
1、编辑named.conf
1 | vim /etc/named.conf |
添加 forwarders 配置:
1 | options { |
这里的 forwarders 指定了需要前向查询的DNS服务器,多个服务器之间用分号间隔。
forward first 的意思是首先尝试将请求转发给forwarders中的服务器,如果失败,那么才会尝试使用传统的DNS递归查询来解析。
2、重启named
1 | systemctl restart named |
3、测试访问
1 | nslookup www.baidu.com 127.0.0.1 |
7. 配置使用DNS服务器
1、配置允许其他主机使用DNS服务器
1 | vim /etc/named.conf |
修改options部分的参数:
1 | options { |
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 | cd /var/named/data |
发现很多错误的解析:
1 | no valid DS resolving 'xxx.oss-cn-hangzhou.aliyuncs.com/A/IN': 114.114.114.114#53 |
8.2. 解决办法
1、对于 no valid DS resolving ,需要关闭dnssec。
1 | vim /etc/named.conf |
修改:
1 | options { |
2、对于 network unreachable resolving ,需要关闭IPv6解析。
1 | vim /etc/sysconfig/named |
添加:
1 | OPTIONS="-4" |
3、重启named
1 | systemctl restart named |
9. 后记
如果想要配置多个顶级域名,那么在 named.conf 中添加多个 zone 即可。