Hyper-VのDefault Switchの正体を調べる

当サイトには広告を含みます。

当サイトでは、広告掲載ポリシーに沿って広告を掲載しています。
※広告でなく、単に商品やサービスを自主的に紹介しているだけという場合もあります。

"オススメ" として紹介している商品やサービスは、個人的にそう思えたものだけです。

共感、興味をもっていただけるものがあればご利用ください。

1,000P獲得できるお得なAmazonプライム入会

Hyper-VのDefault Switchは便利なのですが、「これが具体的に何者なのか」というMicrosoftの公式情報が見当たらなかったりして不思議です。
本記事は、Hyper-VのDefault Switchは一体何なのかという点について調べた際のメモです。主にWindows 10 1809以降のDefault Switchについて調べたものですが、Windows Serverでも同様です。

関連記事として、Hyper-Vの仮想ネットワークでゲストの通信をホスト側で制限(拡張ACL: Add-VMNetworkAdapterExtendedAcl)する方法についても別記事にまとめてあります。

Stable Diffusionで作成 (プロンプト:cyber networking effect, virtual machines on servers, dark background)
Stable Diffusionで作成 (プロンプト:cyber networking effect, virtual machines on servers, dark background)

本記事の目的

  • Hyper-VのDefault Switchについて(できるだけ)理解する。
目次

基本

Default Switchの外部仕様

まずDefault Switchを使えば分かる外部仕様について記載します。

  • Hyper-Vインストール時点の初期状態で使用可能な仮想スイッチ
  • ゲストのインタフェース設定は自動(DHCP任せ)のままでネットワーク利用可能
    • Hyper-VホストのDefault Switch側インタフェースをゲートウェイとして使用可能
    • Hyper-VホストのDefault Switch側インタフェースにてNAT、DHCP、DNSを使用可能
  • Hyper-Vホストを再起動すると少し不可解な動作
    • この仮想スイッチが使用するネットワークアドレスが変わる
      • DHCPによりゲストに割り当てられるIPアドレスレンジが変わる
      • Hyper-VホストのDefault Switch側インタフェースのIPアドレスも変わる
      • Windowsファイアウォールにルールが増える(詳細は後述)

ゲストのネットワーク設定の手間を省けるため便利な反面、ホスト再起動時にネットワークアドレスが変わってしまうため、同じIPアドレスを使用し続けたい場合には使いづらいです。

Default Switchの内部仕様

次に、このDefault Switchの内部仕様やコンポーネントについて簡単に記載します。

  • Hyper-Vが利用するHNS(Host Networking Service)によりDefault Switchが作成される
  • Default SwitchのTypeは”ICS”(Internet Connection Sharing)
    • “外部ネットワーク(External)”や”内部ネットワーク(Internal)”や”プライベート(Private)”ではない
    • ホストWindowsのネットワークアダプタ設定上、ICSの設定(ネットワークのほかのユーザーにこのコンピュータのインターネット接続をとおしての接続を許可する)が有効になっている訳ではない
    • Hyper-V上の”仮想スイッチマネージャー”上は”内部ネットワーク(Internal)”が選択されているように見える
  • ICSにより以下の機能が提供される
    • NAT機能(手動で作成したWinNATと異なりGet-NetNatでは表示されない)
    • DHCPサーバ機能(Windowsの役割のDHCPサーバによるものではない)
    • DNSサーバ機能(Windowsの役割のDNSサーバによるものではない)

使いやすい管理ツールがある訳ではないので、なかなか上記の詳細は把握しづらいところです。
続いて、できる限り詳細を確認していきます。

詳細

IPアドレス、ネットワークアドレス

Default Switch用のネットワークアダプタには、自動的にIPアドレスが設定されます。
Hyper-VのホストWindowsを再起動すると、このIPアドレス(ネットワークアドレス)は変わります。
内部的には、再起動のたびに仮想スイッチが再作成されているようです(後述の参考URLに解説ページあり)。

Default Switch用のネットワークアダプタ
Default Switch用のネットワークアダプタ

