WSL2 環境への port forwarding
↑最新
WSL2 側で TCP を使ったプロセスを立ち上げると、ホストOSである Windows からは、いい感じに localhost:3000 等で WSL2 側のプロセスへアクセスできる。ただ、ホストOS上で動いてる別のOS(例: Android Emurator)だったり、同じ WiFi ネットワーク上の別端末(例: 開発用iPhone実機) からは直接アクセスができない。
また、面倒なことに、ホストOS のWindows 側から WSL2 の IP アドレスを直接取得する手段がない(たぶん) ため、WSL2 で動く何かを書いて、それをもとによしなに port forwarding する必要がある。
例えばこんなかんじ。WSL2 の ip を取得して、WSL2 側から windows の netsh.exe を叩くことで実現する。
code:bash
IP=$(ifconfig eth0 | grep 'inet ' | awk '{print $2}')
LISTENPORTS=(8081 19000 19001 19002)
for port in "${LISTENPORTS@}" do
netsh.exe interface portproxy delete v4tov4 listenport=$port
netsh.exe interface portproxy add v4tov4 listenport=$port connectaddress=$IP
done
しかしながら、WSL2 から netsh.exe を直接実行してしまうと、権限がないのでエラーになるので、Windows からこのシェルスクリプトを権限付きで実行する。
code:bat
wsl --exec bash /usr/local/bin/wsl_port_forwarding.sh
これを適当に port_forwarding.bat とバッチファイルとして保存して、右クリックで「管理者として実行」でWindows から管理権限で動かすことによってうまく動く。
なお毎回実行するのはめんどくさいので、タスクスケジューラアプリで、Windows 起動時に管理者権限で上記バッチファイルを実行するようにしている。