共用方式為


在您自己的 DNS 伺服器中使用動態 DNS 來註冊主機名稱

Azure 提供虛擬機 (VM) 和角色實例的名稱解析 。 當您的名稱解析需要超過 Azure 預設功能變數名稱系統 (DNS) 所提供的功能時,您可以提供自己的 DNS 伺服器。 使用您自己的 DNS 伺服器讓您有能力量身打造自己的 DNS 方案,來符合您特定的需求。 例如,您可能需要透過 Active Directory 域控制器存取內部部署資源。

當您的自定義 DNS 伺服器裝載為 Azure VM 時,您可以將相同虛擬網路的主機名查詢轉送至 Azure,以解析主機名。 如果您不想使用此選項,您可以使用動態 DNS (DDNS) 在 DNS 伺服器中註冊 VM 主機名。 Azure 沒有可直接在您的 DNS 伺服器中建立記錄的認證,因此通常需要有其他的安排。 本文說明一些常見的案例,以及替代方案。

Windows 用戶端

未加入網域的 Windows 用戶端會在開機或 IP 位址變更時嘗試不安全的 DDNS 更新。 DNS 名稱就是主機名稱加上主要 DNS 尾碼。 Azure 會讓主要 DNS 尾碼留白,但您可以在 VM 中透過使用者介面PowerShell 設定尾碼。

已加入網域的 Windows 用戶端會使用安全的 DDNS,向網域控制站註冊自己的 IP 位址。 網域加入程序會設定用戶端上的主要 DNS 尾碼,並建立和維護信任關係。

Linux 用戶端

Linux 用戶端通常不會在啟動時向 DNS 伺服器註冊自己。 他們假設動態主機設定通訊協定 (DHCP) 伺服器會執行此動作。 Azure DHCP 伺服器沒有認證可註冊 DNS 伺服器中的記錄。 您可以使用稱為 nsupdate 的工具,該工具隨附於繫結套件,以傳送 DDNS 更新。 由於 DDNS 通訊協定已標準化,因此即使您未在 DNS 伺服器上使用 Bind,您也能使用 nsupdate

您可以使用 DHCP 用戶端所提供的勾點,在 DNS 伺服器中建立及維護主機名稱實體。 在 DHCP 週期期間,用戶端會在 中 /etc/dhcp/dhclient-exit-hooks.d/執行腳本。 您可以使用勾點來註冊新的IP位址 nsupdate。 例如:

#!/bin/sh
requireddomain=mydomain.local

# only execute on the primary nic
if [ "$interface" != "eth0" ]
then
    return
fi

# When you have a new IP, perform nsupdate
if [ "$reason" = BOUND ] || [ "$reason" = RENEW ] ||
   [ "$reason" = REBIND ] || [ "$reason" = REBOOT ]
then
   host=`hostname`
   nsupdatecmds=/var/tmp/nsupdatecmds
     echo "update delete $host.$requireddomain a" > $nsupdatecmds
     echo "update add $host.$requireddomain 3600 a $new_ip_address" >> $nsupdatecmds
     echo "send" >> $nsupdatecmds

     nsupdate $nsupdatecmds
fi

您也可以使用 nsupdate 命令來執行安全 DDNS 更新。 例如,當您使用系結 DNS 伺服器時,會產生公開-私鑰組 (http://linux.yyz.us/nsupdate/)。 DNS 伺服器已使用金鑰的公用部分進行設定,http://linux.yyz.us/dns/ddns-server.html以便驗證要求上的簽章。 若要將金鑰組 nsupdate提供給 ,請使用 -k 要簽署的 DDNS 更新要求選項。

當您使用 Windows DNS 伺服器時,可以使用 Kerberos 驗證搭配 -g 中的 nsupdate參數,但在的 Windows 版本中 nsupdate無法使用。 若要使用 Kerberos,請使用 kinit 載入認證。 例如,您可以從keytab檔案載入認證,然後nsupdate -g從快取中挑選認證。

如有需要,您可以將 DNS 搜尋尾碼加入您的 VM。 DNS 後綴是在 檔案中 /etc/resolv.conf 指定。 大多數的 Linux 發行版會自動管理這個檔案的內容,因此通常您無法編輯該檔案。 您可以使用 DHCP 用戶端的 supersede 命令來覆寫後綴。 若要覆寫後綴,請將下列這一行新增至 /etc/dhcp/dhclient.conf 檔案:

supersede domain-name <required-dns-suffix>;