WSL2のホストへ外部からSSH接続する
問題
- WSL2では、WSL2のLinuxは本体のWindowsとは別のネットワークセグメントに置かれるため(本体のWindowsのIPアドレスとWSL2のLinuxのIPアドレスは別セグメント)、別のPCからWSL2のLinuxにアクセスすることはできない
- また、WSL2のLinuxに割り当てられるIPアドレスは起動するたびに変わる
- 別のPCからWSL2のLinuxにアクセスするためには、Windows上でポートフォワーディングをしてアクセスを転送するようにする必要がある。また、通常、Windowsはファイヤウォールでポートを閉じているので、ファイヤウォールの設定を変えてポートを開く必要もある
手順
1. WSL2のLinux上でipコマンドかifconfigコマンドでIPアドレスを調べる
$ ifconfig
$ ip address
2. Windows上でファイヤウォールの設定を変えてポートを空ける
> New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort 22,80 -Action Allow -Protocol TCP
> New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort 22,80 -Action Allow -Protocol TCP
- 管理者権限でPowerShellを起動して行う
- ここでは開くポートを22番と80番とする
3. Windows上でポートフォワーディングを設定する
> netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=10.0.0.5
> netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=80 connectaddress=10.0.0.5
- ここではWSL2のLinuxのIPアドレスを10.0.0.5とする
上記の設定を削除する
> Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock'
> netsh interface portproxy delete v4tov4 listenport=22 listenaddress=0.0.0.0
> netsh interface portproxy delete v4tov4 listenport=80 listenaddress=0.0.0.0
参考