本文介绍如何使用 BIND 9+CloudNS+NS1 (NSONE) 搭建高可用 DNS 服务,一般来讲,对于高可用的场景来说,单一的 DNS 服务商提供的 DNS 服务无法满足灾备的需求,所以我们需要使用多个 DNS 服务商来进行冗余备份,本文将指导您使用 BIND 9 作为主 DNS 服务器(不对外提供服务),CloudNS 和 NS1 (NSONE) 作为从 DNS 服务器(对外提供服务)来搭建高可用 DNS 服务。

本文部分内容将指导您如何使用自己的域名作为 DNS 服务器地址,以下简称Vanitydns,如果您不需要实现该效果,可以按说明跳过相关步骤。

前提条件

  • 服务器/云服务器:BIND 9 对配置要求不高,如您的解析记录数量较少,一般 1 核 1G 的服务器即可满足需求;该服务器 53 端口需要对外开放,如果您使用的是云服务器,需要在云平台的安全组中添加 53 端口的入站规则(TCP&UDP)。
  • 系统环境:本示例中使用的是 Debian12
  • DNS 服务域名(Vanitydns 需要):为了实现服务的高可用性,至少需要两个域名,这两个域名需要在不同注册局&注册商(如.com和.org;腾讯云和阿里云),以避免某家注册商或注册局服务出现异常,且注册商需要支持添加 DNS host(Glue record)。笔者使用的是 AWS Route53 和 Dynadot 两家注册商,以及 vanitydns.com 和 vanitydns.org 两个注册局不同的域名。不考虑高可用性的情况下,只需要一个域名即可。
  • DNS 服务商服务(Vanitydns 需要):CloudNS 需要付费服务,具体费用根据您的需求而定;NS1 (NSONE) 提供免费服务,但需要申请账号,若使用量超出 NS1 (NSONE) 免费额度,则需要付费,具体费用根据您的需求而定。

    NS1 (NSONE) 注册账号需要人工审核,审核通过后才能完成注册,审核时间一般为 1-2 个工作日。

传送门:

操作步骤

安装 BIND 9

1
2
sudo apt update
sudo apt install BIND 9

BIND 9 基础配置

配置文件路径:/etc/bind/named.conf.options

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
options {
directory "/var/cache/bind";

// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113

// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.

// forwarders {
// 0.0.0.0;
// };

//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
listen-on-v6 { any; };
listen-on { any; };
allow-query-cache { none; };
allow-query { any; };
recursion no; // 禁用递归查询
rate-limit {
responses-per-second 500; // 速率限制:每秒最多响应500次,由于不对外提供服务,一般不需要配置
};
};

如您需要记录相关日志,可在下面添加日志配置,详细配置请参考 BIND 9 日志配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
logging {
channel default_log {
file "/var/log/named/default" versions 3 size 20m;
print-time yes;
print-category yes;
print-severity yes;
severity info;
};
channel auth_servers_log {
file "/var/log/named/auth_servers" versions 100 size 20m;
print-time yes;
print-category yes;
print-severity yes;
severity info;
};
channel dnssec_log {
file "/var/log/named/dnssec" versions 3 size 20m;
print-time yes;
print-category yes;
print-severity yes;
severity info;
};
channel zone_transfers_log {
file "/var/log/named/zone_transfers" versions 3 size 20m;
print-time yes;
print-category yes;
print-severity yes;
severity info;
};
channel ddns_log {
file "/var/log/named/ddns" versions 3 size 20m;
print-time yes;
print-category yes;
print-severity yes;
severity info;
};
channel client_security_log {
file "/var/log/named/client_security" versions 3 size 20m;
print-time yes;
print-category yes;
print-severity yes;
severity info;
};
channel rate_limiting_log {
file "/var/log/named/rate_limiting" versions 3 size 20m;
print-time yes;
print-category yes;
print-severity yes;
severity info;
};
channel rpz_log {
file "/var/log/named/rpz" versions 3 size 20m;
print-time yes;
print-category yes;
print-severity yes;
severity info;
};
channel queries_log {
file "/var/log/named/queries" versions 600 size 20m;
print-time yes;
print-category yes;
print-severity yes;
severity info;
};
channel query-errors_log {
file "/var/log/named/query-errors" versions 5 size 20m;
print-time yes;
print-category yes;
print-severity yes;
severity dynamic;
};
channel default_syslog {
print-time yes;
print-category yes;
print-severity yes;
syslog daemon;
severity info;
};
channel default_debug {
print-time yes;
print-category yes;
print-severity yes;
file "named.run";
severity dynamic;
};
category default { default_syslog; default_debug; default_log; };
category config { default_syslog; default_debug; default_log; };
category dispatch { default_syslog; default_debug; default_log; };
category network { default_syslog; default_debug; default_log; };
category general { default_syslog; default_debug; default_log; };
category zoneload { default_syslog; default_debug; default_log; };
category resolver { auth_servers_log; default_debug; };
category cname { auth_servers_log; default_debug; };
category delegation-only { auth_servers_log; default_debug; };
category lame-servers { auth_servers_log; default_debug; };
category edns-disabled { auth_servers_log; default_debug; };
category dnssec { dnssec_log; default_debug; };
category notify { zone_transfers_log; default_debug; };
category xfer-in { zone_transfers_log; default_debug; };
category xfer-out { zone_transfers_log; default_debug; };
category client{ client_security_log; default_debug; };
category security { client_security_log; default_debug; };
category rate-limit { rate_limiting_log; default_debug; };
category spill { rate_limiting_log; default_debug; };
category database { rate_limiting_log; default_debug; };
category rpz { rpz_log; default_debug; };
category trust-anchor-telemetry { default_syslog; default_debug; default_log; };
category queries { queries_log; };
category query-errors {query-errors_log; };
};

