Hyper-V と WSL2 のルーティング( routing)について

3 min 1,849 views

本記事について

以下の図にあるように Hyper-V 上の仮想ホストに立てたサーバーに対し、WSL からアクセスしたい時はないでしょうか。本記事では、WSL 上のディストリビューションをクライアントとして、Hyper-V 上の仮想ホストサーバーにリモート接続する際に必要なルーティング設定を解説します。

WSL と Hyper-V

Windows PowerShell の起動(管理者権限)

起動方法は任意ですが、Windows 「Windows + X」を押して「A(アルファベットのエィ)」ボタンで Windows PowerShell を管理者権限で起動します。

現在のルーティング状況を確認

Get-NetIPInterface コマンドレットで現在のルーティング状況を確認します。Get-NetIPInterface コマンドのみで実行すると、全てのインターフェースや項目の情報を出力して情報量が多いため、必要な項目のみ表示するようにオプションでフィルタします。

Get-NetIPInterface -InterfaceAlias 'vEthernet (Default Switch)', 'vEthernet (WSL)' | SELECT ifIndex,InterfaceAlias,AddressFamily,ConnectionState,Forwarding | Sort-Object -Property ifIndex | Format-Table

Hyper-V と WSL のルーティングが無効の場合、以下のように Forwarding が Disabled になっています。

PS C:\\Windows\\system32> Get-NetIPInterface -InterfaceAlias 'vEthernet (Default Switch)', 'vEthernet (WSL)' | SELECT ifIndex,InterfaceAlias,AddressFamily,ConnectionState,Forwarding | Sort-Object -Property ifIndex | Format-Table

ifIndex InterfaceAlias             AddressFamily ConnectionState Forwarding
------- --------------             ------------- --------------- ----------
     62 vEthernet (Default Switch)          IPv4       Connected   Disabled
     62 vEthernet (Default Switch)          IPv6       Connected   Disabled
     76 vEthernet (WSL)                     IPv6       Connected   Disabled
     76 vEthernet (WSL)                     IPv4       Connected   Disabled

PS C:\\Windows\\system32>

WSL2 と Hyper-V のルーティングを有効化

Set-NetIPInterface コマンドレットで Forwarding を有効にします。

Get-NetIPInterface -InterfaceAlias 'vEthernet (Default Switch)', 'vEthernet (WSL)' | Set-NetIPInterface -Forwarding Enabled

状況を確認します。

PS C:\\Windows\\system32> Get-NetIPInterface -InterfaceAlias 'vEthernet (Default Switch)', 'vEthernet (WSL)' | SELECT ifIndex,InterfaceAlias,AddressFamily,ConnectionState,Forwarding | Sort-Object -Property ifIndex | Format-Table

ifIndex InterfaceAlias             AddressFamily ConnectionState Forwarding
------- --------------             ------------- --------------- ----------
     62 vEthernet (Default Switch)          IPv4       Connected    Enabled
     62 vEthernet (Default Switch)          IPv6       Connected    Enabled
     76 vEthernet (WSL)                     IPv6       Connected    Enabled
     76 vEthernet (WSL)                     IPv4       Connected    Enabled

PS C:\\Windows\\system32>

vEthernet の Default Switch と WSL Forwarding が Enabled になれば、パケットが該当インタフェースで転送されるようになります。

補足

Hyper-V や WSL の仮想スイッチは以下のようにプライベートアドレスが割り振られているため、これらを調整してネットワークを疎通させる方法もあります。ただし、本記事のテーマ外となるため詳細は割愛します。

ネットワーク接続
vEthernet(Default Switch)のプロパティ
インターネット プロトコルバージョン4(TCP/Ipv4)のプロパティ
関連記事