當本地不符時如何將本地區域的 DNS 請求轉送到外部 DNS (BIND9)

當本地不符時如何將本地區域的 DNS 請求轉送到外部 DNS (BIND9)

我有一個網域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

通配符是不可能的,所以我決定使用不同的方法:

  1. 所有外部網站都託管在該example.com網域上。
  2. 所有內部網站都託管在該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。

相關內容