WSL2内サービスをWindows外からアクセスできるようにする
例えば WSL2 の中でsshdを起動してWindows外からアクセスできるようにすると、VSCodeのRemoteDevelop(SSH) でWSL2の中へ飛び込んだり出来て嬉しい(個人差があります)訳ですが、幾つか設定が必要になります。
Windowsホストからであれば localhost でWSL2のサービスへ接続できますが、Windows外からは素の状態ではアクセス出来ません。
sshd (ポート22) を例にすると以下が必要になります。
- Windowsファイアウォール
詳細は省略。TCPポート22番を許可しましょう。 - Windowsホスト→WSL2のポートフォワード
netsh.exe でポートフォワードを設定します。本稿はこれの説明になります。
netsh.exe によるポートフォワード
Netsh.exe - Win32 apps | Microsoft Docs
こうです。EXE指定するとWSL2からでも実行できます。
netsh.exe interface portproxy add v4tov4 \
listenport=22 listenaddress=0.0.0.0 \
connectport=22 connectaddress=<WSL2-VMのIP>
netsh.exe をスクリプトから管理者権限で実行する
powershellでできます。EXE指定すると(ry
powershell.exe -noprofile -noninteractive \
-command "Start-Process powershell.exe -Verb RunAs -ArgumentList 'netsh.exe ...'
まとめ
WSL2内から実行するnodejsスクリプトとして書くとこうなります。