WSL2に外部から接続するための設定
はじめに
WSL2上にdockerを利用してWebシステムを開発している際に、テストのため外部からWSL2に接続したい場合がありました。しかし、WSL2はホストWindowsと別のネットワークに属していたため、外部からホストWindowsに接続しても、WSLまでには接続できませんでした。
対策として、ホストWindowsでWSL2にポートフォワーディングを行うことで、WSL2に接続できるようになりましたのその時の内容をメモしておきます。
手順
※注意:PowerShellは管理者権限で実行してください。
WSL2のIPアドレスの確認
以下のコマンドでWSL2のIPアドレスを確認します。筆者の場合は、10個もありました。原因は不明です。ネットワークアダプターが10個あるからかもしれません。
PS C:\Users\tester> wsl -e hostname -I
172.19.90.182 172.22.0.1 172.19.0.1 172.17.0.1 172.23.0.1 172.18.0.1 172.24.0.1 172.20.0.1 172.21.0.1 172.25.0.1
ポートフォワードの設定
WSL2のIPアドレスが10個ありましたのでとりあえず、順番の通りにポートフォワーディングして、外部から接続できるか確認します。内容は以下となります。
- 全ての接続元からの信号をWSL2にフォワーディングする。
- HTTP信号(80ポート)をフォワーディングする。
以下が設定のコマンドです。
PS C:\Users\tester> netsh interface portproxy add v4tov4 listenaddress=* listenport=80 connectaddress=172.25.0.1 connectport=80
設定されているか確認します。
PS C:\Users\tester> netsh interface portproxy show all
ipv4 をリッスンする: ipv4 に接続する:
Address Port Address Port
--------------- ---------- --------------- ----------
* 80 172.19.90.182 80
これで外部からのHTTP信号がWSL2に接続できるようになりまして、無事開発中の画面が表示されました。
ポートフォワードの設定を削除
テストが終わったら元に戻すために、 以下のコマンドでポートフォワーディングの設定を削除します。
PS C:\Users\tester> netsh interface portproxy delete v4tov4 listenport=80 listenaddress=*
設定が削除されているか確認します。 以下のコマンドで何も表示されなければ問題ないです。
PS C:\Users\lee> netsh interface portproxy show all