首先解釋一下,什麼是混合 DNS 呢?總的來說,如果自建大內網,那麼內部 DNS 是比較常用的。針對自己的域名,多數情況下如果伺服器全部在內網內部,則 DNS 會提供內部的解析,做到內網訪問,不需要再繞行公網。但是在某些情況下,域名的部分子域名是只有公網伺服器的,這個時候如果不在內部 DNS 上對應地增加記錄,那麼查詢時將解析失敗。如果不想手動維護這些在公網上,並且已經設定好公網 DNS 的解析記錄,有什麼辦法呢?在 bind 9.8+ 上可以使用 Response Policy Zone 特性。
RPZ 特性可以使內部 DNS Override 掉一部分的記錄,而使其他的記錄保持原先的設定。首先,先設定好 RPZ 的內容:
$TTL 2M
; sakuragawa.moe
@ IN SOA ns1.internal.sakuragawa.moe. ns.internal.sakuragawa.moe. (
2018032101 ; Serial
28800 ; Refresh
1800 ; Retry
1W ; Expire - 1 week
86400 ) ; Minimum
IN NS localhost.
nas.sakuragawa.moe A 192.168.1.10
sbox1.cloud.sakuragawa.moe A 192.168.1.11
sbox2.cloud.sakuragawa.moe A 192.168.1.12
ns1.sakuragawa.moe CNAME sbox1.cloud.sakuraawa.moe.
*.nas.sakuragawa.moe CNAME sbox1.cloud.sakuragawa.moe.
基本上設定與一般的 zone 是相同的。但是有幾個點需要注意:
- 記錄名稱填寫完整的域名,但是不帶最末尾的 .
- 記錄類型前不寫 IN
- 記錄內容的域名還是需要末尾的 . 的
- NS 記錄要填 localhost.,同樣也是記得末尾的 .
做完這些記得保存,這個最重要了。比如說 Fedora 下就保存在 /var/lib/named/,Debian 下是 /etc/bind/,其他系統浅羽並沒有認真用過。名字就隨便起一個比如 sakuragawa.moe.rpz 就好了。然後去設定好 zone,並且把它設定成 response-zone:
options {
....
response-zone {
zone "comm.sakuragawa";
};
};
zone "comm.sakuragawa" {
type master;
file "sakuragawa.moe.rpz";
};
這樣應該就沒問題了。這一步設定的時候,千萬千萬記得 zone 的名字不要設定成有效 TLD 的名字,否則會導致設定的 TLD 無法正確解析,而 RPZ 也不能工作。接下來重啓 bind,然後試著查詢一個:
asaba@sbox1 ~ % dig nas.sakuragawa.moe @localhost
; <<>> DiG 9.10.3-P4-Debian <<>> nas.sakuragawa.moe @localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15821
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;nas.sakuragawa.moe. IN A
;; ANSWER SECTION:
nas.sakuragawa.moe. 5 IN A 192.168.1.10
;; AUTHORITY SECTION:
comm.sakuragawa. 120 IN NS localhost.
;; ADDITIONAL SECTION:
localhost. 604800 IN A 127.0.0.1
localhost. 604800 IN AAAA ::1
;; Query time: 337 msec
;; SERVER: ::1#53(::1)
;; WHEN: Wed Mar 21 17:02:49 HKT 2018
;; MSG SIZE rcvd: 145
再來一個:
asaba@sbox1 ~ % dig asaba.sakuragawa.moe @localhost
; <<>> DiG 9.10.3-P4-Debian <<>> asaba.sakuragawa.moe @localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5335
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 13, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;asaba.sakuragawa.moe. IN A
;; ANSWER SECTION:
asaba.sakuragawa.moe. 299 IN CNAME s-n-2.cloud.sakuragawa.moe.
s-n-2.cloud.sakuragawa.moe. 299 IN CNAME us-la.tunnel.sakuragawa.moe.
us-la.tunnel.sakuragawa.moe. 299 IN A 45.77.69.250
;; AUTHORITY SECTION:
. 52046 IN NS e.root-servers.net.
. 52046 IN NS b.root-servers.net.
. 52046 IN NS j.root-servers.net.
. 52046 IN NS m.root-servers.net.
. 52046 IN NS f.root-servers.net.
. 52046 IN NS a.root-servers.net.
. 52046 IN NS c.root-servers.net.
. 52046 IN NS l.root-servers.net.
. 52046 IN NS i.root-servers.net.
. 52046 IN NS k.root-servers.net.
. 52046 IN NS d.root-servers.net.
. 52046 IN NS g.root-servers.net.
. 52046 IN NS h.root-servers.net.
;; Query time: 503 msec
;; SERVER: ::1#53(::1)
;; WHEN: Wed Mar 21 17:02:55 HKT 2018
;; MSG SIZE rcvd: 329
以上兩個域名,其中一個在 RPZ 中有定義,另一個沒有定義,但是在公網 DNS 上有。可以看到兩個域名都能正確查詢,也就是混合 DNS 已經按照預期工作了。
發佈留言