创建域名区域文件

区域文件记录了域名的解析记录,每个域名都需要一个区域文件,区域文件默认可以存放在 /var/cache/bind 目录下,也可以自定义存放路径,本示例中使用的是默认路径,区域文件无特殊命名规则,可以使用域名作为文件名(不需要指定后缀),或使用 .txt/.zones/.zone/.db 等作为后缀,本文未指定后缀。

此处以 yjz.hk 为例,在 /var/cache/bind 下创建 yjz.hk 的区域文件,文件名为 yjz.hk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$TTL 1d    ; default TTL for zone
$ORIGIN yjz.hk.
@ IN SOA ns1.example.com. hostmaster.example.com. (
2023112701 ; serial number
1h ; refresh
3m ; update retry
2w ; expiry
1m ; minimum
)
@ 86400 IN NS ns1.vanitydns.com.
@ 86400 IN NS ns2.vanitydns.com.
@ 86400 IN NS ns3.vanitydns.org.
@ 86400 IN NS ns4.vanitydns.org.
@ 300 IN A 104.26.7.130
@ 300 IN A 104.26.6.130
@ 300 IN A 172.67.70.42
@ 300 IN AAAA 2606:4700:20::681a:682
@ 300 IN AAAA 2606:4700:20::ac43:462a
@ 300 IN AAAA 2606:4700:20::681a:782
  • $TTL:默认 TTL,如果某条记录没有指定 TTL,则使用默认 TTL
  • $ORIGIN:域名,如果某条记录没有指定域名,则使用 $ORIGIN
  • @:代表域名本身,如 yjz.hk
  • IN:代表 Internet
  • SOA:Start of Authority,域名的权威记录,每个域名只能有一个 SOA 记录,其中 ns1.example.com. 代表主名称服务器,hostmaster.example.com. 代表域名管理员邮箱地址,2023112701 代表序列号,1h 代表刷新时间,3m 代表重试时间,2w 代表过期时间,1m 代表最小 TTL。注意:在 zone 文件中,所有完整的域名后面都需要加上一个点,如 ns1.example.com.,否则会自动加上 $ORIGIN,变成 ns1.example.com.yjz.hk;此外序列号在每次修改 zone 文件后都需要递增,否则从 DNS 服务器无法同步获取到最新的解析记录。
  • NS:Name Server,域名服务器,每个域名至少需要两个 NS 记录,如果您未使用 Vanitydns,请配置CloudNS和NS1 (NSONE) 提供的 NS 服务器地址(建议总共不超过 4 个,每家各配置两个,后面会教大家如何获取两家提供的NS,这里随便写两个域名即可,如pns41.cloudns.net., pns42.cloudns.net., dns1.p01.nsone.net., dns2.p01.nsone.net.),如果您使用了 Vanitydns,请配置您用来提供 DNS 服务的 NS 服务器地址,如 ns1.vanitydns.com.,ns2.vanitydns.com.,ns3.vanitydns.org.,ns4.vanitydns.org.。
  • A:Address,IPv4 地址,如果您的域名需要解析 IPv4 地址,请添加 A 记录。
  • AAAA:IPv6 地址,如果您的域名需要解析 IPv6 地址,请添加 AAAA 记录。

