前言
DNS配置内容、步骤、参数较多,初学者很难短时间掌握,另外,理解DNS工作原理也有一定的难度,一次配置成功的概率不大,因此,建议在配置DNS之前,先读一下之前笔者的博文《详解DNS工作原理及实例分析》。配置重点掌握三个文件:主配置文件、区域配置文件和区域文件,这三个文件分别承担怎样的任务?相互之间有什么先后、依存关系?具体参数含义是什么?都是认真思考和对待的,笔者用一个示意图,力图说明三个文件的关系。
需要特别指出的是,主配置文件named.conf、区域配置文件named.rfc1912.zones是bind服务安装后就有了,只需要修改配置即可;而区域文件则需要创建的新文件, 但在区域配置文件中需指定文件名及路径。
一. DNS安装
在OpenEuler系统中,DNS服务通常由`bind`或`dnsmasq`提供。以下是bind安装步骤:
1、 安装bind服务:
dnf install -y bind
2.、安装bind成功,如图所示。
二、 DNS配置
1、客户端配置:
编辑`/etc/resolv.conf`文件,添加DNS服务器地址:
vim /etc/resolv.conf
添加以下内容:
nameserver 192.168.157.129
这里配置DNS服务器的IP地址。
2、 服务端配置:
(1) 修改主配置文件'bind':
cp /etc/named.conf /etc/named.conf.bak
修改配置文件之前,备份该文件是个好习惯,以防配置过程将配置文件能乱,及时将配置文件回复。
vim /etc/named.conf
主配置文件内容如图所示。
修改以下内容:
listen-on port 53 { any; };
allow-query { any; };
其中 listen-on port 53 { any; }; 这行配置指示DNS服务器在TCP和UDP的53端口上监听来自任何地址的请求。端口53是DNS协议的标准端口。`any;` 表示服务器将接受来自任何IP地址的请求。
- `listen-on` 是BIND中用于指定服务器监听的网络接口的指令。
- `port 53` 指定了端口号,这里是DNS协议默认的端口53。
- `{ any; }` 是一个括号内的声明,表示服务器将监听所有网络接口的53端口。`any` 是一个特殊的地址,代表所有地址。
allow-query { any; }; 这行配置指定了哪些客户端可以向DNS服务器发送查询请求。`any;` 表示允许任何客户端向服务器查询DNS记录。
- `allow-query` 是一个访问控制指令,用于限制谁可以对DNS服务器进行查询。
- `{ any; }` 表示允许所有客户端进行查询,没有任何限制。
在实际部署中,出于安全考虑,可能需要对这些设置进行限制。例如,你可能只想允许特定网络或地址范围的客户端进行查询,或者只允许特定的服务器进行区域传送(transfer)。在这种情况下,你可以将`any`替换为特定的IP地址或网络段,如:
listen-on port 53 { 192.168.1.0/24; };
allow-query { 192.168.1.0/24; };
这样,只有`192.168.1.0/24`网络段内的客户端能够查询DNS服务器。
(2) 修改区域配置文件`/etc/named.rfc1912.zones`:
cp /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bak
vim /etc/named.rfc1912.zones
添加区域配置:
zone "zhu.com" IN {
type master;
file "/etc/named/zhu.com.zone";
};
配置后文件如图所示。
(3) 创建区域文件`/etc/named/zhu.com.zone`:
touch /etc/named/zhu.com.zone
vim /etc/named/zhu.com.zone
添加区域记录,例如:
$TTL 86400
@ IN SOA ns1.zhu.com. admin.zhu.com. (
2021042801 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum TTL
)
; 定义NS记录
@ IN NS ns1.zhu.com.
; 定义A记录
ns1 IN A 192.168.157.128
www IN A 192.168.1.128
下面是对配置的注释和解释:
$TTL 86400
这行设置了默认的记录存活时间(Time To Live,TTL),单位是秒。这里设置为86400秒,即24小时。这意味着除非本地DNS服务器的缓存被刷新,否则DNS记录将在缓存中保存24小时。
@ IN SOA ns1.zhu.com. admin.zhu.com. (
2021042801 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum TTL
)
这是一个SOA(Start of Authority)记录,标志着区域文件的开始,并包含有关DNS区域的重要信息:
- `@` 表示默认域名,通常与区域的名称相同。
- `IN` 表示记录的类别是Internet。
- `SOA` 是“Start of Authority”的缩写。
- `ns1.zhu.com.` 是主DNS服务器的主机名。
- `admin.zhu.com.` 是管理这个区域文件的管理员的联系邮箱,通常以`.`结束。
- `2021042801` 是序列号,用于版本控制。
- `3600` 是刷新时间,指定从属DNS服务器多久向主DNS服务器查询一次以获取更新。
- `1800` 是重试时间,指定如果从属DNS服务器在刷新时间内未能联系到主DNS服务器,它将尝试联系的频率。
- `604800` 是过期时间,指定从属DNS服务器在放弃这个区域文件之前等待主DNS服务器响应的最大时间。
- `86400` 是最小TTL值,指定DNS记录的最小存活时间。
; 定义NS记录
@ IN NS ns1.zhu.com.
这是一个NS(Name Server)记录,定义了哪个DNS服务器是这个区域的权威DNS服务器。这里指定`ns1.zhu.com`是权威DNS服务器。
; 定义A记录
ns1 IN A 192.168.157.128
www IN A 192.168.157.128
这些是A(Address)记录,将主机名映射到IPv4地址:
- `ns1` 是一个主机名,`IN` 表示记录的类别是Internet,`A` 表示这是一个地址记录,`192.168.157.128` 是这个主机名对应的IPv4地址。
- `www` 是一个常见的主机名,通常用于指向网站的主服务器。这里它被映射到IPv4地址`192.168.157.128`。
整个配置定义了一个基础的DNS区域,包括一个SOA记录,一个NS记录,和两个A记录。
(4) 检查配置文件:
named-checkconf
named-checkzone zhu.com /etc/named/zhu.com.zone
(5) 重启`named`服务:
systemctl restart named
systemctl enable named
检查named服务状态:
systemctl status named
查看named服务端口是否已开启:
netstat -tulnp | grep 53
3. DNS测试
使用`dig`或`nslookup`命令测试DNS解析:
dig @127.0.0.1 www.zhu.com
nslookup www.zhu.com
检查返回的IP地址是否正确。如图所示,该DNS正确的解析了域名对应的IP地址。
4、常见问题
1. DNS服务启动失败:检查配置文件语法是否正确,使用`named-checkconf`和`named-checkzone`命令检查。
2. DNS解析失败:确认`resolv.conf`文件中的nameserver设置正确,检查网络连接。
3. DNS服务重启后配置失效:确认配置文件更改后是否被正确保存,重启服务时是否使用了正确的命令。
通过以上步骤,你可以在OpenEuler系统中安装、配置和测试DNS服务。