Open2

WSL2のポートをWindowsホストのフォワーディング

m10k1m10k1

WSL2は動的にIPアドレスを割り当てられるため、ポートフォワーディングを自動化するスクリプトを設定します。以下の手順を実行:

  • PowerShellスクリプトを作成
param(
    [Parameter(Mandatory=$false)]
    [int[]]$Ports = @(8080)  # デフォルトは8888、複数ポート指定可能
)

$wslAddress = bash.exe -c "ip addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'"

foreach ($port in $Ports) {
    Write-Host "Setting up port forwarding for port $port..."
    netsh interface portproxy delete v4tov4 listenport=$port listenaddress=0.0.0.0
    netsh interface portproxy add v4tov4 listenport=$port listenaddress=0.0.0.0 connectport=$port connectaddress=$wslAddress
    Write-Host "Port $port forwarded to WSL address $wslAddress"
}

使用方法

  • スクリプトの実行: PowerShellを管理者権限で起動し、スクリプトを実行:
.\script.ps1 -Ports 3000
.\script.ps1 -Ports 8080,3000,5000
.\script.ps1

Windows ファイアウォールの設定

外部PCからホストPCのポート(例: 8080)にアクセスできるように、Windowsファイアウォールで該当ポートを許可する。

  1. ファイアウォールルールの追加:
netsh advfirewall firewall add rule name="Allow Web Server Port 8080" dir=in action=allow protocol=TCP localport=8080
  1. 確認
    ファイアウォール設定が正しいことを確認するため、別のPCからホストPCのIPアドレス(例: 192.168.1.x:8080)にブラウザやcurlでアクセスする。
m10k1m10k1
  • Dockerのネットワークモード:
    デフォルトでは、Dockerはブリッジネットワークを使用する。
    必要に応じて、hostネットワークモード(--network host)を使用すると、コンテナがホストのネットワークを直接利用できる。
    ただし、WSL2ではhostモードが制限される場合があるため、ブリッジモードでポートマッピングを使う方が一般的。

  • WSL2のIPアドレスの動的変更:

WSL2のIPアドレスは再起動ごとに変わる可能性があるため、
ポートフォワーディングスクリプトを定期的に実行するか、
.wslconfigで固定IPを設定する(上級者向け)ことを検討。