Azure 虛擬網路中的資源名稱解析
Azure 可用來裝載 IaaS、PaaS 和混合式解決方案。 為了方便虛擬機器 (VM) 與虛擬網路中部署的其他資源之間的通訊,可能需要允許它們彼此通訊。 使用容易記住且未變更的名稱可簡化通訊程序,而不是依賴 IP 位址。
當虛擬網路中所部署的資源必須將網域名稱解析為內部 IP 位址時,可以使用下列四種方法的其中一種:
使用專屬 DNS 伺服器的名稱解析 (可將查詢轉送到 Azure 提供的 DNS 伺服器)
您使用的名稱解析類型取決於資源如何彼此通訊。 下表說明各種案例和對應的名稱解析解決方案:
注意
Azure DNS 私人區域是慣用的解決方案,可讓您彈性地管理 DNS 區域和記錄。 如需詳細資訊,請參閱使用私人網域的 Azure DNS。
注意
如果您使用 Azure 提供的 DNS,則會自動將適當的 DNS 尾碼套用至您的虛擬機器。 針對其他所有選項,您必須使用完整功能變數名稱 (FQDN) 或手動將適當的 DNS 尾碼套用至您的虛擬機器。
案例 | 方案 | DNS 尾碼 |
---|---|---|
相同虛擬網路內的 VM 之間或相同雲端服務的 Azure 雲端服務角色執行個體之間所進行的名稱解析。 | Azure DNS 私人區域或 Azure 提供的名稱解析 | 主機名稱或 FQDN |
不同虛擬網路的 VM 之間或不同雲端服務的角色執行個體之間所進行的名稱解析。 | Azure DNS 私人區域、Azure DNS 私人解析器或客戶管理的 DNS 伺服器將虛擬網路之間的查詢轉送供 Azure (DNS Proxy) 解析。 請參閱使用專屬 DNS 伺服器的名稱解析。 | 僅限 FQDN |
從使用虛擬網路整合的 Azure App Service (Web App、Function 或 Bot) 將名稱解析相同虛擬網路中的角色執行個體或 VM。 | Azure DNS 私人解析器或客戶管理的 DNS 伺服器,將虛擬網路之間的查詢轉送,以便 Azure (DNS Proxy) 解析。 請參閱使用專屬 DNS 伺服器的名稱解析。 | 僅限 FQDN |
從 App Service Web Apps 將名稱解析到相同虛擬網路中的 VM。 | Azure DNS 私人解析器或客戶管理的 DNS 伺服器,將虛擬網路之間的查詢轉送,以便 Azure (DNS Proxy) 解析。 請參閱使用專屬 DNS 伺服器的名稱解析。 | 僅限 FQDN |
從某個虛擬網路的 App Service Web Apps 將名稱解析到不同虛擬網路中的 VM。 | Azure DNS 私人解析器或客戶管理的 DNS 伺服器,將虛擬網路之間的查詢轉送,以便 Azure (DNS Proxy) 解析。 請參閱使用專屬 DNS 伺服器的名稱解析。 | 僅限 FQDN |
由 Azure 中的 VM 或角色執行個體解析內部部署電腦及伺服器名稱。 | Azure DNS 私人解析器或客戶管理的 DNS 伺服器 (例如,內部部署的網域控制站、本機唯讀網域控制站或使用區域傳輸同步的次要 DNS)。 請參閱使用專屬 DNS 伺服器的名稱解析。 | 僅限 FQDN |
從內部部署電腦解析 Azure 主機名稱。 | 將查詢轉送到所對應虛擬網路中客戶管理的 DNS Proxy 伺服器,Proxy 伺服器將查詢轉送給 Azure 進行解析。 請參閱使用專屬 DNS 伺服器的名稱解析。 | 僅限 FQDN |
從內部 IP 還原 DNS。 | Azure DNS 私人區域、Azure 提供的名稱解析、Azure DNS 私人解析器或使用您自有 DNS 伺服器的名稱解析。 | 不適用 |
在 VM 或角色執行個體之間解析名稱,其中的VM 或角色執行個體分屬不同的雲端服務 (而非虛擬網路)。 | 不適用。 虛擬網路外部不支援不同雲端服務中 VM 和角色執行個體之間的連線。 | 不適用 |
Azure 提供的名稱解析
Azure 提供的名稱解析只會提供基本的授權 DNS 功能。 如果您使用 Azure 提供的 DNS,Azure 會管理 DNS 區域名稱和記錄。 您無法控制 DNS 區域名稱或 DNS 記錄的生命週期。 如果您的虛擬網路需要功能完整的 DNS 解決方案,您可以使用 Azure DNS 私人區域搭配客戶管理的 DNS 伺服器或 Azure DNS 私人解析器。
除了公用 DNS 名稱的解析之外,Azure 也提供位於相同虛擬網路或雲端服務內的 VM 和角色執行個體的內部名稱解析。 雲端服務中的虛擬機器和執行個體會共用相同 DNS 尾碼,因此只要主機名稱就已足夠。 但是在使用傳統部署模型所部署的虛擬網路中,不同的雲端服務會有不同的 DNS 尾碼。 在此情況下,您需要 FQDN 才能解析不同雲端服務之間的名稱。 在使用 Azure Resource Manager 部署模型部署的虛擬網路中,DNS 尾碼在虛擬網路內的所有虛擬機器上都一致,因此不需要 FQDN。 DNS 名稱可以同時指派給 VM 和網路介面。 雖然 Azure 提供的名稱解析不需要任何設定,但它不適用於所有部署案例,如上表所詳述。
注意
使用雲端服務 Web 和背景工作角色時,您也可以使用 Azure 服務管理 REST API,存取角色執行個體的內部 IP 位址。 如需詳細資訊,請參閱服務管理 REST API 參考。 此位址是以角色名稱和執行個體數目為基礎。
功能
Azure 提供的名稱解析包含下列功能:
易於使用。 不需要組態。
高可用性。 您不需要建立和管理專屬 DNS 伺服器的叢集。
您可以使用此服務搭配您自己的 DNS 伺服器,以解析內部部署及 Azure 主機名稱。
您可以在相同雲端服務中的虛擬機器與角色執行個體之間使用名稱解析,不需要 FQDN。
您可以在使用 Azure Resource Manager 部署模型之虛擬網路中的虛擬機器之間使用名稱解析,不需要 FQDN。 當您在不同的雲端服務中解析名稱時,傳統部署模型中的虛擬網路需要 FQDN。
您可以使用最能描述部署的主機名稱,而不是使用自動產生的名稱。
考量
當您使用 Azure 提供的名稱解析時應考量的重點:
Azure 建立的 DNS 尾碼無法修改。
DNS 查閱的範圍定義為虛擬網路。 針對單一虛擬網路建立的 DNS 名稱無法從其他虛擬網路解析。
您無法手動註冊您自己的記錄。
不支援 WINS 和 NetBIOS。 您無法在 Windows 檔案總管中查看您的 VM。
主機名稱必須與 DNS 相容。 名稱只能使用 0-9、a-z 和 '-',開頭或結尾不能為 '-'。
每個 VM 的 DNS 查詢流量已經過節流。 節流不應該影響大部分的應用程式。 如果觀察到要求節流,請確定已啟用用戶端快取。 如需詳細資訊,請參閱 DNS 用戶端組態。
針對虛擬網路中的每個虛擬機器使用不同的名稱,以避免 DNS 解析問題。
只有前 180 個雲端服務中的 VM,會針對傳統部署模型中的每個虛擬網路註冊。 此限制不適用 Azure Resource Manager 中的虛擬網路。
Azure DNS IP 位址為 168.63.129.16。 此位址是靜態 IP 位址,且不會變更。
反向 DNS 考慮
在以 Azure Resource Manager 為基礎的所有虛擬網路中都支援 VM 的反向 DNS。 當您啟動 VM 時,會自動將 [vmname].internal.cloudapp.net] 格式 為 [vmname].internal.cloudapp.net 的 Azure 受控反向 DNS (PTR) 記錄新增至 DNS,並在 VM 停止時移除 (解除分配)。 請參閱下列範例:
C:\>nslookup -type=ptr 10.11.0.4
Server: UnKnown
Address: 168.63.129.16
Non-authoritative answer:
4.0.11.10.in-addr.arpa name = myeastspokevm1.internal.cloudapp.net
internal.cloudapp.net 反向 DNS 區域會由 Azure 管理,因此無法直接檢視或編輯。 格式為 [vmname].internal.cloudapp.net 的 FQDN 正向查閱,會解析為指派給虛擬機器的 IP 位址。
如果 Azure DNS 私人區域連結到具有 虛擬網路連結的虛擬網路,並在該連結上啟用自動註冊,則反向 DNS 查詢會傳回兩筆記錄。 一筆記錄的格式為 [vmname].[privatednszonename],另一筆記錄的格式為 [vmname].internal.cloudapp.net。 請參閱下列範例:
C:\>nslookup -type=ptr 10.20.2.4
Server: UnKnown
Address: 168.63.129.16
Non-authoritative answer:
4.2.20.10.in-addr.arpa name = mywestvm1.internal.cloudapp.net
4.2.20.10.in-addr.arpa name = mywestvm1.azure.contoso.com
傳回兩個 PTR 記錄時,如先前所示,則任一 FQDN 的正向查閱會傳回 VM 的 IP 位址。
反向 DNS 查閱的範圍設定為指定的虛擬網路,即使其對等互連至其他虛擬網路也一樣。 反向 DNS 查詢對等互連虛擬網路中虛擬機器的 IP 位址,將會傳回 NXDOMAIN。
注意
反向 DNS (PTR) 記錄不會儲存在正向私人 DNS 區域中。 反向 DNS 記錄會儲存在反向 DNS (in-addr.arpa) 區域中。 與 VNet 相關聯的預設反向 DNS 區域無法檢視或編輯。
您可以在虛擬網路中停用反向 DNS 功能,方法是使用 Azure DNS 私人區域來建立反向查閱區域,然後將此區域連結至您的虛擬網路。 例如,如果您虛擬網路的 IP 位址空間是 10.20.0.0/16,則您可以建立空白的私人 DNS 區域 20.10.in-addr.arpa 並將其連結到虛擬網路。 此區域會覆寫虛擬網路的預設反向查閱區域。 此區域是空的。 除非您手動建立這些項目,否則反向 DNS 會傳回 NXDOMAIN。
不支援 PTR 記錄的自動註冊。 如果您想要建立項目,請手動輸入。 您必須在虛擬網路中停用自動註冊 (如果已針對其他區域啟用)。 此限制是因為在啟用自動註冊時,只允許連結一個私人區域的限制。 如需如何建立私人 DNS 區域,並將其連結至虛擬網路的詳細資料,請參閱私人 DNS 快速入門指南。
注意
由於 Azure DNS 私人區域為全域,您可以建立反向 DNS 查閱,以跨越多個虛擬網路。 若要這樣做,請建立 Azure DNS 私人區域以進行反向查閱 (in-addr.arpa 區域),並將其連結至虛擬網路。 您將必須手動管理 VM 的反向 DNS 記錄。
DNS 用戶端設定
這一節涵蓋用戶端快取和用戶端重試。
用戶端快取
並非所有的 DNS 查詢都需要透過網路傳送。 用戶端快取可藉由解決本機快取的週期性 DNS 查詢,協助減少延遲以及改善網路標誌的恢復能力。 DNS 記錄包含存留時間 (TTL) 機制,可讓快取盡可能長時間儲存記錄而不會影響記錄的有效性。 因此,用戶端快取適用於大部分的情況。
預設 Windows DNS 用戶端有內建的 DNS 快取。 某些 Linux 發行版本預設不包含快取功能。 如果您發現還沒有本機快取,請將 DNS 快取新增至每部 Linux 虛擬機器。
有許多不同的 DNS 快取套件可用 (例如 dnsmasq)。 以下是在最常見的發行版本上安裝 dnsmasq 的方式:
RHEL (會使用 NetworkManager):
使用下列命令來安裝 dnsmasq 套件:
sudo yum install dnsmasq
使用下列命令來啟用 dnsmasq 服務:
systemctl enable dnsmasq.service
使用下列命令來啟動 dnsmasq 服務:
systemctl start dnsmasq.service
使用文字編輯器,將
prepend domain-name-servers 127.0.0.1;
新增至 /etc/dhclient-eth0.conf:使用下列命令來重新啟動網路服務:
service network restart
注意
dnsmasq 套件只是許多適用於 Linux 之 DNS 快取的其中一個。 使用它之前,請檢查特定需求的適用性,而且沒有安裝其他快取。
用戶端重試
DNS 主要是 UDP 通訊協定。 因為 UDP 通訊協定並不保證訊息傳遞,所以重試邏輯會在 DNS 通訊協定本身處理。 每個 DNS 用戶端 (作業系統) 可以展現不同的重試邏輯,根據建立者喜好設定而定:
- Windows 作業系統會在 1 秒後重試,然後再依序隔 2 秒、4 秒、再過 4 秒後重試。
- 預設 Linux 安裝程式會在 5 秒之後重試。 我們建議您將重試規格變更為 5 次,間隔為 1 秒。
請使用 cat /etc/resolv.conf
檢查 Linux VM 上的目前設定。 查看 [選項] 行,例如:
options timeout:1 attempts:5
resolv.conf 檔案已自動產生,且不應該編輯。 新增 [選項] 行的特定步驟會因發行版本而有所不同:
RHEL (會使用 NetworkManager):
使用文字編輯器,將行
RES_OPTIONS="options timeout:1 attempts:5"
新增至檔案 /etc/sysconfig/network-scripts/ifcfg-eth0。使用下列命令來重新啟動 NetworkManager 服務:
systemctl restart NetworkManager.service
使用專屬 DNS 伺服器的名稱解析
這一節涵蓋虛擬機器、角色執行個體以及 Web 應用程式。
注意
Azure DNS 私人解析器可取代在虛擬網路中使用 VM 型 DNS 伺服器的需求。 如果您想要使用 VM 型 DNS 解決方案,可參考下一節,不過使用 Azure DNS 私人解析器有許多優點,包括降低成本、內建高可用性、延展性和彈性。
VM 和角色執行個體
您的名稱解析需求可能超過 Azure 所提供的功能。 例如,您可能需要使用 Microsoft Windows Server Active Directory 網域,以在虛擬網路之間解析 DNS 名稱。 為了涵蓋這些案例,Azure 可讓您使用自己的 DNS 伺服器。
虛擬網路中的 DNS 伺服器可以將 DNS 查詢轉送給 Azure 中的遞迴解析程式。 此程序可讓您解析該虛擬網路內的主機名稱。 例如,在 Azure 中執行的網域控制站 (DC) 可以回應其網域的 DNS 查詢,並將所有其他查詢轉送到 Azure。 轉送查詢可讓虛擬機器查看您的內部部署資源 (透過 DC) 以及 Azure 提供的主機名稱 (透過轉送工具)。 在 Azure 中遞迴解析程式的存取是透過虛擬 IP 168.63.129.16 所提供。
重要
如果 VPN 閘道正在此設定中搭配 VNet 上的自訂 DNS 伺服器 IP 使用,則也必須在清單中新增 Azure DNS IP (168.63.129.16),以讓服務不中斷。
DNS 轉送也會實現虛擬網路之間的 DNS 解析,並使內部部署電腦能夠解析 Azure 提供的主機名稱。 為了解析虛擬機器的主機名稱,DNS 伺服器虛擬機器必須位於同一個虛擬網路中,且設定為將主機名稱查詢轉送到 Azure。 因為每個虛擬網路的 DNS 尾碼都不同,所以您可以使用條件性轉送規則來將 DNS 查詢傳送到正確的虛擬網路進行解析。 下圖顯示使用此方法進行虛擬網路間 DNS 解析的兩個虛擬網路及一個內部部署網路。 如需 DNS 轉寄站的範例,請參閱 Azure 快速入門範本庫和 GitHub。
注意
角色執行個體可以對相同虛擬網路內的虛擬機器執行名稱解析。 這個操作是藉由使用 FQDN (由虛擬機器的主機名稱和 internal.cloudapp.net DNS 尾碼所組成) 來完成。 不過,在此情況下,名稱解析只有在角色執行個體具有角色結構描述 (.cscfg 檔案) 中定義的 VM 名稱時才會成功。
<Role name="<role-name>" vmName="<vm-name>">
必須對其他虛擬網路 (使用 internal.cloudapp.net 尾碼的 FQDN) 中的虛擬機器執行名稱解析的角色執行個體,必須使用本節中所述的方法來執行這項操作 (在兩個虛擬網路之間轉送的自訂 DNS 伺服器)。
當您使用 Azure 提供的名稱解析時,Azure 動態主機設定通訊協定 (DHCP) 會將內部 DNS 尾碼 (.internal.cloudapp.net) 提供給每部虛擬機器。 此尾碼會啟用主機名稱解析,因為主機名稱記錄是在 internal.cloudapp.net 區域中。 當您使用自己的名稱解析解決方案時,則不會提供此尾碼給虛擬機器,因為它會干擾其他 DNS 架構 (例如在已加入網域的案例中)。 而是 Azure 會提供一個沒有作用的預留位置 (reddog.microsoft.com)。
如有需要,您可以使用 PowerShell 或 API 來判斷內部 DNS 尾碼︰
- 針對 Azure Resource Manager 部署模型中的虛擬網路,您可以透過網路介面 REST API、Get-AzNetworkInterface PowerShell Cmdlet 以及 az network nic show Azure CLI 命令來取得尾碼。
如果將查詢轉送至 Azure 不符合您的需求,請提供您自己的 DNS 解決方案,或部署 Azure DNS 私人解析器。
如果您提供自己的 DNS 解決方案,它必須:
提供適當的主機名稱解析,例如透過 DDNS。 如果您使用 DDNS,則可能需要停用 DNS 記錄清除。 Azure DHCP 租用期很長,而清除可能會提前移除 DNS 記錄。
提供適當的遞迴解析來允許外部網域名稱的解析。
可從其服務的用戶端存取 (連接埠 53 上的 TCP 和 UDP),且能夠存取網際網路。
受保護以防止來自網際網路的存取,降低外部代理程式的威脅。
注意
- 為了達到最佳效能,當您使用 Azure 虛擬機器做為 DNS 伺服器,應該停用 IPv6。
- NSG 可作為 DNS 解析器端點的防火牆。 您應該修改或覆寫 NSG 安全性規則,以允許存取 UDP 連接埠 53 (並選擇性存取 TCP 連接埠 53) 至 DNS 接聽程式端點。 在網路上設定自訂 DNS 伺服器之後,透過連接埠 53 的流量將會略過子網路的 NSG。
重要
如果您使用 Windows DNS 伺服器做為自訂 DNS 伺服器,將 DNS 要求轉送至 Azure DNS 伺服器,請確定您增加轉送逾時值超過 4 秒,以讓 Azure 遞迴 DNS 伺服器執行適當的遞迴作業。
如需此問題的詳細資訊,請參閱轉寄站和條件式轉寄站解析逾時。
此建議也適用其他 DNS 伺服器平台,其轉送逾時值為 3 秒或更少。
若未這麼做,可能會導致使用公用 IP 位址解析私人 DNS 區域記錄。
Web 應用程式
假設您需要從使用 App Service 建置之 Web 應用程式執行名稱解析,請連結至虛擬網路以及相同虛擬網路中的虛擬機器。 除了設定自訂 DNS 伺服器 (它具有可將查詢轉送至 Azure (虛擬 IP 168.63.129.16) 的 DNS 轉送工具) 以外,請執行下列步驟:
如果您的 Web 應用程式尚未與虛擬網路整合,則透過將您的應用程式與虛擬網路整合中所述加以整合。
如果您需要從 VNet 連結的 Web 應用程式 (使用 App Service 建置) 執行名稱解析為未連結至相同私人區域的不同 VNet 中的 VM,請同時在兩個 VNet 上使用自訂 DNS 伺服器或 Azure DNS 私人解析器。
若要使用自訂 DNS 伺服器:
在也可以將查詢轉送至 Azure 遞迴解析程式 (虛擬 IP 168.63.129.16) 之虛擬機器上的目標虛擬網路中設定 DNS 伺服器。 如需 DNS 轉寄站的範例,請參閱 Azure 快速入門範本庫和 GitHub。
在 VM 上的來源虛擬網路中設定 DNS 轉送工具。 設定此 DNS 轉送工具以將查詢轉送至目標虛擬網路中的 DNS 伺服器。
在來源虛擬網路的設定中設定來源 DNS 伺服器。
遵循將您的應用程式與虛擬網路整合中的指示,針對您的 Web 應用程式啟用虛擬網路整合,以連結至來源虛擬網路。
若要使用 Azure DNS 私人解析器,請參閱規則集連結。
指定 DNS 伺服器
當您使用自己的 DNS 伺服器時,Azure 可讓您為每個虛擬網路指定多個 DNS 伺服器。 您也可以對每個網路介面 (適用於 Azure Resource Manager) 或對每個雲端服務 (適用於傳統部署模型) 指定多個 DNS 伺服器。 針對網路介面或雲端服務所指定的 DNS 伺服器,優先順序高於針對虛擬網路所指定的 DNS 伺服器。
注意
網路連線屬性 (例如 DNS 伺服器 IP) 不應直接在虛擬機器內編輯。 這是因為當替換虛擬網路介面卡時,它們可能會在服務修復期間遭到清除。 這同時適用於 Windows 與 Linux VM。
當您使用 Azure Resource Manager 部署模型時,您可以針對虛擬網路和網路介面指定 DNS 伺服器。 如需詳細資訊,請參閱管理虛擬網路和管理網路介面。
注意
如果您選擇使用虛擬網路的自訂 DNS 伺服器,則必須指定至少一個 DNS 伺服器 IP 位址;否則,虛擬網路會忽略組態並改為使用 Azure 提供的 DNS。
注意
如果您變更已部署虛擬網路或虛擬機器的 DNS 設定,讓新的 DNS 設定生效,您必須在虛擬網路中所有受影響的 VM 上執行 DHCP 租用更新。 對於執行 Windows 作業系統的 VM,您可以直接在 VM 上輸入 ipconfig /renew
來執行此作業。 這些步驟會隨著作業系統而有所不同。 請參閱您作業系統類型的相關文件。
下一步
Azure Resource Manager 部署模型: