共用方式為


Anycast DNS 概觀

本主題提供 Anycast DNS 運作方式的相關資訊。

什麼是 Anycast?

Anycast 是一種技術,可為每個指派相同 IP 位址的端點群組提供多個路由路徑。 群組中的每個裝置都會在網路上公告相同的位址,並使用路由通訊協定來選擇哪一個是最佳目的地。

Anycast 可讓您調整無狀態服務,例如 DNS 或 HTTP,方法是將數個節點放在相同的 IP 位址後面,並使用相同成本的多路徑 (ECMP) 路由來引導這些節點之間的流量。 Anycast 與單點傳播不同,其中每個端點都有自己獨立的 IP 位址。

為什麼要搭配 DNS 使用 Anycast?

透過 Anycast DNS,您可以啟用 DNS 伺服器或伺服器群組,以根據 DNS 用戶端的地理位置回應 DNS 查詢。 這可以增強 DNS 回應時間,並簡化 DNS 用戶端設定。 Anycast DNS 也提供額外的備援層,並可協助防範 DNS 阻斷服務攻擊。

Anycast DNS 的運作方式

Anycast DNS 的運作方式是使用邊界閘道通訊協定 (BGP) 等路由通訊協定,將 DNS 查詢傳送至慣用的 DNS 伺服器或 DNS 伺服器群組 (例如:負載平衡器管理的 DNS 伺服器群組)。 此設計可以從最接近用戶端的 DNS 伺服器取得 DNS 回應,以最佳化 DNS 通訊。

使用 Anycast 時,存在於多個地理位置的伺服器都會向其本機閘道器(路由器)公告一個完全相同的 IP 位址。 當 DNS 用戶端起始對 Anycast 位址的查詢時,會評估可用的路由,並將 DNS 查詢傳送至慣用的位置。 一般而言,此位置是以網路拓撲為基礎的最接近位置。 請參閱下列範例。

位於不同月臺的四部 DNS 伺服器,會向網路宣告相同的 Anycast IP 位址

圖 1:範例 Anycast 網路

  • 位於網路上不同網站的四部 DNS 伺服器 (藍色圓圈),每個伺服器都會向其本機路由裝置 (未顯示) 宣佈相同的 Anycast IP 位址。
  • 路由會在網路上的裝置之間共用 (黑色箭頭)。
  • DNS 用戶端裝置 (綠色圓圈) 會將 DNS 查詢傳送至 Anycast IP 位址。
  • 用戶端的 DNS 要求是由網路上 (未顯示) 的路由裝置接收。
  • 路由裝置會分析至 Anycast IP 位址的可用路由,並使用最短的可用路由來路由 DNS 查詢。
  • DNS 查詢會傳送至最接近的 DNS 伺服器 (藍色箭頭)。

Anycast DNS 目前通常用來路由傳送許多全域 DNS 服務的 DNS 流量。 例如,根 DNS 伺服器系統會大幅依賴 Anycast DNS。 Anycast 也適用於許多不同的路由通訊協定,並可用於內部網路。

Windows Server 原生 BGP Anycast 示範

下列程序會示範 Windows Server 上的原生 BGP 如何搭配 Anycast DNS 使用。

需求

  • 已安裝 Hyper-V 角色的一個實體裝置。
    • Windows Server 2012 R2、Windows 10 或更新版本。
  • 2 個用戶端 VM (任何作業系統)。
    • 建議安裝 DNS 的 BIND 工具,例如 dig。
  • 3 部伺服器 VM (Windows Server 2016 或 Windows Server 2019)。
    • 如果伺服器 VM 上尚未安裝 Windows PowerShell LoopbackAdapter 模組 (DC001,DC002),則暫時需要網際網路存取才能安裝此模組。

Hyper-V 設定

設定 Hyper-V 伺服器,如下所示:

  • 已設定 2 個私人虛擬交換器網路
    • 模擬網際網路網路 131.253.1.0/24
    • 模擬網際網路網路 10.10.10.0/24
  • 2 個用戶端 VM 會連結至 131.253.1.0/24 網路
  • 2 個用戶端 VM 會連結至 10.10.10.0/24 網路
  • 1 部伺服器是雙主伺服器,並連結至 131.253.1.0/24 和 10.10.10.0/24 網路。

虛擬機器網路設定

使用下列設定在虛擬機器上設定網路設定:

  1. Client1、client2
  • Client1:131.253.1.1
  • Client2:131.253.1.2
  • 子網路遮罩: 255.255.255.0
  • DNS:51.51.51.51
  • 網路閘道:131.253.1.254
  1. 網路閘道 (Windows Server)
  • NIC1:131.253.1.254、子網 255.255.255.0
  • NIC2:10.10.10.254、子網 255.255.255.0
  • DNS:51.51.51.51
  • 網路閘道:131.253.1.100 (可以忽略示範)
  1. DC001 (Windows Server)
  • NIC1:10.10.10.1
  • 子網:255.255.255.0
  • DNS:10.10.10.1
  • 網路閘道:10.10.10.254
  1. DC002 (Windows Server)
  • NIC1:10.10.10.2
  • 子網 255.255.255.0
  • DNS:10.10.10.2*
  • 網路閘道:10.10.10.254

*在針對 DC002 執行網域加入時,針對 DNS 使用 10.10.10.1,讓您可以在 DC001 上找出 Active Directory 網域。

設定 DNS

使用伺服器管理員和 DNS 管理主控台或 Windows PowerShell 安裝下列伺服器角色,並在兩部伺服器上建立靜態 DNS 區域。

  1. DC001、DC002
  • 安裝 Active Directory Domain Services 並升級至網域控制站 (選用)
  • 安裝 DNS 角色 (必要)
  • 在 DC001 和 DC002 上建立名為 zone.tst 的靜態區域 (非 AD 整合式)
    • 在「TXT」類型的區域中新增單一靜態記錄名稱伺服器
    • DC001 上 TXT 記錄的資料 (text) = DC001
    • DC002 上 TXT 記錄的資料 (text) = DC002

設定回送配接器

在 DC001 和 DC002 上提升權限的 Windows PowerShell 提示字元中輸入下列命令,以設定回送配接器。

注意

Install-Module 命令需要網際網路存取。 這可以藉由暫時將 VM 指派給 Hyper-V 中的外部網路來完成。

$primary_interface = (Get-NetAdapter |?{$_.Status -eq "Up" -and !$_.Virtual}).Name
$loopback_ipv4 = '51.51.51.51'
$loopback_ipv4_length = '32'
$loopback_name = 'Loopback'
Install-Module -Name LoopbackAdapter -MinimumVersion 1.2.0.0 -Force
Import-Module -Name LoopbackAdapter
New-LoopbackAdapter -Name $loopback_name -Force
$interface_loopback = Get-NetAdapter -Name $loopback_name
$interface_main = Get-NetAdapter -Name $primary_interface
Set-NetIPInterface -InterfaceIndex $interface_loopback.ifIndex -InterfaceMetric "254" -WeakHostReceive Enabled -WeakHostSend Enabled -DHCP Disabled
Set-NetIPInterface -InterfaceIndex $interface_main.ifIndex -WeakHostReceive Enabled -WeakHostSend Enabled
Set-NetIPAddress -InterfaceIndex $interface_loopback.ifIndex -SkipAsSource $True
Get-NetAdapter $loopback_name | Set-DNSClient –RegisterThisConnectionsAddress $False
New-NetIPAddress -InterfaceAlias $loopback_name -IPAddress $loopback_ipv4 -PrefixLength $loopback_ipv4_length -AddressFamily ipv4
Disable-NetAdapterBinding -Name $loopback_name -ComponentID ms_msclient
Disable-NetAdapterBinding -Name $loopback_name -ComponentID ms_pacer
Disable-NetAdapterBinding -Name $loopback_name -ComponentID ms_server
Disable-NetAdapterBinding -Name $loopback_name -ComponentID ms_lltdio
Disable-NetAdapterBinding -Name $loopback_name -ComponentID ms_rspndr

虛擬機器路由設定

在 VM 上使用下列 Windows PowerShell 命令來設定路由。

  1. 閘道器
Install-WindowsFeature RemoteAccess -IncludeManagementTools
Install-RemoteAccess -VpnType RoutingOnly
Add-BgpRouter -BgpIdentifier “10.10.10.254” -LocalASN 8075
Add-BgpPeer -Name "DC001" -LocalIPAddress 10.10.10.254 -PeerIPAddress 10.10.10.1 -PeerASN 65511 –LocalASN 8075
Add-BgpPeer -Name "DC002" -LocalIPAddress 10.10.10.254 -PeerIPAddress 10.10.10.2 -PeerASN 65511 –LocalASN 8075
  1. DC001
Install-WindowsFeature RemoteAccess -IncludeManagementTools
Install-RemoteAccess -VpnType RoutingOnly
Add-BgpRouter -BgpIdentifier “10.10.10.1” -LocalASN 65511
Add-BgpPeer -Name "Labgw" -LocalIPAddress 10.10.10.1 -PeerIPAddress 10.10.10.254 -PeerASN 8075 –LocalASN 65511
Add-BgpCustomRoute -Network 51.51.51.0/24
  1. DC002
Install-WindowsFeature RemoteAccess -IncludeManagementTools
Install-RemoteAccess -VpnType RoutingOnly
Add-BgpRouter -BgpIdentifier "10.10.10.2" -LocalASN 65511
Add-BgpPeer -Name "Labgw" -LocalIPAddress 10.10.10.2 -PeerIPAddress 10.10.10.254 -PeerASN 8075 –LocalASN 65511
Add-BgpCustomRoute -Network 51.51.51.0/24

