Windowsで2つ(複数)のNICにDNSを設定した場合の動作について

複数の NIC に DNS を設定したらどうなるか

まず、複数の NIC に DNS を設定することは可能です。結論から言ってしまうと、複数 NIC に DNS が設定されていた場合、Windows はよりメトリックの値が小さい NIC の “優先DNSサーバー” で名前解決を実施します。

参考リンク:優先DNSサーバと代替DNSサーバの動作について | @IT

デフォルトゲートウェイが設定されている NIC で名前解決しないの?

実際には先述したとおり メトリックが最小の NIC に設定されている DNS で名前解決が行われますが、勘違いしがちなのが「デフォルトゲートウェイを設定している NIC で名前解決するのでは?」ということです。この認識は誤りなのですが、Windows Server 2016 で実際に見てみましょう。

NIC1

NIC2

上記の環境では NIC2 にデフォルトゲートウェイが設定されており、NIC1 はローカルネットワークとの接続ポートになっています。

「nslookup」コマンドを実行すると、下図のように NIC1 に設定した DNS が利用されていることがわかります。

デフォルトゲートウェイは関係ありません。この場合は NIC1 のメトリックが NIC2 よりも高かった(値が小さかった)という事になります。

メトリックの調べ方

NIC のメトリックは以下のコマンドで確認することができます。

netsh interface ip show interface

もしくは以下のコマンドでも確認することができます。

netsh interface ip show config

メトリックが同じ場合

私の知る限り、少なくとも Windows Server 2012 R2 以降の NIC のデフォルトメトリックは「自動メトリック」となっています。

自動メトリックの場合、リンク速度によってメトリック値が決定されます。例えば 1000Mbps の NIC の場合、Windows Server 2012 R2 だとメトリックが「10」、2016 の場合だと「25」となります。

参考サイト:IPv4 ルート用の自動メトリック機能について | Microsoft サポート

OS のバージョンによってメトリック値の評価は変わりますが、考え方は同じです。一般的にはマシンに搭載されている全ての NIC が同じ速度であることが多いです。よって、自動メトリック値が同じになります

メトリックが同じだった場合、どの NIC が優先 NIC になるかはわかりませんでした。ここからは私の感覚なんですが、メトリックが同じ場合は Idx(インデックス)の値が大きい NIC が優先 NIC になっていることが多いです。そして Idx値が最大の NIC は NIC の1番になっていることがほとんどです。

がしかし、Idx値が小さい NIC が優先 NIC になっていたり、Idx値が最大の NIC が NIC の4番になっていたりと、そういったパターンもありました。更に Idx値の変更はどうやらできないようなので、検証もままなりません。

参考サイト:Changing Network adapter InterfaceIndex | TechNet

例えば Windows Server 2012 R2 で検証した場合は、メトリックが同じだと下図のようにイーサネット4 の DNS が使われてしまいました。

結局のところ、物凄く曖昧な言い方をしてしまえば、「メトリックが同じ場合は一番最初か最後の NIC の DNS が使われます」になってしまいます。

DNS が切り替わる様子

メトリック値には手を触れず、複数の NIC に DNS を設定し、NIC を無効にしていくことで DNS が変化していく様子を見ていきます。マシンは Windows Server 2016 です。

デフォルトゲートウェイは “イーサネット3” に設定

メトリックはデフォルト

DNS の値は以下のように設定しました。

  • イーサネット:1.1.1.1
  • イーサネット 2:8.8.8.8
  • イーサネット 3:9.9.9.9
  • イーサネット 4:64.6.64.6

まず、初めの状態で nslookup を実行します。

すると DNS サーバは「1.1.1.1」となっていました。

次に「イーサネット」アダプタを無効にします。すると「イーサネット 2」に設定していた「8.8.8.8」が DNS サーバとして利用されました。

次は「イーサネット」と「イーサネット 2」を無効にします。利用されたのは「イーサネット 3」の「9.9.9.9」です。

「イーサネット」を有効にします。すると使われた DNS サーバは「イーサネット」の「1.1.1.1」です。

メトリック値の変更方法

メトリック値の変更方法は難しくありません。NIC の IPv4 設定から「詳細設定」をクリックします。

「詳細設定」

自動メトリック」のチェックを外し、1 から 9999 の間で任意の値を設定してください。数字が小さいほど優先されます。

参考サイト:IPv4 ルート用の自動メトリック機能について | Microsoft サポート

「自動メトリック」のチェックを外す

例えば今回は「1」を設定

1 から 9999

 

1 から 9999 以外の値をメトリックに入力すると、下図のように怒られます。

 

「netsh interface ip show interface」コマンドでメトリック値が変化していることを確認します。再起動は必要ありません。即座に変化します。

nslookup を実行すると、DNS サーバが「1.1.1.1」になっています。本記事冒頭の初期状態の検証では「8.8.8.8」だったので、確かに変化していることがわかります。

2012 R2 と 2019 の場合

Windows Server 2012 R2 と Windows Server 2019 のメトリックの変更方法ですが、2016 と全く同じです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)