Domain-Name-System

如何根據源子網解析不同的 DNS 條目?

  • January 24, 2020

我在多個站點中有一個新的內部網站,我希望根據使用的源子網將 fqdn 解析為站點特定的子域。我們的綁定 DNS 目前設置的方式是 fqdn 解析是站點 a 中的主站點,並從屬於站點 b 和 c(均通過 puppet),因此我無法在站點 b 和 c 中設置單獨的記錄文件並使用不同的答案來執行此操作。

例如,我希望站點 a 172.10.0.0/16 中的 IP 將 server.domain.com 解析為 server.a.domain.com,站點 b 172.11.0.0/16 中的 IP 將 server.domain.com 解析為伺服器。 b.domain.com 等

我一直在研究 Bind RPZ,但這似乎沒有為子網提供特定的解析選項,只有刪除或阻止整個子網的能力,除非我讀錯了。我可以讓它工作以重定向 cname 而不是轉發到正確的區域進行解析,但這通常適用於所有不使用客戶端 IP 觸發器的伺服器,就像我嘗試使用的那樣,我還不如更新 CNAME在 domain.com 區域中。

添加到 name.d.conf.options

response-policy { zone "rpz"; };

rpz 區域文件

zone "rpz" {
 type master;
 file "/etc/named/zones/rpz/db.rpz.conf";
 allow-query { none; };
};

數據庫文件

@       IN    SOA  nstest.domain.com. domain.com.  (
                     2   ; serial
                     3H  ; refresh
                     1H  ; retry
                     1W  ; expiry
                     1H) ; minimum

@        IN    NS    nstest.domain.com. ; destination IP rewrite

16.0.0.16.172.rpz-ip CNAME server.domain.com.
server.domain.com     CNAME   server.a.domain.com.

使用這些設置,所有通過此 ns 對 server.domain.com 的請求,無論源 IP 解析為 server.a.domain.com

或者試圖為此使用錯誤的方法,我在研究中也看到了綁定視圖,但是看起來你必須為每個站點重新創建整個區域文件,我只想修改一個 CNAME 記錄.

任何幫助表示讚賞。

  • 位置 B 的專用伺服器

在這種情況下,您可以輕鬆使用 RPZ。該解決方案甚至可以在非標準埠上執行此 DNS 伺服器(因此除 53 TCP/UDP 之外)並在防火牆級別設置埠重定向,因此一旦請求來自特定網路,它就會被重定向到此埠。所有其他請求將由標準埠上的 DNS 伺服器處理(因為“全域”RPZ 是問題,我想其他流量也需要 DNS 伺服器)。

  • “共享” DNS 伺服器不僅適用於位置 B

The Views 最有可能是您的正確方向。如果您不需要明確的 CNAME 但它甚至可以是 A 記錄,您可以輕鬆地在視圖中定義“特定子域”,其餘的保持“正常”解析/轉發到其他 DNS 伺服器”。

因此,假設您在位置 A 的 DNS 伺服器上有域example.com。存在server.example.com通常解析為 192.0.2.10 的 A 記錄。還有另一條記錄another.example.com解析為值為 192.0.2.20 的 A。

然後,您在本地(位置 B)的某個地方為某些本地客戶端解析了綁定伺服器。您可以為特定客戶端(位置 B 上的本地 IP)創建本地視圖,您可以在其中創建域server.example.com

@       IN    SOA  dns.example.com. admin.example.com.  (
                     2   ; serial
                     3H  ; refresh
                     1H  ; retry
                     1W  ; expiry
                     1H) ; minimum

@        IN    NS    dns.example.com ; destination IP rewrite

@        IN    A     192.0.2.30

一旦客戶端將發送對 server.example.com 的請求,它將在本地解析為本地“主”區域。一旦客戶端將請求其他任何內容(server.example.com 的子域除外),它將根據其他配置進行定期解析或轉發……

所以在位置 A 上,結果將是:

server.example.com => 192.0.2.10
another.example.com => 192.0.2.20

在位置 B 它將是:

server.example.com => 192.0.2.30
another.example.com => 192.0.2.20

這樣您就可以只覆蓋子域的顯式列表。缺點是因為它是額外區域,所以必須至少有 SOA 和最有可能的 NS 記錄,因此在這種情況下不可能使用 CNAME。

引用自:https://serverfault.com/questions/1000097