wslで外部からアクセスするポートを開く
WSLで外部から端末にアクセスするには、以下の手順が必要。
- WSL上のLinuxでホストしているサーバーのIPアドレスとポート番号を確認
- Windowsのファイアウォールで外部からの通信を許可するポートを開放
- Windowsのnetshコマンドで外部からの通信をWSLにプロキシする設定を追加
ただし、WSL上のLinuxでホストしているサーバーのIPアドレスとポート番号は再起動のたびに変わってしまうため、自動実行のコードが必要
ということを行うコードはこんな感じ。これをtask schedulerに登録しておく
$ports = @(80, 443) # Webアプリで使うポートを配列で指定
$fwRuleName = "WSL 2 Firewall Unlock"
$wsl2Address = wsl -e hostname -I | ForEach-Object { $_.trim() }
$firstWsl2Address = $wsl2Address.Split(" ")[0]
Write-Output $firstWsl2Address
# 古い設定を削除
Remove-NetFireWallRule -DisplayName $fwRuleName
for ($i = 0; $i -lt $ports.length; $i++) {
$port = $ports[$i]
netsh interface portproxy delete v4tov4 listenport=$port listenaddress=*
}
# 新しいルールを設定
New-NetFireWallRule -DisplayName $fwRuleName -Direction Inbound -LocalPort $ports -Action Allow -Protocol TCP
for ($i = 0; $i -lt $ports.length; $i++) {
$port = $ports[$i]
netsh interface portproxy add v4tov4 listenport=$port listenaddress=* connectport=$port connectaddress=$firstWsl2Address
}