本文基于RHEL 9.4操作系统,简要介绍通过BIND自建域名的权威解析服务并配置主从灾备。
这里我们使用的主权威服务器为腾讯云上海轻量服务器,从权威服务器为腾讯云广州轻量服务器,以实现异地灾备服务:
主服务器的配置:
安装BIND:
dnf install -y bind bind-utils
为BIND配置权威解析服务: vim /etc/named.conf
options {
listen-on port 53 { any; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { any; };
allow-recursion { localhost; };
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes;
dnssec-validation yes;
managed-keys-directory "/var/named/dynamic";
geoip-directory "/usr/share/GeoIP";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
include "/etc/crypto-policies/back-ends/bind.config";
};
注意,这里和递归服务器的配置略有不同,这里我们配置仅允许localhost进行递归解析,而非响应任意来源地址的递归解析(主要是在国内的合规性需求考虑,同时也可以避免你域名的权威DNS成为DNS放大攻击的一部分)。
listen-on port 53 { any; };
这部分保持响应任何IP的53端口的请求不变。然后接下来我们配置区域文件,同样是在 vim /etc/named.conf
中,我们添加以下的部分:
zone "example.com" {
type master;
file "/var/named/example.com.zone";
allow-query { any; };
allow-update { none; };
};
这里example.com换成域名,/var/named/example.com.zone这部分实际上也一样,我们是将区域文件配置保存在/var/named/example.com.zone下。
编辑区域文件:
vim /var/named/example.com.zone
我们这里还是先给出一个示例:
$TTL 20s
@ IN SOA ns1.example.com. ns2.example.com. (
2024081209 ; serial number
1d ; refresh period
3h ; retry period
3d ; expire time
3h ) ; minimum TTL
IN NS ns1.example.com.
IN NS ns2.example.com.
www IN A 8.8.8.8
为区域文件配置权限:
chown root:named /var/named/example.com.zone
检查区域配置文件和主配置文件是否有错误:
named-checkconf
named-checkzone example.com /var/named/example.com.zone
如果确定没有错误则启动named服务:
systemctl enable --now named
SOA 记录有哪些部分?(来自CloudFlare文档)
- MNAME:这是区域的主要名称服务器的名称。维护该区域DNS记录副本的辅助服务器会从该主要服务器接收对该区域的更新。
- REFRESH:辅助服务器在向主要服务器询问 SOA 记录以查看其是否已更新之前应等待的时间长度(秒)。
- RETRY:服务器再次向无响应的主要名称服务器请求更新前应等待的时间长度。
- EXPIRE:如果辅助服务器在该时间段内没有得到主要服务器的响应,则应该停止响应对该区域的查询。
DNS 区域传输是将 DNS 记录数据从一个主要名称服务器发送到一个辅助名称服务器的过程。SOA 记录将首先被传输。序列号将告知辅助服务器其版本是否需要更新。请注意:
当你更新了主要服务器的配置时,serial number务必要进行更新,一定是要有一个比你之前大的数值的,否则辅助DNS服务器将不会进行更新。
最后一行为我们添加的域名的A记录,大家看一眼就应该能明白了,这里没有什么弯弯绕绕的。
从服务器的配置:
安装BIND:
dnf install -y bind bind-utils
为BIND配置权威解析服务: vim /etc/named.conf
options {
listen-on port 53 { any; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { any; };
allow-recursion { localhost; };
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes;
dnssec-validation yes;
managed-keys-directory "/var/named/dynamic";
geoip-directory "/usr/share/GeoIP";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
include "/etc/crypto-policies/back-ends/bind.config";
};
这部分的配置实际上和主服务器相同,但是在区域文件部分我们有所变化:
zone "example.com" IN {
type slave;
file "/var/named/example.com.zone";
masters { IP; };
};
masters {IP;};
这部分中的IP换成你的主服务器的IP即可,这个区域配置文件会将配置文件放入/var/named/example.com.zone之中,但这里不需要我们进行什么额外的调整,他会自动的从主要的DNS服务器上同步内容。
检查区域配置文件和主配置文件是否有错误:
named-checkconf
named-checkzone example.com /var/named/example.com.zone
如果确定没有错误则启动named服务:
systemctl enable --now named
到这里,我们的权威DNS解析服务器的配置工作就已经完成了,接下来我们来为域名在注册商侧配置胶水记录(自定义DNS HOST),这里我们同样继续以腾讯云为例:
点击添加DNS HOST按钮:
DNS HOST名称分别为ns1.example.com,ns2.example.com。分别将ns1配置为你的主要的DNS服务器地址,ns2配置为你的辅助DNS的地址即可进行解析。