NAT

Default Switchに接続する仮想マシンは、ホストWindowsのIPアドレスをデフォルトゲートウェイとして使用することにより、NAT経由でHyper-Vホストの外と通信可能です。

このNATは、内部的にはWinNATを使用していると思われますが、Get-NetNatでは表示されません。その他、このNAT実装の詳細を確認する方法は見つけられませんでした。

ちなみにNATと記載していますが1対多のNAPTのことです。

DHCP

Default Switchに接続する仮想マシンは、DHCPによるネットワーク自動設定が可能です。
ホストWindowsのDefault Switch側のIPアドレスでは、DHCPサーバ相当のサービス(67,68/UDP)が動作しています。

> netstat -anb
…
[svchost.exe]
UDP         172.27.160.1:67        *:* ←Default Switch側のIPアドレス
SharedAccess
[svchost.exe]
UDP         172.27.160.1:68        *:* ←Default Switch側のIPアドレス
SharedAccess
…

netstatによる確認結果です。その他、このDHCPサーバ相当の実装の詳細を確認する方法は見つけられませんでした。

このサービスは、以下の動作です。

  • DHCPを利用する仮想マシンに対するIPアドレスの割り当て
  • DHCPによりホストWindowsのIPアドレスをデフォルトゲートウェイ設定として配布(NAT経由でHyper-Vの外部と疎通可能になる)
  • DHCPによりホストWindowsのIPアドレスを参照先DNSサーバ設定として配布

DNS

Default Switchに接続する仮想マシンは、ホストWindowsのIPアドレスをDNSサーバとして使用することにより、名前解決が可能です。
おそらくホストWindowsのDNS設定に従い、再帰的に名前解決してくれるようです。
ホストWindowsでは、DNSサーバ相当のサービス(53/UDP)が動作しています。なお、TCPの方(53/TCP)はサービスしていません。

> netstat -anb
…
[jhi_service.exe]
UDP         0.0.0.0:53             *:*
SharedAccess

“jhi_service.exe”は、サービス”Intel(R) Dynamic Application Loader Host Interface Service”のプロセスのようです。
なぜこのサービスがDNSサーバ相当の機能を提供するのは不明です。
このサービスを起動状態から停止してみた場合、

 所有者情報を取得できません
UDP         0.0.0.0:53             *:*
SharedAccess

となり、DNSサービス自体は引き続き利用可能でした。

netstatの結果から、ホストWindowsの全てのIPインタフェースでDNSサービスが起動していますが、実際には後述のWindowsファイアウォールルールによりDefault Switch側のIPアドレスでのみ応答可能です。

(Default Switchに接続する仮想マシン上で)
> nslookup google.co.jp 172.27.160.1
サーバー:  xxxxxx-xxxxxx.mshome.net
Address:  172.27.160.1
権限のない回答:
名前:    google.co.jp
Addresses:  2404:6800:400a:80a::2003
172.217.25.163

なお、TCPの問合せには応答不可です。

(Default Switchに接続する仮想マシン上で)
PS C:\WINDOWS\system32> nslookup -vc google.co.jp 172.27.160.1
サーバー:  UnKnown
Address:  172.27.160.1
*** UnKnown が google.co.jp を見つけられません: Unspecified error
  • (補足)nslookupコマンドは-vcオプションによりTCP接続するよう指定できます
    • Microsoft解説ページ
      “vc サーバーに要求を送信するときに常に仮想回線を使用することを指定します。”
    • TCPによる通信を”仮想回線”(Virtual Circuit)と呼ぶこともあるようです。

Windowsファイアウォール

ホストのWindowsファイアウォールが自動設定されます。
Default Switchが有効なHyper-V環境では、前述のDNSサーバ相当の機能とDHCPサーバ相当の機能を使用できるようにWindowsファイアウォールのルールが自動的に作成されるようです。

ホストのWindowsファイアウォール
ホストのWindowsファイアウォール