创建 Slave/Secondary 区域

Slave/Secondary 区域是指从 DNS 服务器,它从主 DNS 服务器获取域名的解析记录,然后提供给客户端,本示例中使用的是 CloudNS 和 NS1 (NSONE) 作为 Slave/Secondary 区域,BIND 9 作为主 DNS 服务器,所以需要在 CloudNS 和 NS1 (NSONE) 上创建 Slave/Secondary 区域。

CloudNS 创建 Slave/Secondary 区域

  1. 登录 CloudNS 管理控制台,点击创建区域
    创建区域
  2. 选择备用域
    备用域
  3. 填写域名和主 DNS 服务器地址,主 DNS 服务器地址填写 BIND 9 服务器的 IP 地址
    填写域名和主 DNS 服务器地址
  4. 点击创建,完成创建
  5. 创建完成后点击页面的基础设置记录下用于传输的 IP 地址,后面配置 BIND 9 区域文件时需要用到
    基础设置

CloudNS 的 NS 服务器地址可在控制面板可用的名称服务器查看
可用的名称服务器

NS1 (NSONE) 创建 Slave/Secondary 区域

  1. 登录 NS1 (NSONE) 管理控制台,点击+
    创建区域
  2. 填写域名并选择Secondary Zone,主 DNS 服务器地址填写 BIND 9 服务器的 IP 地址
    填写域名和主 DNS 服务器地址
  3. 点击Save Zone,完成创建
  • 请注意,NS1 域名内需要填写 FQDN,即需要填写完整的域名,如 yjz.hk.,而不是 yjz.hk
  • NS1 (NSONE) 用于AXFR/IXFR传输的 IP 地址为192.135.223.10
  • NS1 (NSONE) 的辅助 DNS 服务器地址可在区域控制面板中的Name Servers查看
    Name Servers

修改域名区域文件中的 DNS 服务器地址

至此我们已经获取到了两家厂商的 NS 服务器地址,需要根据实际获取到的地址修改区域文件中的 NS 记录和 SOA 记录,以 yjz.hk 为例,修改后的 SOA 和 NS 记录如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
$TTL 1d    ; default TTL for zone
$ORIGIN yjz.hk.
@ IN SOA pns41.cloudns.net. hostmaster.yjz.hk. (
2023112702 ; serial number
1h ; refresh
3m ; update retry
2w ; expiry
1m ; minimum
)
@ 86400 IN NS pns41.cloudns.net.
@ 86400 IN NS pns42.cloudns.net.
@ 86400 IN NS dns1.p01.nsone.net.
@ 86400 IN NS dns2.p01.nsone.net.

如果您使用的是 Vanitydns,请将上面的 NS 记录修改为您用来提供 DNS 服务的 NS 服务器地址,如 ns1.vanitydns.com.,ns2.vanitydns.com.,ns3.vanitydns.org.,ns4.vanitydns.org.,SOA 记录中的主名称服务器也需要修改为您用来提供 DNS 服务的 NS 服务器地址,如 ns1.vanitydns.com.。

配置 BIND 9 加载区域文件

配置文件路径:/etc/bind/named.conf.local,在原有配置的基础上添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
zone "yjz.hk" {
type master;
file "/var/cache/bind/yjz.hk";
allow-transfer {
109.201.133.196; 108.62.121.219; 185.10.17.44; 185.206.180.140; 185.136.96.79;
185.136.97.79; 185.136.98.79; 185.136.99.79; 185.206.180.205; 2a00:1768:1001:9::196;
2604:9a00:2100:b000:1::1; 2a07:8dc0:19::5d:37ff:fea5:bacd; 2a0b:1640:1:1:1:1:762:9aa6;
2a06:fb00:1::1:79; 2a06:fb00:1::2:79; 2a06:fb00:1::3:79; 2a06:fb00:1::4:79; 2a0b:1640:1:3::13; // cloudns
192.135.223.10; //NS1
};
also-notify {
109.201.133.196; 108.62.121.219; 185.10.17.44; 185.206.180.140; 185.136.96.79;
185.136.97.79; 185.136.98.79; 185.136.99.79; 185.206.180.205; 2a00:1768:1001:9::196;
2604:9a00:2100:b000:1::1; 2a07:8dc0:19::5d:37ff:fea5:bacd; 2a0b:1640:1:1:1:1:762:9aa6;
2a06:fb00:1::1:79; 2a06:fb00:1::2:79; 2a06:fb00:1::3:79; 2a06:fb00:1::4:79; 2a0b:1640:1:3::13; // cloudns
192.135.223.10; //NS1
};
};
  • zone:域名,需要与区域文件中的域名保持一致
  • type:区域类型,主 DNS 服务器填写 master
  • file:区域文件路径,需要与区域文件实际路径保持一致
  • allow-transfer:允许传输的 IP 地址,填写 CloudNS 和 NS1 (NSONE) 提供的用于传输的 IP 地址
  • also-notify:通知的 IP 地址,用于通知 CloudNS 和 NS1 (NSONE) 更新解析记录,填写 CloudNS 和 NS1 (NSONE) 提供的用于传输的 IP 地址

