【WSL2】外部からWSL2のサービスに接続する
こんにちは、$@(ダラ~っと)です(๑Ò﹃ Ó๑)ゝ
はじめに
Windows Subsystem for Linux2(WSL2)に立てたサービスに、他の端末からアクセスしたい時があったので、その時に行ったメモです。
何がわかる?
- 外部からWSL2にアクセスする設定
環境
- Windows 11
WSL2のネットワーク
WindowsとWSL2上のLinuxは、仮想ネットワークで接続された別ホストとして扱われます。
(WSL1の場合は、同一ネットワーク)
下図のように、WindowsからWSL2へはVirtual Networkを経由してアクセスします。(内部通信)
外部からは、WSL2のIPへ直接接続することが出来ません。そのため、ポートフォワード設定を行い、Windowsへの特定ポートへのアクセスを、内部ネットワークのWSL2に転送することで実現できます。(外部通信)
- 上図では、外部から
192.168.0.2:2222
(Windows)にアクセスすると、172.29.160.170:22
(WSL2のLinux)にアクセス出来ます。
ポートフォワード設定(コマンド実行)
Windowsでポートフォワード設定を行うには、netsh
コマンドを使用します。
上図の設定を行う場合は、下記のコマンドを実行すると設定できます。
実際は、設定する環境に応じて書き換えてください。
また、別途スクリプトを記事の下部に用意します。
-
管理者権限でコマンドプロンプトを起動して、下記コマンドを実行する。
-
Windowsキー + R
→cmd
を入力して Ctrl + Shift + Enter
-
-
登録
netsh interface portproxy add
コマンドを使用して、ポートプロキシ設定を行います。# 書式 # netsh interface portproxy add v4tov4 listenaddress=<転送元IPアドレス> listenport=<転送元ポート番号> connectaddress=<転送先IPアドレス> connectport=<転送先ポート番号> netsh interface portproxy add v4tov4 listenaddress=localhost listenport=2222 connectaddress=172.29.160.170 connectport=22
netsh interface portproxy addのヘルプ
$ netsh interface portproxy add /? 使用できるコマンドは次のとおりです: このコンテキストのコマンド: add v4tov4 - IPv4 をリッスンし、IPv4 経由でプロキシ接続するためにエントリを追加します。 add v4tov6 - IPv4 をリッスンし、IPv6 経由でプロキシ接続するためにエントリを追加します。 add v6tov4 - IPv6 をリッスンし、IPv4 経由でプロキシ接続するためにエントリを追加します。 add v6tov6 - IPv6 をリッスンし、IPv6 経由でプロキシ接続するためにエントリを追加します。
-
確認
netsh interface portproxy show
コマンドを使用して、ポートプロキシ設定を確認します。netsh interface portproxy show all
netsh interface portproxy showのヘルプ
$ netsh interface portproxy show /? 使用できるコマンドは次のとおりです: このコンテキストのコマンド: show all - ポート プロキシ パラメーターをすべて表示します。 show v4tov4 - IPv4 接続を別の IPv4 ポートへプロキシするパラメーターを表示します。 show v4tov6 - IPv4 接続を IPv6 へプロキシするパラメーターを表示します。 show v6tov4 - IPv6 接続を IPv4 へプロキシするパラメーターを表示します。 show v6tov6 - IPv6 接続を別の IPv6 ポートへプロキシするパラメーターを表示します。
-
削除
netsh interface portproxy delete
コマンドを使用して、ポートプロキシ設定を削除します。
ここでは、Windows側の情報のみ指定でOKです。
Windowsを再起動すると、WSL2のIPアドレスが変わるため、過去のポートフォワード設定を削除しておくと良いと思います。# 書式 # netsh interface portproxy delete v4tov4 listenaddress=<転送元IPアドレス> listenport=<転送元ポート番号> netsh interface portproxy delete v4tov4 listenaddress=localhost listenport=2222
netsh interface portproxy deleteのヘルプ
$ netsh interface portproxy delete /? 使用できるコマンドは次のとおりです: このコンテキストのコマンド: delete v4tov4 - IPv4 をリッスンし、IPv4 経由でプロキシ接続するためにエントリを削除します。 delete v4tov6 - IPv4 をリッスンし、IPv6 経由でプロキシ接続するためにエントリを削除します。 delete v6tov4 - IPv6 をリッスンし、IPv4 経由でプロキシ接続するためにエントリを削除します。 delete v6tov6 - IPv6 をリッスンし、IPv6 経由でプロキシ接続するためにエントリを削除します。
ポートフォワード設定(PowerShell実行)
Windowsを再起動すると、WSL2のIPアドレスが変わるため、毎回コマンドを実行するのが面倒なのでPowerShellのスクリプトを作成しました。
ポート番号の設定を変更して、右クリック -> PowerShell で実行
で実行してください。
エンコードがSJISのため、zenn上では文字化けしている模様。
Discussion