こうこく
作 ▸
改 ▸

WSL2上のサーバーにネットワーク内の他端末からアクセスする

管理者権限で起動したPoweShellで以下コマンド実行すると、当該WSL2上で動いてる当該ポートに対して、他端末からPCのIPと当該ポートを指定してアクセスできるようになる

# 対象ポート (※適宜変更)
$port = 3000

# WSL2のディストリビューション名 (※適宜変更)
$distName = "Ubuntu-20.04"

# Windows Defenderに穴あけ
New-NetFireWallRule -DisplayName "WSL 2 Firewall Unlock" -Direction Inbound -LocalPort $port -Action Allow -Protocol TCP

# WSL2の現在のIPに対するポートフォワーディング設定
netsh interface portproxy add v4tov4 listenport=$port listenaddress=* connectport=$port connectaddress=(wsl -d $distName -e hostname -I).trim()

ただしWSL2は起動するたびにIPが変わるので、穴をあけたくなったら毎回これをやる必要があるのと、毎回やってるとWindows Defenderの穴あけルールがそのたびに増えていくのは留意

あけた穴の戻し方などは続きに記載

Windows Defenderにあいてる穴を確認
Get-NetFirewallRule | FT DisplayName,Name,Enabled
この方法であけたWindows Defenderの穴を全て戻す
Remove-NetFirewallRule -DisplayName "WSL 2 Firewall Unlock"
設定済みのポートフォワーディングを確認
netsh interface portproxy show v4tov4
この方法で設定したポートフォワーディングを削除
netsh interface portproxy delete v4tov4 listenport=$port listenaddress=*

それと、もしアクセスしたいサーバーが webpack や vite のものなら、それらの設定ファイルとかで host0.0.0.0 を指定しておくこと。デフォルトではlocalhostでしかアクセスできないようになってると思う。

参考にさせていただいた記事

WSL2のサービスにスマホや他のPCからアクセスできるようにするには | 日記というほどでも

Windows WSL2に外部から直接アクセスするための設定

WSL2で開発中のWebアプリを同じLANのスマホで動作確認する方法

【 Get-NetFirewallRule 】コマンドレット―― Windows Defenderファイアウォールのポリシーを取得する:Windows PowerShell基本Tips(48) - @IT

この記事に何かあればこちらまで (非公開)