重载 BIND 9 配置

检查配置文件是否正确

重载配置前需要检查配置文件是否正确,使用以下命令检查配置文件是否正确:

1
sudo named-checkconf /etc/bind/named.conf

如果配置文件正确,则不会有任何输出,如果配置文件有错误,则会输出错误信息,需要根据错误信息修改配置文件,修改完成后再次检查配置文件是否正确,直到没有错误信息为止。

检查区域文件是否正确

此外还需要检查区域文件是否正确,使用以下命令检查区域文件是否正确,请注意替换域名:

1
sudo named-checkzone yjz.hk /var/cache/bind/yjz.hk

如果区域文件正确,您将会看到如下输出:

1
2
zone yjz.hk/IN: loaded serial 2023112702
OK

如有误,请根据错误信息修改区域文件,修改完成后再次检查区域文件是否正确,直到没有错误信息为止。

重载配置

配置文件检查完成后,使用以下命令重载配置:

1
sudo systemctl reload BIND 9

检查 Slave/Secondary 区域是否正常

配置完成后,需要检查 Slave/Secondary 区域是否正常同步

CloudNS 检查 Slave/Secondary 区域是否正常同步

请点击区域控制面板中的检查 SOA,查看 SOA 记录是否和主 DNS 服务器保持一致,如下图所示:
检查 SOA

NS1 (NSONE) 检查 Slave/Secondary 区域是否正常同步

请点击区域控制面板中的ZONE SETTINGS,查看SECONDARY ZONE STATUS是否为OK,以及SERIAL是否和主 DNS 服务器保持一致,如下图所示:
SECONDARY ZONE STATUS

前往域名注册商修改域名 DNS 服务器地址

请前往域名注册商修改域名 DNS 服务器地址,地址需要与 NS 记录保持一致,具体操作方法请参考域名注册商提供的文档,这里不再赘述。使用 Vanitydns 请在完成后续配置后再修改域名 DNS 服务器地址,否则可能会遇到异常操作。

至此,相关的配置已经完成,如您不需要开启 DNSSEC、不需要使用自己的域名作为 DNS 服务器地址,那到此结束;如果你需要相关的配置,那请看后续操作;

后续操作(可选)

开启 DNSSEC

DNSSEC 是一种用于保护 DNS 服务器免受 DNS 欺骗的技术,DNSSEC 通过数字签名的方式来验证 DNS 服务器的响应是否被篡改,从而保证 DNS 服务器的响应是可信的,关于其原理,这里不再赘述。

修改 BIND 9 配置文件

配置文件路径:/etc/bind/named.conf.local,需要在原有配置文件中添加dnssec-policyinline-signing配置,添加完如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
zone "yjz.hk" {
type primary;
file "/var/cache/bind/yjz.hk";
dnssec-policy default;
inline-signing yes;
allow-transfer {
109.201.133.196; 108.62.121.219; 185.10.17.44; 185.206.180.140; 185.136.96.79;
185.136.97.79; 185.136.98.79; 185.136.99.79; 185.206.180.205; 2a00:1768:1001:9::196;
2604:9a00:2100:b000:1::1; 2a07:8dc0:19::5d:37ff:fea5:bacd; 2a0b:1640:1:1:1:1:762:9aa6;
2a06:fb00:1::1:79; 2a06:fb00:1::2:79; 2a06:fb00:1::3:79; 2a06:fb00:1::4:79; 2a0b:1640:1:3::13; // cloudns
192.135.223.10; //NS1
};
also-notify {
109.201.133.196; 108.62.121.219; 185.10.17.44; 185.206.180.140; 185.136.96.79;
185.136.97.79; 185.136.98.79; 185.136.99.79; 185.206.180.205; 2a00:1768:1001:9::196;
2604:9a00:2100:b000:1::1; 2a07:8dc0:19::5d:37ff:fea5:bacd; 2a0b:1640:1:1:1:1:762:9aa6;
2a06:fb00:1::1:79; 2a06:fb00:1::2:79; 2a06:fb00:1::3:79; 2a06:fb00:1::4:79; 2a0b:1640:1:3::13; // cloudns
192.135.223.10; //NS1
};
};

