我有一個網域example.com
,並使用 Azure DNS 來解析應從 Internet 上可見的所有主機名稱。我已經定義了mail.example.com
指向198.51.100.123
,外部客戶可以毫無問題地解決它。
我的 LAN 上也使用了它example.com
,並且使用綁定解析所有本機 IP 位址,這對於本機主機名稱來說效果很好。我的 DHCP 伺服器也知道如何處理此問題並正確更新區域檔案。其他區域的所有 DNS 請求都會轉送到 Cloudflare DNS。
我希望我的伺服器使用本機名稱伺服器,如果它在本機區域檔案中找不到條目,它應該聯絡 Azure 伺服器並檢查它。當我將以下條目新增至區域檔案時,它適用於這些主機名稱:
external-dns A 1.1.1.1
vpn NS external-dns
www NS external-dns
ftp NS external-dns
通配符在 Bind9 中不再起作用,因此我無法使用* NS external-dns
.有其他方法可以實現此目的嗎?
答案1
使用response-policy
區域而不是主區域example.com
當嘗試解析主機名稱時,bind 將response-policy
首先在區域文件中查找,如果沒有找到答案,它將繼續查找。
這是一個範例設定:
options {
# Your normal options
response-policy { zone "local_example_com"; };
};
zone "local_example_com" {
type master;
file "master/local_example.zone";
allow-query {none;};
};
然後新增一個名為的區域文件,master/local_example.zone
其中包含以下內容:
$TTL 24H
@ SOA LOCALHOST. named-mgr.example.com (1 1d 1h 30d 2h)
NS LOCALHOST.
host1.example.com A 192.168.1.1
host2.example.com A 192.168.1.2
host3.example.com A 192.168.1.3
host4.example.com A 192.168.1.4
當您嘗試解析時host1.example.com
,它將從該區域獲取答案response-policy
,當您嘗試解析時,mail.example.com
它將使用example.com
名稱伺服器進行解析。
答案2
通配符是不可能的,所以我決定使用不同的方法:
- 所有外部網站都託管在該
example.com
網域上。 - 所有內部網站都託管在該
int.example.com
網域上。
它example.com
沒有以任何方式改變,並且仍然可以在 Azure DNS 中使用(就像以前一樣)。內部綁定伺服器現在託管該int.example.com
網域,並且 DHCP 伺服器也更新為int.example.com
作為本地域進行推送。
我希望我的內部網站可以透過 HTTPS 訪問,因此我需要能夠使用 LetsEncrypt 為int.example.com
網域建立憑證。 LetsEncrypt 無法存取我的內部服務,因此我必須恢復到 DNS 驗證。
我將該區域新增為Azure DNS 中int.example.com
的子區域。example.com
該區域不會有任何 DNS 條目,因為我們使用本機伺服器。我們不想向外部 DNS 伺服器公開任何內部資訊。其唯一目的是 LetsEncrypt 的 DNS 驗證,因此 AcmeSh 應該具有正確的憑證來建立/刪除 TXT 記錄。我跟著本指南建立正確的憑證。我的設定使用 Azure DNS,但它應該適用於支援子區域的任何 DNS。