本文介紹如何使用yòng BIND 9+CloudNS+NS1 (NSONE) 搭建高可用yòng DNS 服務wù ,一般來講jiǎng ,對於高可用的場景來說shuō ,單一的de DNS 服務商提供的de DNS 服務無法滿足災備的需求qiú ,所以我們需要使用多個gè DNS 服務商來進行冗餘備份fèn ,本文將指導您使用yòng BIND 9 作爲主zhǔ DNS 服務器qì (不對外提供服務wù ),CloudNS 和hé NS1 (NSONE) 作爲從cóng DNS 服務器qì (對外提供服務wù )來搭建高可用yòng DNS 服務wù 。
本文部分內容將指導您如何使用自己的域名作爲wèi DNS 服務器地址zhǐ ,以下簡稱chēng Vanitydns,如果guǒ 您不需要實現該效果,可以按說明跳過相關步驟zhòu 。
前提條件jiàn
服務器qì /雲服務器qì :BIND 9 對配置要求不高gāo ,如您的解析記錄數量較少shǎo ,一般bān 1 核hé 1G 的服務器即可滿足需求qiú ;該服務器qì 53 端口需要對外開放fàng ,如果您使用的是雲服務器qì ,需要在雲平臺的安全組中添加jiā 53 端口的入站規則zé (TCP&UDP)。
系統環境jìng :本示例中使用的是shì Debian12
DNS 服務域名míng (Vanitydns 需要yào ):爲了實現服務的高可用性xìng ,至少需要兩個域名míng ,這兩個域名需要在不同註冊局jú &註冊商shāng (如rú .com和hé .org;騰訊雲yún 和阿里雲),以避免某家註冊商或註冊局服務出現異常cháng ,且註冊商需要支持添加jiā DNS host(Glue record)。筆者使用的是shì AWS Route53 和hé Dynadot 兩家註冊商shāng ,以及jí vanitydns.com 和hé vanitydns.org 兩個註冊局不同的域名míng 。不考慮高可用性的情況下xià ,只需要一個域名即可kě 。
DNS 服務wù 商服務(Vanitydns 需要yào ):CloudNS 需要付費服務wù ,具體費用根據您的需求而定dìng ;NS1 (NSONE) 提供免費服務wù ,但需要申請賬號hào ,若使用量超出chū NS1 (NSONE) 免費額度dù ,則需要付費fèi ,具體費用根據您的需求而定dìng 。NS1 (NSONE) 註冊賬號需要人工審覈hé ,審覈通過後才能完成註冊cè ,審覈時間一般爲wèi 1-2 個工作日rì 。
傳送門mén :
操作步驟zhòu 安裝zhuāng BIND 9 1 2 sudo apt updatesudo apt install BIND 9
BIND 9 基礎配置zhì 配置文件路徑jìng :/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 https://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; // 禁用遞歸查詢xún rate-limit { responses-per-second 500; // 速率限制zhì :每秒最多響應yīng 500次cì ,由於不對外提供服務wù ,一般不需要配置zhì }; };
如您需要記錄相關日誌zhì ,可在下面添加日誌配置zhì ,詳細配置請參考kǎo BIND 9 日誌配置zhì
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; }; };
創建域名區域文件jiàn
區域文件記錄lù 了域名的解析記錄,每個域名都需要一個區域文件jiàn ,區域文件默認可以存放在zài /var/cache/bind
目錄下xià ,也可以自定義存放路徑jìng ,本示例中使用的是默認路徑jìng ,區域文件無特殊命名規則zé ,可以使用域名míng 作爲文件名(不需要指定後綴zhuì ),或使用yòng .txt/.zones/.zone/.db 等作爲後綴zhuì ,本文未指定後綴zhuì 。
此處以yǐ yjz.hk 爲例lì ,在zài /var/cache/bind
下創建jiàn yjz.hk 的區域文件jiàn ,文件名爲wèi 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:默認rèn TTL,如果某條記錄沒有指定dìng TTL,則使用默認rèn TTL
$ORIGIN:域名míng ,如果某條記錄沒有指定域名míng ,則使用yòng $ORIGIN
@:代表域名本身shēn ,如rú yjz.hk
IN:代表biǎo Internet
SOA:Start of Authority,域名的權威記錄lù ,每個gè 域名只能有一個 SOA 記錄lù ,其中zhōng ns1.example.com. 代表主名稱服務器qì ,hostmaster.example.com. 代表域名管理員郵箱地址zhǐ ,2023112701 代表序列號hào ,1h 代表刷新時間jiān ,3m 代表重試時間jiān ,2w 代表過期時間jiān ,1m 代表最小xiǎo TTL。注意yì :在zài zone 文件中zhōng ,所有完整的域名後面都需要加上一個點diǎn ,如rú ns1.example.com.,否則會自動加上shàng $ORIGIN,變成chéng ns1.example.com.yjz.hk;此外序列號在每次修改gǎi zone 文件後都需要遞增zēng ,否則從cóng DNS 服務器無法同步獲取到最新的解析記錄lù 。
NS:Name Server,域名服務器qì ,每個gè 域名至少需要兩個 NS 記錄lù ,如果您未使用yòng Vanitydns,請配置zhì CloudNS和hé NS1 (NSONE) 提供的de NS 服務器地址zhǐ (建議總共不超過guò 4 個gè ,每家各配置兩個gè ,後面會教大家如何獲取兩家提供的de NS,這裏隨便寫兩個域名即可kě ,如rú pns41.cloudns.net., pns42.cloudns.net., dns1.p01.nsone.net., dns2.p01.nsone.net.),如果您使用了le Vanitydns,請配置您用來提供gōng DNS 服務的de NS 服務器地址zhǐ ,如rú ns1.vanitydns.com.,ns2.vanitydns.com.,ns3.vanitydns.org.,ns4.vanitydns.org.。
A:Address,IPv4 地址zhǐ ,如果您的域名需要解析xī IPv4 地址zhǐ ,請添加jiā A 記錄lù 。
AAAA:IPv6 地址zhǐ ,如果您的域名需要解析xī IPv6 地址zhǐ ,請添加jiā AAAA 記錄lù 。
創建jiàn Slave/Secondary 區域yù
Slave/Secondary 區域是指從cóng DNS 服務器qì ,它從主zhǔ DNS 服務器獲取域名的解析記錄lù ,然後提供給客戶端duān ,本示例中使用的是shì CloudNS 和hé NS1 (NSONE) 作爲wèi Slave/Secondary 區域yù ,BIND 9 作爲主zhǔ DNS 服務器qì ,所以需要在zài CloudNS 和hé NS1 (NSONE) 上創建jiàn Slave/Secondary 區域yù 。
CloudNS 創建jiàn Slave/Secondary 區域yù
登錄lù CloudNS 管理控制檯tái ,點擊jī 創建區域
選擇zé 備用域
填寫域名和主zhǔ DNS 服務器地址zhǐ ,主zhǔ DNS 服務器地址填寫xiě BIND 9 服務器的de IP 地址zhǐ
點擊jī 創建
,完成創建jiàn
創建完成後點擊頁面的de 基礎設置
記錄下用於傳輸的de IP 地址zhǐ ,後面配置zhì BIND 9 區域文件時需要用到dào
CloudNS 的de NS 服務器地址可在控制面板bǎn 可用的名稱服務器查看
NS1 (NSONE) 創建jiàn Slave/Secondary 區域yù
登錄lù NS1 (NSONE) 管理控制檯tái ,點擊jī +
填寫域名並選擇zé Secondary Zone
,主zhǔ DNS 服務器地址填寫xiě BIND 9 服務器的de IP 地址zhǐ
點擊jī Save Zone
,完成創建jiàn
請注意yì ,NS1 域名內需要填寫xiě FQDN,即需要填寫完整的域名míng ,如rú yjz.hk.,而不是shì yjz.hk
NS1 (NSONE) 用於yú AXFR/IXFR傳輸的de IP 地址爲wèi 192.135.223.10
NS1 (NSONE) 的輔助zhù DNS 服務器地址可在區域控制面板中的de Name Servers
查看kàn
修改域名區域文件中的de DNS 服務器地址zhǐ 至此我們已經獲取到了兩家廠商的de NS 服務器地址zhǐ ,需要根據實際獲取到的de 地址修改區域文件中的 NS 記錄和hé SOA 記錄lù ,以yǐ yjz.hk 爲例lì ,修改後的de SOA 和hé NS 記錄如下xià :
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.
如果您使用的是shì Vanitydns,請將上面的de NS 記錄修改爲您用來提供gōng DNS 服務的de NS 服務器地址zhǐ ,如rú ns1.vanitydns.com.,ns2.vanitydns.com.,ns3.vanitydns.org.,ns4.vanitydns.org.,SOA 記錄中的主名稱服務器也需要修改爲您用來提供gōng DNS 服務的de NS 服務器地址zhǐ ,如rú ns1.vanitydns.com.。
配置zhì BIND 9 加載區域文件jiàn 配置文件路徑jìng :/etc/bind/named.conf.local
,在原有配置的基礎上添加以下內容róng :
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:域名míng ,需要與區域文件中的域名保持一致zhì
type:區域類型xíng ,主zhǔ DNS 服務器填寫xiě master
file:區域文件路徑jìng ,需要與區域文件實際路徑保持一致zhì
allow-transfer:允許傳輸的de IP 地址zhǐ ,填寫xiě CloudNS 和hé NS1 (NSONE) 提供的de 用於傳輸的 IP 地址zhǐ
also-notify:通知的de IP 地址zhǐ ,用於通知zhī CloudNS 和hé NS1 (NSONE) 更新解析記錄lù ,填寫xiě CloudNS 和hé NS1 (NSONE) 提供的de 用於傳輸的 IP 地址zhǐ
重載zài BIND 9 配置zhì 檢查配置文件是否正確què 重載配置前需要檢查配置文件是否正確què ,使用以下命令檢查配置文件是否正確què :
1 sudo named-checkconf /etc/bind/named.conf
如果配置文件正確què ,則不會有任何輸出chū ,如果配置文件有錯誤wù ,則會輸出錯誤信息xī ,需要根據錯誤信息修改配置文件jiàn ,修改完成後再次檢查配置文件是否正確què ,直到沒有錯誤信息爲止zhǐ 。
檢查區域文件是否正確què 此外還需要檢查區域文件是否正確què ,使用以下命令檢查區域文件是否正確què ,請注意替換域名míng :
1 sudo named-checkzone yjz.hk /var/cache/bind/yjz.hk
如果區域文件正確què ,您將會看到如下輸出chū :
1 2 zone yjz.hk/IN: loaded serial 2023112702 OK
如有誤wù ,請根據錯誤信息修改區域文件jiàn ,修改完成後再次檢查區域文件是否正確què ,直到沒有錯誤信息爲止zhǐ 。
重載配置zhì 配置文件檢查完成後hòu ,使用以下命令重載配置zhì :
1 sudo systemctl reload BIND 9
檢查chá Slave/Secondary 區域是否正常cháng 配置完成後hòu ,需要檢查chá Slave/Secondary 區域是否正常同步bù
CloudNS 檢查chá Slave/Secondary 區域是否正常同步bù 請點擊區域控制面板中的de 檢查 SOA
,查看kàn SOA 記錄是否和主zhǔ DNS 服務器保持一致zhì ,如下圖所示shì :
NS1 (NSONE) 檢查chá Slave/Secondary 區域是否正常同步bù 請點擊區域控制面板中的de ZONE SETTINGS
,查看kàn SECONDARY ZONE STATUS
是否爲wèi OK
,以及jí SERIAL
是否和主zhǔ DNS 服務器保持一致zhì ,如下圖所示shì :
前往域名míng 註冊商修改域名 DNS 服務器地址zhǐ 請前往域名míng 註冊商修改域名 DNS 服務器地址zhǐ ,地址需要與yǔ NS 記錄保持一致zhì ,具體操作方法請參考域名註冊商提供的文檔dàng ,這裏不再贅述shù 。使用yòng Vanitydns 請在完成後續配置後再修改域名míng DNS 服務器地址zhǐ ,否則可能會遇到異常操作zuò 。
至此cǐ ,相關的配置已經完成chéng ,如您不需要開啓qǐ DNSSEC、不需要使用自己的域名作爲wèi DNS 服務器地址zhǐ ,那到此結束shù ;如果你需要相關的配置zhì ,那請看後續操作zuò ;
後續操作zuò (可選xuǎn ) 開啓qǐ DNSSEC DNSSEC 是一種用於保護hù DNS 服務器免受shòu DNS 欺騙的技術shù ,DNSSEC 通過數字簽名的方式來驗證zhèng DNS 服務器的響應是否被篡改gǎi ,從而保證zhèng DNS 服務器的de 響應是可信的,關於其原理lǐ ,這裏不再贅述shù 。
修改gǎi BIND 9 配置文件jiàn 配置文件路徑jìng :/etc/bind/named.conf.local,需要在原有配置文件中添加jiā dnssec-policy
和hé inline-signing
配置zhì ,添加完如下所示shì :
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 }; };
重載zài BIND 9 配置zhì 配置文件修改完成後hòu ,使用以下命令重載配置zhì :
1 sudo systemctl reload BIND 9
當然rán ,重載前記得按上面的方法檢查配置文件是否正確哦ó ~
獲取qǔ DNSSEC 相關信息xī 我們需要獲取qǔ DNSKEY 或者zhě DS 記錄lù ,以及jí NSEC3 記錄lù ,這些記錄用於在域名註冊商處配置zhì DNSSEC,以yǐ yjz.hk 爲例lì ,獲取qǔ DNSSKEY 和hé DS 記錄的命令如下xià :
通常您將會在輸出中看到類似於yú K+域名+數字+數字.key
的以yǐ key 結尾文件jiàn ,例如rú Kyjz.hk.+013+383xx.key
,DNSKEY 記錄和hé DS 記錄都在該文件中zhōng :
大多域名註冊商目前都需要yào DS 記錄lù ,但是也有少數域名註冊商需要yào DNSKEY 記錄lù ,建議根據實際情況選擇配置zhì DNSKEY 記錄或huò DS 記錄lù ,如果您不知道域名註冊商需要哪種記錄lù ,請聯繫域名註冊商客服fú 。
獲取qǔ DS 記錄的命令如下xià :
1 dnsssec-dsfromkey -2 Kyjz.hk.+013+383xx.key
通常您將會看到類似於以下輸出chū :
1 yjz.hk. IN DS 38356 13 2 25FAD7782FB5654CE99D71F8D82EC690FC1640976D306062BD118E5005xxxxxxx
將其在域名註冊商配置即可kě ,如您不會配置zhì ,可以聯繫域名註冊商客服fú ,將其提供給客服協助配置zhì 。
獲取qǔ DNSKEY 記錄的命令如下xià :
1 cat Kyjz.hk.+013+383xx.key
通常您將會看到類似於以下輸出chū :
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
最後一行則爲wèi DNSKEY 記錄lù ,將其在域名註冊商配置即可kě ,如您不會配置zhì ,可以聯繫域名註冊商客服fú ,將其提供給客服協助配置zhì 。
CloudNS 和hé NS1 (NSONE) 都會自動從主zhǔ DNS 服務器同步bù DNSSEC 相關信息xī ,所以您無需再去手動配置zhì 。
檢查chá DNSSEC 是否正常cháng 在註冊商完成配置後hòu ,需要檢查chá DNSSEC 是否正常cháng ,您可訪問wèn :https://dnsviz.net/,輸入您的域名進行檢查chá 。
使用自己的域名作爲wèi DNS 服務器地址zhǐ (Vanitydns) 創建jiàn Glue record
如您需要使用自己的域名作爲wèi dns 服務器qì ,則需要在域名註冊商處創建jiàn Glue record,Glue record 是指將域名和hé IP 地址綁定的記錄lù ,用於解決域名解析時的循環依賴問題tí ,例如rú :域名míng yjz.hk 的de NS 服務器地址爲wèi ns1.vanitydns.com.,ns2.vanitydns.com.,ns3.vanitydns.org.,ns4.vanitydns.org.,那麼在解析xī yjz.hk 時shí ,需要先解析xī ns1.vanitydns.com.,ns2.vanitydns.com.,ns3.vanitydns.org.,ns4.vanitydns.org.,然後再解析xī yjz.hk,這樣就會出現循環依賴問題tí ,所以我們需要在域名註冊商處創建jiàn Glue record,將jiāng ns1.vanitydns.com.,ns2.vanitydns.com.,ns3.vanitydns.org.,ns4.vanitydns.org. 和hé IP 地址綁定dìng ,這樣在解析xī yjz.hk 時shí ,就可以直接解析到dào ns1.vanitydns.com.,ns2.vanitydns.com.,ns3.vanitydns.org.,ns4.vanitydns.org. 的de IP 地址zhǐ ,從而解決循環依賴問題tí 。
獲取qǔ Glue record 相關信息xī 前往註冊商創建jiàn Glue record 之前qián ,我們需要獲取qǔ dns 服務器對應的de IP 地址zhǐ :
CloudNS 獲取qǔ dns 服務器對應的de IP 地址zhǐ 前往wǎng CloudNS 區域控制面板bǎn ,點擊jī 基礎設置
,記錄下xià 可用的名稱服務器
中的de IP 地址zhǐ ,如下圖所示shì :
NS1 (NSONE) 獲取qǔ dns 服務器對應的de IP 地址zhǐ NS1 沒有直接提供gōng IP 地址zhǐ ,需要使用yòng nslookup 命令獲取qǔ ,以yǐ dns1.p01.nsone.net. 爲例lì ,獲取qǔ IP 地址的命令如下xià :
1 nslookup dns1.p01.nsone.net.
通常您將會看到類似於以下輸出chū :
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
其中zhōng Address 爲wèi IP 地址zhǐ ,將其記錄下來lái ,以備後用yòng
前往註冊商創建jiàn Glue record 以yǐ dynadot 爲例lì ,前往域名管理控制檯tái ,點擊jī 服務器
,點擊jī 註冊域名服務器
,填寫域名和hé IP 地址zhǐ ,如下圖所示shì :
主機名稱chēng :填寫您用來提供gōng DNS 服務的域名míng ,如rú ns4.vanitydns.org
IP 地址zhǐ :填寫您用來提供gōng DNS 服務的de 域名對應的 IP 地址zhǐ ,如rú 185.136.96.79
,注意yì dynadot 創建時只能填寫一個gè IP 地址zhǐ ,可在後續修改繼續添加jiā
兩家jiā DNS 服務商總共有yǒu 16 個gè IP 地址zhǐ (不含hán CloudNS免費fèi IP),如何將這zhè 16 個gè IP 地址分散到四個gè NS 服務器域名由你自己來決定dìng ,筆者的做法是shì CloudNS 提供的de 8 個gè IP 地址zhǐ ,分配給了le ns1.vanitydns.com
和hé ns2.vanitydns.com
,NS1 (NSONE) 提供的de 8 個gè IP 地址zhǐ ,分配給了le ns3.vanitydns.org
和hé ns4.vanitydns.org
。
四個gè NS 服務器域名都需要註冊cè Glue record,否則會出現循環依賴問題tí 。
在某些註冊商shāng ,Glue Record 被稱爲wèi DNS Host,如rú 騰訊雲yún 。
創建區域文件jiàn 創建jiàn 區域文件的方法與前面創建 yjz.hk 區域文件的方法相同tóng ,此處不再贅述shù ,以yǐ vanitydns.org 爲例lì ,創建的區域文件如下xià :
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記錄指向的de IP 需要與yǔ Glue record 中填寫的de IP 地址保持一致zhì
NS 記錄指向所對應的域名míng ,需要與yǔ Glue record 中填寫的域名保持一致zhì
在創建完wán vanitydns.org
區域文件後hòu ,也別忘以相同的辦法了配置zhì vanitydns.com
區域文件jiàn ,否則會出現循環依賴問題tí
修改gǎi BIND 9 配置文件jiàn 配置文件路徑jìng :/etc/bind/named.conf.local
,需要在原有配置文件jiàn 中添加這兩個新的區域文件,如下所示shì :
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 }; };
創建jiàn Slave/Secondary 區域yù 參照前面的步驟zhòu ,前往wǎng CloudNS 和hé NS1 創建jiàn Slave/Secondary 區域yù ,此處不再贅述shù 。
重載zài BIND 9 配置zhì 配置文件修改完成後hòu ,使用以下命令重載配置zhì :
1 sudo systemctl reload BIND 9
當然rán ,重載前記得按上面的方法檢查配置文件是否正確哦ó ~
檢查chá Slave/Secondary 區域是否正常cháng 參照前面的步驟zhòu ,檢查chá Slave/Secondary 區域是否正常同步bù ,此處不再贅述shù 。
前往域名míng 註冊商修改域名 DNS 服務器地址zhǐ 請前往域名míng 註冊商修改域名 DNS 服務器地址zhǐ ,地址需要與yǔ NS 記錄保持一致zhì ,具體操作方法請參考域名註冊商提供的文檔dàng ,這裏不再贅述shù 。
注意yì :請分別修改gǎi vanitydns.com
和hé vanitydns.org
的de DNS 服務器地址後hòu ,再去修改gǎi yjz.hk
的de DNS 服務器地址zhǐ ,否則可能會遇到異常操作zuò 。
常見問題tí
看完之後感覺有點懵měng ? 確實shí ,這文章寫的有點不適合小白bái ,遇到任何問題發郵件或者前往wǎng GitHub 倉庫kù 提tí issue 都可以yǐ 。
更改gǎi DNS 服務器失敗bài ? 看起來大概是下面這樣yàng ,如果你是騰訊雲註冊的域名míng ,可在騰訊雲域名控制檯找到dào “技術交流羣qún ”點擊掃碼加羣尋求幫助zhù ,其他域名服務商可以給筆者發郵件或者前往wǎng Github 倉庫kù 提tí issue。