重载 BIND 9 配置

配置文件修改完成后,使用以下命令重载配置:

1
sudo systemctl reload BIND 9

当然,重载前记得按上面的方法检查配置文件是否正确哦~

获取 DNSSEC 相关信息

我们需要获取 DNSKEY 或者 DS 记录,以及 NSEC3 记录,这些记录用于在域名注册商处配置 DNSSEC,以 yjz.hk 为例,获取 DNSSKEY 和 DS 记录的命令如下:

1
2
cd /var/cache/bind
ls

通常您将会在输出中看到类似于K+域名+数字+数字.key的以 key 结尾文件,例如Kyjz.hk.+013+383xx.key,DNSKEY 记录和 DS 记录都在该文件中:

大多域名注册商目前都需要 DS 记录,但是也有少数域名注册商需要 DNSKEY 记录,建议根据实际情况选择配置 DNSKEY 记录或 DS 记录,如果您不知道域名注册商需要哪种记录,请联系域名注册商客服。

获取 DS 记录的命令如下:

1
dnsssec-dsfromkey -2 Kyjz.hk.+013+383xx.key

通常您将会看到类似于以下输出:

1
yjz.hk. IN DS 38356 13 2 25FAD7782FB5654CE99D71F8D82EC690FC1640976D306062BD118E5005xxxxxxx

将其在域名注册商配置即可,如您不会配置,可以联系域名注册商客服,将其提供给客服协助配置。

获取 DNSKEY 记录的命令如下:

1
cat Kyjz.hk.+013+383xx.key

通常您将会看到类似于以下输出:

1
2
3
4
5
6
; This is a key-signing key, keyid xxxxx, for yjz.hk.
; Created: xxxxxxxxxxxxxxxxxxx
; Publish: xxxxxxxxxxxxxxxxxxx
; Activate: xxxxxxxxxxxxxxxxxx
; SyncPublish: xxxxxxxxxxxxxxx
yjz.hk. 3600 IN DNSKEY 257 3 13 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

最后一行则为 DNSKEY 记录,将其在域名注册商配置即可,如您不会配置,可以联系域名注册商客服,将其提供给客服协助配置。

CloudNS 和 NS1 (NSONE) 都会自动从主 DNS 服务器同步 DNSSEC 相关信息,所以您无需再去手动配置。

检查 DNSSEC 是否正常

在注册商完成配置后,需要检查 DNSSEC 是否正常,您可访问:https://dnsviz.net/,输入您的域名进行检查。

使用自己的域名作为 DNS 服务器地址(Vanitydns)

创建 Glue record

如您需要使用自己的域名作为 dns 服务器,则需要在域名注册商处创建 Glue record,Glue record 是指将域名和 IP 地址绑定的记录,用于解决域名解析时的循环依赖问题,例如:域名 yjz.hk 的 NS 服务器地址为 ns1.vanitydns.com.,ns2.vanitydns.com.,ns3.vanitydns.org.,ns4.vanitydns.org.,那么在解析 yjz.hk 时,需要先解析 ns1.vanitydns.com.,ns2.vanitydns.com.,ns3.vanitydns.org.,ns4.vanitydns.org.,然后再解析 yjz.hk,这样就会出现循环依赖问题,所以我们需要在域名注册商处创建 Glue record,将 ns1.vanitydns.com.,ns2.vanitydns.com.,ns3.vanitydns.org.,ns4.vanitydns.org. 和 IP 地址绑定,这样在解析 yjz.hk 时,就可以直接解析到 ns1.vanitydns.com.,ns2.vanitydns.com.,ns3.vanitydns.org.,ns4.vanitydns.org. 的 IP 地址,从而解决循环依赖问题。

