treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

(1/2)NICの優先順位を変えたいなぁって思った

以前に複数NICを搭載した場合、片方が認識しなくなることがありましたのでグループポリシーで対処しましたが、もうちょっと踏み込んだ設定が必要になったのでご報告します。

それは、以前設定した、

blog.treedown.net

この環境で起こりました。

両方DHCPだと

複数のNICを搭載した状態のPCで両方のNICを有効にし、それぞれのサブネットへ通信している環境です。
各々のサブネットワークに設置されたDHCPで各NICのIP設定は自動取得します。
当然、DHCPで配布されるIP設定はIPアドレスも違えばゲートウェイアドレスやDNSサーバアドレスも違うことがあります。(同じ場合もありますけどね、無線LAN&有線LANの複数NIC利用のようなケースだと)

で、今回はメインで利用したい(優先順位高で認識して欲しい)側のNICが、サブ側(優先順位低で認識して欲しい)NICよりも優先順位が下がってしまったようで、必ずサブ側を優先的に読み込むようになってしまいました。
これをメイン側が優先されるようにしたい、という優先順位の変更をやりたいです。

しかし…以前のGUIがない

しかし、以前のWindows(少なくともWindows7まではできていた)ではncpa.cpl画面からメニューを開いて「ネットワーク接続」→「詳細設定」→(画面内の)「詳細設定」に「アダプタとバインド」というタブ画面があって順番を変更で来ていたのですが、Windows10ではこの画面の優先順位変更が出来なくなっていました。
なので、PCを起動するとサブ側のNICのDNS設定が優先されてしまい、メイン側のサブネットに用意しているDNSが利用できないための名前解決失敗という状況がちょくちょく発生することに。

今回の不便なポイント

IPの通信はroute addコマンドでネットワークアドレス別に通信先を選択している(要するに通信に使うNICを選んでいるようなイメージ)ので、IPアドレスを使った通信は問題がなく通信が可能です。実際\\%IPアドレス%の通信には問題がありません。
しかし、ホスト名を名前解決しなきゃいけない状況では、いったんDNSにホスト名(名前)を問合せIPアドレスをもらう(解決)する必要があります。

その名前解決では、以下の順番でDNSに名前解決のリクエストを送信しています。

  1.  優先順位高い方のNICにある優先DNSに名前解決のリクエスト
  2.  優先順位が低い方のNICに設定された優先DNSに名前解決リクエスト
  3.  各NICに設定された代替DNSに名前解決のリクエスト

の順番で参照されるので、サブ側のネットワーク内にあるDNS機能を参照してしまい、「そんなホスト名はありませんよ」とだけ受け取って、エラーでストップしてしまう状況です。これを優先順位変更でもとに戻そうとしている、というのが今回の目標。

参考になる文書

以下にあるURLにほぼ答えが。

https://blogs.technet.microsoft.com/networking/2015/08/14/adjusting-the-network-protocol-bindings-in-windows-10/

この文末に、
-------------------------------------------------------
If you are using multiple NICs and you need to increase the priority a specific NIC has over others, use Set-NetIPInterface -InterfaceMetric to define the weight for the interface.

複数のNICを使用しており、特定のNICが他のNICよりも優先度を高くする必要がある場合は、Set-NetIPInterface -InterfaceMetricを使用してインターフェイスの重みを定義します。
-------------------------------------------------------
For more information on Set-NetIPInterface cmdlet, click on the below web link:
Set-NetIPInterfaceコマンドレットの詳細については、次のWebリンクをクリックしてください。

https://technet.microsoft.com/en-us/library/hh826125(v=wps.630).aspx
-------------------------------------------------------

ふーむ、Set-NetIPInterfaceで設定するのか。
SetってことはGetで情報確認ができるのが定番です。さっそく表示させてみました。

f:id:treedown:20180730122846p:plain

サブ側にしたいUSBのNICのInterfaceMetricが25となっており、メイン側にしたいオンボードNICのInterfaceMetricが35となっています。
※表記に無線LAN(WLAN)も表示されていますが、この環境では使っていないため今回の話題からは省略

先ほどのURLには「Always remember, the lower the number the higher is the priority.」(数値が低いほど優先度が高いことを常に覚えておいてください。)と記載があります。これ重要なので覚えておきます。

つまり現状はサブ側にしたいUSBのNICのInterfaceMetricが数字が低いので優先度が高いことを意味しています。これを逆転させる必要があるようです。

てことは、インターフェイスメトリックの値をNIC別に調整すれば優先的にアクセスする先が変わる、ということになります。

てか、もともと優先されるべきメインNIC側が自動メトリックで優先順位が高くなっていたはずなのですが、なんかの拍子にサブNIC側のインターフェイスメトリック値が高くなっているという状況のようです。

まだまとめてないので続きは次回に。

blog.treedown.netこちらに続きます。