メモの日々


2020年12月08日(火) [長年日記]

[windows] WSL2とHyper-V仮想マシンの間で通信ができるようにする

WSL2上のシェルからHyper-Vで動かしている仮想マシンへSSHでアクセスしようとしたら接続できなかった。接続しているネットワークが、

  • WSL2は「vEthernet (WSL)」
  • Hyper-V仮想マシンは「vEthernet (Default Switch)」

であり、これらの間の通信ができないようだ。

検索するとWSLのリポジトリに次のissueが見つかった。

ivan-section-ioさんがネットワークインタフェース間のForwardingがDisabledになっているのを変更すれば通信できるようになることを発見し、jonaskuskeさんが設定を変更するワンライナーを書いてくれている。

手元の環境の設定をPowerShell上で確認してみる。

PS> Get-NetIPInterface |
>> select ifIndex,InterfaceAlias,AddressFamily,ConnectionState,Forwarding |
>> Sort-Object -Property IfIndex |
>> Format-Table

ifIndex InterfaceAlias              AddressFamily ConnectionState Forwarding
------- --------------              ------------- --------------- ----------
      1 Loopback Pseudo-Interface 1          IPv4       Connected   Disabled
      1 Loopback Pseudo-Interface 1          IPv6       Connected   Disabled
     11 イーサネット                         IPv4       Connected   Disabled
     11 イーサネット                         IPv6       Connected   Disabled
     12 vEthernet (Default Switch)           IPv4       Connected   Disabled
     12 vEthernet (Default Switch)           IPv6       Connected   Disabled
     25 vEthernet (WSL)                      IPv6       Connected   Disabled
     25 vEthernet (WSL)                      IPv4       Connected   Disabled

次のワンライナー

Get-NetIPInterface |
where {$_.InterfaceAlias -eq 'vEthernet (WSL)' -or $_.InterfaceAlias -eq 'vEthernet (Default Switch)'} |
Set-NetIPInterface -Forwarding Enabled

をPowerShell上で実行してみる(管理者権限が必要)と設定が次のように変わり、WSL2とHyper-V仮想マシンの間で通信ができるようになった。

PS> Get-NetIPInterface |
>> select ifIndex,InterfaceAlias,AddressFamily,ConnectionState,Forwarding |
>> Sort-Object -Property IfIndex |
>> Format-Table

ifIndex InterfaceAlias              AddressFamily ConnectionState Forwarding
------- --------------              ------------- --------------- ----------
      1 Loopback Pseudo-Interface 1          IPv4       Connected   Disabled
      1 Loopback Pseudo-Interface 1          IPv6       Connected   Disabled
     11 イーサネット                         IPv4       Connected   Disabled
     11 イーサネット                         IPv6       Connected   Disabled
     12 vEthernet (Default Switch)           IPv4       Connected    Enabled
     12 vEthernet (Default Switch)           IPv6       Connected    Enabled
     25 vEthernet (WSL)                      IPv6       Connected    Enabled
     25 vEthernet (WSL)                      IPv4       Connected    Enabled