摘要圖表

原生 BGP Anycast DNS 示範的實驗室設定

圖 2:原生 BGP Anycast DNS 示範的實驗室設定

Anycast DNS 示範

  1. 確認閘道伺服器上的 BGP 路由

    PS C:\> Get-BgpRouteInformation

    DestinationNetwork NextHop LearnedFromPeer State LocalPref MED
    ------------------ ------- --------------- ----- --------- ---
    51.51.51.0/24 10.10.10.1 DC001 Best
    51.51.51.0/24 10.10.10.2 DC002 Best

  2. 在 client1 和 client2 上,確認您可以達到 51.51.51.51

    PS C:\> ping 51.51.51.51

    使用 32 個位元組的資料偵測 51.51.51.51:
    Reply from 51.51.51.51: bytes=32 time<1ms TTL=126
    Reply from 51.51.51.51: bytes=32 time<1ms TTL=126
    Reply from 51.51.51.51: bytes=32 time<1ms TTL=126
    Reply from 51.51.51.51: bytes=32 time<1ms TTL=126

    51.51.51.51.51 的 偵測統計資料:
    封包:傳送 = 4、接收 = 4、遺失 = 0 (0% 損失),
    大約以毫秒為單位的來回行程時間:
    最小 = 0ms、最大 = 0ms、平均 = 0ms

    注意

    如果偵測失敗,也請檢查沒有任何防火牆規則封鎖 ICMP。

  3. 在 client1 和 client2 上,使用 nslookup 或 dig 來查詢 TXT 記錄。 顯示這兩者的範例。

    PS C:\> dig server.zone.tst TXT +short
    PS C:\> nslookup -type=txt server.zone.tst 51.51.51.51

    一個用戶端會顯示「DC001」,另一個用戶端會顯示「DC002」,確認 Anycast 是否正常運作。 您也可以從閘道伺服器查詢。

  4. 接下來,停用 DC001 上的乙太網路介面卡。

    PS C:\> (Get-NetAdapter).Name
    回送
    乙太網路 2
    PS C:\> Disable-NetAdapter "Ethernet 2"
    Confirm
    您確定要執行此動作嗎?
    Disable-NetAdapter 'Ethernet 2'
    [Y] 是 [A] 全部皆是 [N] 否 [L] 全部皆否 [S] 暫停 [?] 說明 (預設值為 「Y」):
    PS C:\> (Get-NetAdapter).Status
    向上
    停用

  5. 確認先前從 DC001 接收回應的 DNS 用戶端已切換至 DC002。

    PS C:\> nslookup -type=txt server.zone.tst 51.51.51.51
    伺服器:未知
    Address: 51.51.51.51

    server.zone.tst text =

    "DC001"
    PS C:\> nslookup -type=txt server.zone.tst 51.51.51.51
    伺服器:未知
    Address: 51.51.51.51

    server.zone.tst text =

    "DC002"

  6. 使用閘道伺服器上的 Get-BgpStatistics,確認 BGP 工作階段在 DC001 上已關閉。

  7. 再次在 DC001 上啟用乙太網路介面卡,並確認 BGP 工作階段已還原,且用戶端會再次接收來自 DC001 的 DNS 回應。

注意

如果未使用負載平衡器,個別用戶端會在有可用的後端 DNS 伺服器時,使用相同的後端 DNS 伺服器。 這會為用戶端建立一致的 BGP 路徑。 如需詳細資訊,請參閱 RFC4786 的 4.4.3 節:相同成本路徑

常見問題集

問:Anycast DNS 是否適合用於內部部署 DNS 環境中?
答:Anycast DNS 可順暢地與內部部署 DNS 服務搭配運作。 不過,DNS 服務不需要調整 Anycast。

問:在具有大量網域控制站 (例如:>50) 的環境中實作 Anycast DNS 有何影響?
答:對功能沒有直接影響。 如果使用負載平衡器,則不需要網域控制站上的其他設定。

問:Microsoft 客戶服務是否支援 Anycast DNS 設定?
答:如果您使用非 Microsoft 負載平衡器轉送 DNS 查詢,Microsoft 會支援 DNS 伺服器服務的相關問題。 如需 DNS 轉送的相關問題,請參閱負載平衡器廠商。

問:任何具有大量網域控制站 (例如:>50) 的 Anycast DNS 最佳做法為何?
答:最佳做法是在每個地理位置使用負載平衡器。 負載平衡器通常是由外部廠商提供。

問:Anycast DNS 和 Azure DNS 是否有類似的功能?
答:Azure DNS 使用 Anycast。 若要搭配 Azure DNS 使用 Anycast,請將負載平衡器設定為將要求轉送至 Azure DNS 伺服器。