#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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS