目次
本記事について
以下の図にあるように Hyper-V 上の仮想ホストに立てたサーバーに対し、WSL からアクセスしたい時はないでしょうか。本記事では、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 の仮想スイッチは以下のようにプライベートアドレスが割り振られているため、これらを調整してネットワークを疎通させる方法もあります。ただし、本記事のテーマ外となるため詳細は割愛します。