次の方法で共有


エニーキャスト DNS の概要

適用対象: Windows Server 2022、Windows Server 2016、Windows Server 2019

このトピックでは、エニーキャスト DNS のしくみについて説明します。

エニーキャストとは

エニーキャストは、それぞれ同じ IP アドレスが割り当てられているエンドポイントのグループに複数のルーティング パスを提供するテクノロジです。 グループ内の各デバイスはネットワーク上で同じアドレスをアドバタイズし、ルーティング プロトコルを使用して最適な宛先を選択します。

エニーキャストを使用すると、同じ IP アドレスの背後に複数のノードを配置し、等コスト マルチパス (ECMP) ルーティングを使用してこれらのノード間のトラフィックを転送することで、DNS や HTTP などのステートレス サービスをスケーリングできます。 エニーキャストは、各エンドポイントが独自の個別の IP アドレスを持つユニキャストとは異なります。

DNS でエニーキャストを使用する理由

エニーキャスト DNS を使用すると、DNS サーバーまたはサーバーのグループを有効にして、DNS クライアントの地理的な場所に基づいて DNS クエリに応答できます。 これにより、DNS 応答時間が向上し、DNS クライアント設定が簡素化されます。 また、エニーキャスト DNS は冗長性の層を追加し、DNS サービス拒否 (DoS) 攻撃からの保護に役立ちます。

エニーキャスト DNS のしくみ

エニーキャスト DNS は、Border Gateway Protocol (BGP) などのルーティング プロトコルを使用して、DNS クエリを優先 DNS サーバーまたは DNS サーバーのグループ (ロード バランサーによって管理される DNS サーバーのグループなど) に送信することで機能します。 この設計では、クライアントに最も近い DNS サーバーから DNS 応答を取得することで、DNS 通信を最適化できます。

エニーキャストでは、地理的に離れた複数の場所に存在するサーバーは、それぞれ 1 つの同一の IP アドレスをローカル ゲートウェイ (ルーター) にアドバタイズします。 DNS クライアントがエニーキャスト アドレスに対するクエリを開始すると、使用可能なルートが評価され、優先される場所に DNS クエリが送信されます。 一般に、この場所はネットワーク トポロジに基づいて最も近い場所です。 次の例を参照してください。

Four DNS servers, located at different sites, announce the same Anycast IP address to the network

図 1: Anycast ネットワークの例

  • ネットワーク上の異なるサイトにある 4 つの DNS サーバー (青い円) は、それぞれが同じ Anycast IP アドレスをローカル ルーティング デバイスに読み上げます (図示されません)。
  • ルートは、ネットワーク上のデバイス間で共有されます (黒い矢印)。
  • DNS クライアント デバイス (緑の円) は、Anycast IP アドレスに DNS クエリを送信します。
  • クライアントの DNS 要求は、ネットワーク上のルーティング デバイスによって受信されます (図示されません)。
  • ルーティング デバイスは、使用可能なルートを Anycast IP アドレスに分析し、使用可能な最短のルートを使用して DNS クエリをルーティングします。
  • DNS クエリは、最も近い DNS サーバー (青い矢印) に送信されます。

現在、エニーキャスト DNS は、多くのグローバル DNS サービスに DNS トラフィックをルーティングするために一般的に使用されています。 たとえば、ルート DNS サーバー システムは、エニーキャスト DNS に大きく依存しています。 Anycast は、さまざまなルーティング プロトコルでも機能し、イントラネットでのみ使用できます。

Windows Server ネイティブ BGP エニーキャストのデモ

次の手順では、Windows Server 上のネイティブ BGP をエニーキャスト DNS とともに使用する方法を示します。