获取 Glue record 相关信息

前往注册商创建 Glue record 之前,我们需要获取 dns 服务器对应的 IP 地址:

CloudNS 获取 dns 服务器对应的 IP 地址

前往 CloudNS 区域控制面板,点击基础设置,记录下可用的名称服务器中的 IP 地址,如下图所示:
可用的名称服务器

NS1 (NSONE) 获取 dns 服务器对应的 IP 地址

NS1 没有直接提供 IP 地址,需要使用 nslookup 命令获取,以 dns1.p01.nsone.net. 为例,获取 IP 地址的命令如下:

1
nslookup dns1.p01.nsone.net.

通常您将会看到类似于以下输出:

1
2
3
4
5
6
7
8
9
rttw@zach:~$ nslookup dns1.p01.nsone.net.
Server: 192.168.0.1
Address: 192.168.0.1#53

Non-authoritative answer:
Name: dns1.p01.nsone.net
Address: 198.51.44.1
Name: dns1.p01.nsone.net
Address: 2620:4d:4000:6259:7:1:0:1

其中 Address 为 IP 地址,将其记录下来,以备后用

前往注册商创建 Glue record

以 dynadot 为例,前往域名管理控制台,点击服务器,点击注册域名服务器,填写域名和 IP 地址,如下图所示:
注册域名服务器
注册域名服务器

  • 主机名称:填写您用来提供 DNS 服务的域名,如 ns4.vanitydns.org
  • IP 地址:填写您用来提供 DNS 服务的域名对应的 IP 地址,如185.136.96.79,注意 dynadot 创建时只能填写一个 IP 地址,可在后续修改继续添加
  • 两家 DNS 服务商总共有 16 个 IP 地址(不含CloudNS免费IP),如何将这 16 个 IP 地址分散到四个 NS 服务器域名由你自己来决定,笔者的做法是 CloudNS 提供的 8 个 IP 地址,分配给了ns1.vanitydns.comns2.vanitydns.com,NS1 (NSONE) 提供的 8 个 IP 地址,分配给了ns3.vanitydns.orgns4.vanitydns.org
  • 四个 NS 服务器域名都需要注册 Glue record,否则会出现循环依赖问题。
  • 在某些注册商,Glue Record 被称为 DNS Host,如 腾讯云。

创建区域文件

创建区域文件的方法与前面创建 yjz.hk 区域文件的方法相同,此处不再赘述,以 vanitydns.org 为例,创建的区域文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ORIGIN vanitydns.org.
@ 180 IN SOA ns3.vanitydns.org. admin.vanitydns.com. 2023112702 3600 180 1209600 180
ns3 86400 IN A 198.51.44.1
ns3 86400 IN A 198.51.45.1
ns3 86400 IN A 47.107.117.38
ns4 86400 IN A 198.51.44.65
ns4 86400 IN A 198.51.45.65
ns4 86400 IN A 129.211.27.223
ns3 86400 IN AAAA 2620:4d:4000:6259:7:1:0:1
ns3 86400 IN AAAA 2a00:edc0:6259:7:1:0:0:2
ns4 86400 IN AAAA 2620:4d:4000:6259:7:1:0:3
ns4 86400 IN AAAA 2a00:edc0:6259:7:1:0:0:4
@ 86400 IN NS ns3.vanitydns.org.
@ 86400 IN NS ns4.vanitydns.org.
  • A/AAAA记录指向的 IP 需要与 Glue record 中填写的 IP 地址保持一致
  • NS 记录指向所对应的域名,需要与 Glue record 中填写的域名保持一致
  • 在创建完vanitydns.org区域文件后,也别忘以相同的办法了配置vanitydns.com区域文件,否则会出现循环依赖问题

修改 BIND 9 配置文件

