使用 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 已經按照預期工作了。

Comments

在〈使用 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?

Mentions

  • 櫻川 浅羽
  • RichardTang

發佈留言

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.

To respond on your own website, enter the URL of your response which should contain a link to this post’s permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post’s URL again. (Find out more about Webmentions.)