WSL2内サービスをWindows外からアクセスできるようにする

例えば WSL2 の中でsshdを起動してWindows外からアクセスできるようにすると、VSCodeのRemoteDevelop(SSH) でWSL2の中へ飛び込んだり出来て嬉しい(個人差があります)訳ですが、幾つか設定が必要になります。

Windowsホストからであれば localhost でWSL2のサービスへ接続できますが、Windows外からは素の状態ではアクセス出来ません。

sshd (ポート22) を例にすると以下が必要になります。

  1.  Windowsファイアウォール
    詳細は省略。TCPポート22番を許可しましょう。
  2. 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スクリプトとして書くとこうなります。

gist.github.com