DNSの許可ルールについては、ホストWindowsのDefault Switch側のIPアドレスに対してのみ、53/UDPと53/TCPの接続を許可するというものです(53/TCPの許可ルールはありますが、前述の通りTCP経由ではDNSサービスされていません)。
少し困ったことに、再起動するたびにルールが増え続けるようです。
最新のルール以外は不要ですので、古いものは削除して大丈夫と思われます。

DHCPの許可ルールについては、1つだけなので増え続けることは無さそうです。

関連要素

HNS、HCS、ICS

Default Switchの実態はHNS、HCS、ICS等と関連があります。またWindowsのコンテナ関連のネットワーク機能は、こういったHyper-Vの仮想ネットワークと共通的な要素がありそうです。

  • HNS(Host Networking Service)
    • 仮想スイッチ作成、NAT(内部的にはWinNAT)、DHCP、DNS、ルーティング、Windowsファイアウォールルールの作成
    • ポリシー管理(VFP、ACL)
  • HCS(Host Compute Service)
    • (コンテナの場合に使用)
  • ICS(Internet Connection Sharing)
    • Default SwitchののTypeはICS
    • (推測)従来のインターネット接続共有の技術を継承?

Hyper-VよりWindowsコンテナ関連の方が記事が見つかりやすいです。

The Host Networking Service (HNS) and the Host Compute Service (HCS) work together to create containers and attach endpoints to a network.
https://learn.microsoft.com/en-us/virtualization/windowscontainers/container-networking/architecture

このHNSを管理するためのモジュール(HNS Powershell Helper Module)がMicrosoftから提供されています。
このモジュールにより、OS標準で使用できるHNS関連のコマンドレットより多くのコマンドレットが使用できます。
このHNS Moduleをインストールし実行してみましたが、Default Switchを把握する上でGet-*系の追加されたコマンドレットから新たな情報は得られませんでした。

ICSに関しては、Default Switchを使用する環境ではhosts.icsというファイルが存在します。
パスは、C:\Windows\System32\drivers\etc\hosts.icsです。
ICSが動作する環境において自動的に生成されるファイルで、ホストWindowsのDefault Switch側のIPアドレスとその名前が登録されています。

Default Switchのカスタマイズ

特に試してはいませんが、Default Switchのネットワークアドレスレンジの固定化や、Default Switchの削除を行う方法は(一応)ありそうです。

ネットワークアドレスレンジの固定化(実施はお勧めしません)

参考URLです。

Change Hyper-V (Default Switch) IP address range

Get-NetIPAddress -InterfaceIndex (Get-NetAdapter -Name 'vEthernet (Default Switch)').ifIndex | Remove-NetIPAddress -confirm:$false
New-NetIPAddress -InterfaceAlias 'vEthernet (Default Switch)' -IPAddress '10.0.0.1' -PrefixLength 24
Set-DnsClientServerAddress -InterfaceAlias 'vEthernet (Default Switch)' -ServerAddresses ("10.0.0.15","8.8.8.8")
Default Switchの削除(実施はお勧めしません)

参考URLです。

Removing the vEthernet (default switch) from network connections list

Disable DNScache/"Dns Client" and use a third party client such as acrylic or simple dnscrypt. Thats the only solution to disappear vEthernet with hyper-v enabled.
HKLM\SYSTEM\CurrentControlSet\Services\VMSMP\Parameters\SwitchList
"I deleted the entry then rebooted and now the switch is gone"

Microsoftの説明ページ
には、Default Switchは”You can’t delete it.”と書かれています。

その他、参考情報として、Remove-VMSwitchでは、”The automatic Internet Connection Sharing switch cannot be modified.”というエラーで削除失敗するようです。

Get-HnsNetwork

PowerShellのGet-HnsNetworkコマンドレットにより、Default Switchが定義されていることを確認できます。