要件

  • Hyper-V の役割がインストールされている 1 つの物理デバイス。
    • Windows Server 2012 R2、Windows 10、またはそれ以降。
  • 2 つのクライアント VM (任意のオペレーティング システム)。
    • DIG などの DNS 用の BIND ツールのインストールをお勧めします。
  • 3 つのサーバー VM (Windows Server 2016 または Windows Server 2019)。
    • Windows PowerShell LoopbackAdapter モジュールがまだサーバー VM (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 を使用して、次のサーバーの役割をインストールし、2 つの各サーバーに静的 DNS ゾーンを作成します。

  1. DC001、DC002
  • ドメイン Active Directory Domain Services をインストールして、ドメイン コントローラーに昇格する (省略可能)
  • DNS の役割をインストールする (必須)
  • DC001 と DC002 の両方に zone.tst という名前の静的ゾーン (非 AD 統合) を作成する
    • "TXT" タイプのゾーンに単一の静的レコード ネーム サーバーを追加する
    • DC001 = DC001 の TXT レコードのデータ (テキスト)
    • DC002 = DC002 の TXT レコードのデータ (テキスト)

ループバック アダプターを構成する

DC001 と DC002 の昇格した Windows PowerShell プロンプトで、以下のコマンドを入力し、ループバック アダプターを構成します。

注意

Install-Module コマンドにはインターネット アクセスが必要です。 これは、HYPER-V の外部ネットワークに VM を一時的に割り当てることで実行できます。

$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. Gateway
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

概要図

Lab setup for native BGP Anycast DNS demo

図 2: ネイティブ BGP エニーキャスト DNS デモのラボ セットアップ

エニーキャスト 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 に ping を実行します。
    51.51.51.51 からの応答: bytes=32 time<1ms TTL=126
    51.51.51.51 からの応答: bytes=32 time<1ms TTL=126
    51.51.51.51 からの応答: bytes=32 time<1ms TTL=126
    51.51.51.51 からの応答: bytes=32 time<1ms TTL=126

    51.51.51.51 の ping 統計:
    送信 = 4、受信 = 4、損失 = 0 (0% 損失)、
    おおよそのラウンド トリップ時間 (ミリ秒単位):
    最小 = 0ms、最大 = 0ms、平均 = 0ms

    注意

    ping が失敗した場合は、ICMP をブロックしているファイアウォール ルールがないことも確認します。

  3. client1 と client2 で、nslookup または掘り下げを使用して TXT レコードのクエリを実行します。 両方の例を示します。

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

    1 つのクライアントで「DC001」が表示され、もう 1 つのクライアントに「DC002」と表示され、Anycast が正常に動作していることを確認します。 ゲートウェイ サーバーからクエリを実行することもできます。

  4. 次に、DC001 でイーサネット アダプターを無効にします。

    PS C:\> (Get-NetAdapter).Name
    ループバック
    イーサネット 2
    PS C:\> Disable-NetAdapter "Ethernet 2"
    確認
    この操作を実行しますか?
    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
    サーバー: 不明
    アドレス: 51.51.51.51

    server.zone.tst text =

    "DC001"
    PS C:\> nslookup -type=txt server.zone.tst 51.51.51.51
    サーバー: 不明
    アドレス: 51.51.51.51

    server.zone.tst text =

    "DC002"

  6. ゲートウェイ サーバーで Get-BgpStatistics を使用して、DC001 で BGP セッションが停止していることを確認します。

  7. DC001 でもう一度イーサネット アダプターを有効にし、BGP セッションが復元されたことと、クライアントが DC001 から再び DNS 応答を受信することを確認します。

Note

ロード バランサーが使用されていない場合、個々のクライアントは、使用可能な場合は同じバックエンド DNS サーバーを使用します。 これにより、クライアントの一貫性のある BGP パスが作成されます。 詳細については、RFC4786 のセクション 4.4.3「Equal-Cost Paths」を参照してください。

よく寄せられる質問

Q: エニーキャスト DNS はオンプレミスの DNS 環境で使用するのに適したソリューションですか。
A: エニーキャスト DNS は、オンプレミスの DNS サービスとシームレスに連携します。 ただし、Anycast は DNS サービスをスケーリングするために 必要 ではありません。

Q: ドメイン コントローラーの数が多い (例: > 50) 環境にエニーキャスト DNS を実装すると、どのような影響がありますか。
A: 機能に直接影響はありません。 ロード バランサーを使用する場合、ドメイン コントローラーの他の構成は必要ありません。

Q: Microsoft カスタマー サービスでサポートされているエニーキャスト DNS 構成はありますか。
A: Microsoft 以外のロード バランサーを使用して DNS クエリを転送する場合、Microsoft は DNS サーバー サービスに関連する問題をサポートします。 DNS 転送に関連する問題については、ロード バランサーのベンダーに問い合わせてください。

Q: ドメイン コントローラーの数が多い (例: > 50) 環境にあるエニーキャスト DNS のベストプラクティスは何ですか。
A: ベスト プラクティスは、それぞれの地理的な場所でロード バランサーを使用することです。 ロード バランサーは、通常、外部ベンダーによって提供されます。

Q: エニーキャスト DNS と Azure DNS には類似の機能がありますか。
A: Azure DNS はエニーキャストを使用します。 Azure DNS でエニーキャストを使用するには、Azure DNS サーバーに要求を転送するようにロード バランサーを構成します。