配置文件路径:/etc/bind/named.conf.local,需要在原有配置文件中添加这两个新的区域文件,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
zone "vanitydns.com" {
type primary;
file "/var/named/vanitydns.com";
dnssec-policy default;
inline-signing yes;
allow-transfer {
109.201.133.196; 108.62.121.219; 185.10.17.44; 185.206.180.140; 185.136.96.79;
185.136.97.79; 185.136.98.79; 185.136.99.79; 185.206.180.205; 2a00:1768:1001:9::196;
2604:9a00:2100:b000:1::1; 2a07:8dc0:19::5d:37ff:fea5:bacd; 2a0b:1640:1:1:1:1:762:9aa6;
2a06:fb00:1::1:79; 2a06:fb00:1::2:79; 2a06:fb00:1::3:79; 2a06:fb00:1::4:79; 2a0b:1640:1:3::13; // cloudns
213.239.242.238; 213.133.105.6; 193.47.99.3; 2a01:4f8:0:a101::a:1; 2a01:4f8:d0a:2004::2; 2001:67c:192c::add:a3; //hetzner
47.107.117.38; 129.211.27.223; //CN
192.135.223.10; //NS1
};
also-notify {
109.201.133.196; 108.62.121.219; 185.10.17.44; 185.206.180.140; 185.136.96.79;
185.136.97.79; 185.136.98.79; 185.136.99.79; 185.206.180.205; 2a00:1768:1001:9::196;
2604:9a00:2100:b000:1::1; 2a07:8dc0:19::5d:37ff:fea5:bacd; 2a0b:1640:1:1:1:1:762:9aa6;
2a06:fb00:1::1:79; 2a06:fb00:1::2:79; 2a06:fb00:1::3:79; 2a06:fb00:1::4:79; 2a0b:1640:1:3::13; // cloudns
213.239.242.238; 213.133.105.6; 193.47.99.3; 2a01:4f8:0:a101::a:1; 2a01:4f8:d0a:2004::2; 2001:67c:192c::add:a3; //hetzner
47.107.117.38; 129.211.27.223; //CN
192.135.223.10; //NS1
};
};
zone "vanitydns.org" {
type primary;
file "/var/named/vanitydns.org";
dnssec-policy default;
inline-signing yes;
allow-transfer {
109.201.133.196; 108.62.121.219; 185.10.17.44; 185.206.180.140; 185.136.96.79;
185.136.97.79; 185.136.98.79; 185.136.99.79; 185.206.180.205; 2a00:1768:1001:9::196;
2604:9a00:2100:b000:1::1; 2a07:8dc0:19::5d:37ff:fea5:bacd; 2a0b:1640:1:1:1:1:762:9aa6;
2a06:fb00:1::1:79; 2a06:fb00:1::2:79; 2a06:fb00:1::3:79; 2a06:fb00:1::4:79; 2a0b:1640:1:3::13; // cloudns
192.135.223.10; //NS1
};
also-notify {
109.201.133.196; 108.62.121.219; 185.10.17.44; 185.206.180.140; 185.136.96.79;
185.136.97.79; 185.136.98.79; 185.136.99.79; 185.206.180.205; 2a00:1768:1001:9::196;
2604:9a00:2100:b000:1::1; 2a07:8dc0:19::5d:37ff:fea5:bacd; 2a0b:1640:1:1:1:1:762:9aa6;
2a06:fb00:1::1:79; 2a06:fb00:1::2:79; 2a06:fb00:1::3:79; 2a06:fb00:1::4:79; 2a0b:1640:1:3::13; // cloudns
192.135.223.10; //NS1
};
};

创建 Slave/Secondary 区域

参照前面的步骤,前往 CloudNS 和 NS1 创建 Slave/Secondary 区域,此处不再赘述。

重载 BIND 9 配置

配置文件修改完成后,使用以下命令重载配置:

1
sudo systemctl reload BIND 9

当然,重载前记得按上面的方法检查配置文件是否正确哦~

检查 Slave/Secondary 区域是否正常

参照前面的步骤,检查 Slave/Secondary 区域是否正常同步,此处不再赘述。

前往域名注册商修改域名 DNS 服务器地址

请前往域名注册商修改域名 DNS 服务器地址,地址需要与 NS 记录保持一致,具体操作方法请参考域名注册商提供的文档,这里不再赘述。

  • 注意:请分别修改vanitydns.comvanitydns.org的 DNS 服务器地址后,再去修改yjz.hk的 DNS 服务器地址,否则可能会遇到异常操作。

常见问题

  1. 看完之后感觉有点懵?
    确实,这文章写的有点不适合小白,遇到任何问题发邮件或者前往 GitHub 仓库提 issue 都可以。
  2. 更改 DNS 服务器失败?
    看起来大概是下面这样,如果你是腾讯云注册的域名,可在腾讯云域名控制台找到“技术交流群”点击扫码加群寻求帮助,其他域名服务商可以给笔者发邮件或者前往 Github 仓库提 issue。
    修改失败