2018/12/18

謎: Windows 10 ver 1809 の Default Switch の NAT サブネットが起動ごとに変わる件

Windows 10 ver 1809(October 2018 Update)の Hyper-V の既定のネットワーク用スイッチ「Default Swtich」のおかしな挙動について...

似ていますが、こっちの話とは違います。
Tips: Windows Server 2019 の nat スイッチの内部サブネット範囲が起動ごとに変わる件



Windows 10 ver 1709(Fall Creators Update)から、Hyper-V に新機能として仮想マシンに NAT 環境を提供する「Default Switch」(ver 1709/1803 日本語版では「既定のスイッチ」、ver 1809 日本語版では「Default Switch」)という Hyper-V 仮想スイッチが追加され、仮想マシンの既定のネットワークとして選択されます。この仮想スイッチは Hyper-V を有効化すると自動的に作成される、設定変更も削除もできないスイッチです。ホストの Windows 10 には「vEthernet (Default Switch)」のような仮想ネットワーク アダプターが追加され、これが NAT ネットワークのサブネットのデフォルト ゲートウェイとして機能し、このスイッチに接続された仮想マシンには IP アドレスが自動割り当てされます。

What’s new in Hyper-V for Windows 10 Fall Creators Update?
https://blogs.technet.microsoft.com/virtualization/2017/11/13/whats-new-in-hyper-v-for-windows-10-fall-creators-update/


で、この Default Switch が Windows 10 ver 1809 になっておかしな挙動を示すようになりました。バグなのか新仕様なのかわかりませんが、こちらでも話題になってます。

Hyper-V Default switch IP address range change. Ver 1809 Build 17763.1
https://techcommunity.microsoft.com/t5/Windows-Insider-Program/Hyper-V-Default-switch-IP-address-range-change-Ver-1809-Build/td-p/261431


Windows 10 ver 1803 (April 2018 Update) の場合、NAT ネットワークにはプライベート IP の 172.x.x.x/28 または 192.168.x.x/28 サブネットが割り当てられ、再起動しても変わることはありません。(注:ver 1709 では確認してません)

Windows 10 ver 1809 の場合、起動するたびに異なるサブネットが割り当てられます。 それも、172.x.x.x/28 と 192.168.x.x/28 がころころと。IPv6 も。


何度か試してみると、こんな感じ。括弧内(DG: )は vEthernet (DefaultSwitch) の IP アドレス(仮想マシンにとってはデフォルトゲートウェイ)

172.17.152.190/28 (DG: 172.17.152.193)
172.17.54.128/28 (DG: 172.17.54.129)
192.168.65.160/28 (DG: 192.168.65.161)
172.18.15.0/28 (DG: 172.18.15.1)
192.168.141.208/28 (DG: 192.168.141.209)
172.18.11.64/28 (DG: 172.18.11.65)
...

ちなみに、この NAT ネットワークの構成は、Get-NetNat (自分で NAT スイッチを作成するときに使うやつ)では取得できません。Get-HnsNetwork (Get-HnsNetwork とか (Get-HnsNetwork).Subnets とかを管理者として実行) でスイッチの構成を確認できます。出力結果↓は少し違いました(上が ver 1803、下が ver 1809)。


Default Switch は設定変更できないスイッチなので、ユーザー側で固定化できるとは思えません。

12 月の B パッチ(17763.194)後も挙動に変化なし。バグなのか新仕様なのかわかりません。例えば、ローカルの IP とバッティングしたときに、再起動でこっそり正常化させるなんて思惑があったりして。(← ver 1803 で意図的にバッティングさせてみたら、ちゃんと Virtual Switch のサブネットが変更された)

ころころ変わるのはイヤだという場合は、↓の方法で自分で NAT スイッチ(ver 1607 は 1 つまで、ver 1703 以降は複数可)を作成し、仮想マシン側はマニュアル構成で。

NAT ネットワークの設定
https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/user-guide/setup-nat-network

追記) ver 1809 のイベント ログのMicrosoft-Windows-Hyper-V-VmSwitch/Operations ログを見ると、Default Switch の Port の削除(Event ID 69, 71)、Default Switch の削除(Event ID 62, 66)、Default Switch/Port の作成(Event ID 67)を PC の起動のたびにしているように見える。毎回、再作成しているから NAT サブネットが変わるんだと思う。自分で作成した仮想スイッチ(外部ネットワーク用など)が再作成される様子はない。一方、ver 1803 の Hyper-V-VmSwitch/Operations ログは空っぽ。


さらに追記) 「セーフモードとネットワーク」で起動すると、Default Switch の再作成の処理が走らないので、前回と同じ NAT サブネットの設定のまま起動する(セーフモードで Hyper-V は使えないけど)。


さらにさらに追記)Process Monitor の Bootlog で見ると(Path contains "Get-HnsNetwork で取得した Virtual Switch の ID" フィルターを使用)、起動時の早い段階で hns(ホスト ネットワーク サービス)が Virtual Switch を削除して再作成しているように見える。NetMgmtIF.dll モジュール NetMgmtDeleteVirtualSwitch で削除して、その後、同モジュールの NetMgmtCreateVirtualSwitch で作成(←このとき新しい NAT サブネットがランダムに選択される?)。





12/19 さらにさらに追加)19H1 Insider Preview(ビルド 18290.1000、最新の 18298 では未確認)も ver 1809 と同じ挙動。最新ビルドにしてないのは、Windows Sandbox (コンテナーで動く Windows 10 っぽい → Windows Sandbox についてのアナウンス)に興味があるので、18305 待ち。

新仕様なのかバグなのかは不明。
 新仕様なのかバグなのかは不明。
  新仕様なのかバグなのかは不明。
   新仕様なのかバグなのかは不明。
    新仕様なのかバグなのかは不明。
     新仕様なのかバグなのかは不明。

3 件のコメント:

Tom Williams さんのコメント...

Lovely blog. Thanks for sharing with us.

匿名 さんのコメント...

詳細記事ありがとうございます。
このスイッチ、無効にしてもまた勝手に起き上がってきてネットワークと共有センターに「識別されていないネットワーク」として居座るのが別に問題は無いのですがなんか気になりますよね・・・。

バグなことを個人的には祈りたいのですが(この仕様で嬉しい人はいるのか?)

山市 良 さんのコメント...

もしかすると(ほぼ確実に)、このサブネットがころころ変わるのに関連した、Windows ファイアウォールに"DNS Server Forward Rule - TCP - XXXXXXXXX..."と"DNS Server Forward Rule - UDP - XXXXXXXXX..."のペアが PC が起動するたびに永遠と増えていくかもしれない。