#author("2020-09-16T19:58:24+09:00","default:ryuichi","ryuichi")
#author("2020-09-16T19:59:03+09:00","default:ryuichi","ryuichi")
* WSL2のホストへ外部からSSH接続する [#u246b1ec]
** 問題 [#p4e573da]
- WSL2では、WSL2のLinuxは本体のWindowsとは別のネットワークセグメントに置かれるため(本体のWindowsのIPアドレスとWSL2のLinuxのIPアドレスは別セグメント)、別のPCからWSL2のLinuxにアクセスすることはできない
- また、WSL2のLinuxに割り当てられるIPアドレスは起動するたびに変わる
- 別のPCからWSL2のLinuxにアクセスするためには、Windows上でポートフォワーディングをしてアクセスを転送するようにする必要がある。また、通常、Windowsはファイヤウォールでポートを閉じているので、ファイヤウォールの設定を変えてポートを開く必要もある
** 手順 [#v0998790]
*** 1. WSL2のLinux上でipコマンドかifconfigコマンドでIPアドレスを調べる [#y55c9e95]
$ ifconfig
$ ip address
*** 2. Windows上でファイヤウォールの設定を変えてポートを空ける [#o1cd2149]
> 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上でポートフォワーディングを設定する [#e20c505d]
> 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とする
*** 参考 設定を削除する [#w787aec5]
*** 上記の設定を削除する [#w787aec5]
> 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
** 参考 [#j37a7183]
- https://github.com/microsoft/WSL/issues/4150
- https://www.hanselman.com/blog/HowToSSHIntoWSL2OnWindows10FromAnExternalMachine.aspx