PS C:\WINDOWS\system32> Get-HnsNetwork
ActivityId             : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
AdditionalParams       :
CurrentEndpointCount   : 0
Extensions             : {@{Id=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX; IsEnabled=False; Name=Microsoft Windows フィルタリ
ング プラットフォーム}, @{IdXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX; IsEnabled=False; Name=Micro
soft Azure VFP Switch Extension}, @{Id=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX; IsEnabled=True; N
ame=Microsoft NDIS キャプチャ}}
Flags                  : 11
GatewayMac             : XX-XX-XX-XX-XX-XX
Health                 : @{AddressNotificationMissedCount=0; AddressNotificationSequenceNumber=11; DHCPNotificationMiss
edCount=0; DHCPNotificationSequenceNumber=0; DNSCacheNotificationMissedCount=0; DNSCacheNotifi
cationSequenceNumber=0; DNSNotificationMissedCount=0; DNSNotificationSequenceNumber=0; Interfa
ceNotificationMissedCount=0; InterfaceNotificationSequenceNumber=0; LastErrorCode=0; LastUpdat
eTime=xxxxxxxxxxxxxxxxxx; MacAddressNotificationMissedCount=0; MacAddressNotificationSequenceN
umber=0; NeighborNotificationMissedCount=0; NeighborNotificationSequenceNumber=0; RouteNotific
ationMissedCount=0; RouteNotificationSequenceNumber=0; XlatNotificationMissedCount=0; XlatNoti
ficationSequenceNumber=0}
ID                     : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
IPv6                   : False
LayeredOn              : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
MacPools               : {@{EndMacAddress=00-xx-xx-xx-1F-FF; StartMacAddress=00-xx-xx-xx-10-00}}
MaxConcurrentEndpoints : 0
Name                   : Default Switch ★
NatName                : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Policies               : {}
State                  : 1
Subnets                : {@{AdditionalParams=; AddressPrefix=172.27.160.0/20; Flags=0; GatewayAddress=172.27.160.1; Hea
lth=; ID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX; IpSubnets=System.Object[]; ObjectType=5; Polici
es=System.Object[]; State=0}}
SwitchGuid             : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
SwitchName             : Default Switch ★
TotalEndpoints         : 0
Type                   : ICS ★
Version                : 47244640267
Resources              : @{AdditionalParams=; AllocationOrder=2; Allocators=System.Object[]; CompartmentOperationTime=0
; Flags=0; Health=; ID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX; PortOperationTime=0; State=1; Swi
tchOperationTime=0; VfpOperationTime=0; parentId=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}

WSL(WSL2)が有効な環境の場合、さらにWSL用のスイッチも表示されます。
“Default Switch”, “WSL”、どちらの仮想スイッチもHNSが管理していることを確認できます。

Name                   : WSL
NatName                : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Type                   : ICS

ネットワークアドレス情報のみを確認することもできます。

PS C:\WINDOWS\system32> (Get-HnsNetwork).Subnets
AdditionalParams :
AddressPrefix    : 172.27.160.0/20
Flags            : 0
GatewayAddress   : 172.27.160.1
Health           : @{LastErrorCode=0; LastUpdateTime=xxxxxxxxxxxxxxxxxx}
ID               : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
IpSubnets        : {@{AdditionalParams=; Flags=3; Health=; ID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX; IpAddressPrefix=172
.27.160.0/20; ObjectType=6; Policies=System.Object[]; State=0}}
ObjectType       : 5
Policies         : {}
State            : 0

参考URL等

あわせて読みたい
Hyper-Vゲスト通信向け拡張ACL(Add-VMNetworkAdapterExtendedAcl) 仮想環境において、ゲストの通信を必要最低限の範囲に制限しておきたい場合があります。特に、ネットワーク側のファイアウォール設定だけでは都合が悪い場合、ホスト側...
記事作成、サイト管理
プロフ画像 (暫定版)

happynap
(はっぴぃなっぷ)

3人家族で暮らし
ITっぽい仕事をしつつ
ポイ活、投資を趣味的に
スキマ時間に、ゆるく全力でブログ
のんびり昼寝したい

お得情報

出張先、旅行先のホテル予約はお早めに

よろしければシェアいただけると
目次