使用 bind9 建置混合 DNS(Response Policy Zone)

  1. 入手 Linksys WRT1900AC 作爲 AP,刷 DD-WRT 固件
  2. 闖入聯通定製烽火 HG220G-U(WO-36)
  3. 也許是最折騰的(隨身)迷你伺服器:計劃
  4. 也許是最折騰的(隨身)迷你伺服器:軟體
  5. 也許是最折騰的(隨身)迷你伺服器:裝機
  6. 在國科大(UCAS)宿舍配置 IPv6 穿透
  7. 斐訊 K3 上車,開啓 Telnet、刷已 Root 版官方固件和 Merlin
  8. 使用 bind9 建置混合 DNS(Response Policy Zone)
  9. 斐訊 K2T 開箱與動手艹(動手玩)
  10. Huawei B315s-936 4G LTE CPE 開箱與動手玩
  11. 透過 VLAN 從不同出口獲得 IPv4/IPv6 地址構建雙棧網路
  12. 關於半夜艹貓的這檔事:中興 ZTE ZXHN F677V2 ONT 設定橋接
  13. 修復 OpenWRT 上 Clash(OpenClash)影響 Port Forwarding 的問題
  14. 在 OpenWRT 上正確開啓網易 UU 加速器
  15. 在 Proxmox VE 上使用 LXC 建置 UU 加速器

首先解釋一下,什麼是混合 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 是相同的。但是有幾個點需要注意:

  1. 記錄名稱填寫完整的域名,但是不帶最末尾的 .
  2. 記錄類型前不寫 IN
  3. 記錄內容的域名還是需要末尾的 .
  4. 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 已經按照預期工作了。


發表於

發表在

標籤:

在〈使用 bind9 建置混合 DNS(Response Policy Zone)〉中有 2 則留言

  1. 「RichardTang」的個人頭像
    RichardTang

    请问要如何让PRZ配置文件也支持主从同步呢?

    1. 「櫻川 浅羽」的個人頭像

      RPZ 是被視爲單獨的 DNS Zone 的,其設定檔也是可以透過 zone transfer 機制在主從實例間傳送的,並不需要做額外的「支援」。當然,開啓相關的特性是需要注意一些額外的資安風險的。

      參考(可能需要查看 Web Archive):

      1. How do I create and maintain my DNS firewall policy rule set using DNS RPZ?
      2. How can I synchronize DNS RPZ firewall policies across multiple DNS servers?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

此網站使用 Akismet 以減少垃圾留言。 瞭解你留言資料會被如何處理.