[Tips] Windows上のWSL2環境下で稼働するKrugle関連サービスを外部公開するための設定手順 - krugle-jp/Krugle-Library GitHub Wiki


WSL2環境下で稼働するKrugle関連サービスを外部公開するための設定手順

概要

WSL2 上で稼働している Krugle Services に、Windows ホスト経由で外部からアクセスできるようにするには、以下の設定が必要です。

  • portproxy による Windows → WSL2 へのポート転送設定

  • 起動時に portproxy を自動登録するためのタスクスケジューラ設定

  • Windows Defender Firewall での受信許可設定

本記事では、これらの設定手順をまとめます。


1. portproxy 設定の確認

WSL2 環境では、Windows ホストで受けた通信を WSL2 側の IP アドレスへ転送するために portproxy を使用します。

まず、現在の設定内容を確認します。

確認コマンド

PowerShell を開き、以下を実行します。

netsh interface portproxy show all

実行例

PS C:\Users\ki-krugle-jp\Krugle> netsh interface portproxy show all

Listen on ipv4:             Connect to ipv4:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
0.0.0.0         443         172.22.123.246  443
0.0.0.0         80          172.22.123.246  80
0.0.0.0         9100        172.22.123.246  9100
0.0.0.0         5000        172.22.123.246  5000
0.0.0.0         8080        172.22.123.246  8080
0.0.0.0         5668        172.22.123.246  5668

PS C:\Users\ki-krugle-jp\Krugle>

設定内容の意味

上記の例では、Windows 側の以下のポート宛通信を、WSL2 側 IP 172.22.123.246 の同一ポートへ転送しています。

  • 80

  • 443

  • 5000

  • 5668

  • 8080

  • 9100

0.0.0.0 で待ち受けているため、Windows ホストに到達した対象ポートへの通信をすべて受け付けます。


2. portproxy.bat をスタートアップタスクとして登録する

WSL2 の IP アドレスは再起動や再ログインで変わることがあるため、portproxy を再設定するバッチファイルを用意し、ログオン時に自動実行されるようにしておくと便利です。

ここでは portproxy.bat をタスクスケジューラに登録する方法を説明します。

手順

  1. taskschd.msc を実行して、タスク スケジューラを開きます。

  2. 右側の 操作 メニューから タスクの作成 をクリックします。

  3. 名前 に以下を入力します。

    Port Proxy for Krugle Services

  4. 最上位の特権で実行する にチェックを入れます。

  5. トリガー タブを開き、新規 をクリックします。

  6. タスクの開始 で ログオン時 を選択します。

  7. 必要に応じて、対象ユーザーを 特定のユーザー または 任意のユーザー に設定します。

  8. OK をクリックします。

  9. 操作 タブを開き、新規 をクリックします。

  10. 操作 で プログラムの開始 を選択します。

  11. プログラム/スクリプト に portproxy.bat のパスを指定します。

  12. OK をクリックして設定を保存します。

補足

  • portproxy.bat には、現在の WSL2 IP を前提にした netsh interface portproxy add ... の設定処理を記述します。

  • 管理者権限が必要なため、最上位の特権で実行する を有効にしてください。


3. Windows Defender Firewall でポートを許可する

portproxy を設定しても、Windows Defender Firewall で対象ポートの受信がブロックされていると、外部からアクセスできません。

そのため、Krugle Services で使用するポートを受信許可に設定します。

対象ポート

以下の TCP ポートを許可します。

  • 80

  • 443

  • 5000

  • 5668

  • 8080

  • 9100


4. Windows Defender Firewall の受信規則作成手順

  1. Windows Defender Firewall with Advanced Security を起動します。

  2. 左メニューで Inbound Rules(受信の規則) を選択します。

  3. 右側の New Rule… をクリックします。

  4. Rule Type で Port を選択します。

  5. TCP を選択します。

  6. Specific local ports を選び、以下を入力します。

80, 443, 5000, 8080, 9100, 5668
  1. Allow the connection を選択します。

  2. Domain, Private, Public の各チェックボックスを必要に応じて有効にします。

    通常はすべてチェックします。

  3. 名前に以下を入力します。

    Krugle Services

  4. Finish をクリックして保存します。


5. 注意事項

WSL2 の IP アドレス変動について

WSL2 の内部 IP アドレスは固定ではないため、OS 再起動や WSL 再起動後に変更される場合があります。

そのため、portproxy の転送先 IP が古くなると、通信できなくなります。

この問題を避けるために、以下のいずれかの対応を推奨します。

  • ログオン時に portproxy.bat を自動実行する

  • WSL2 の最新 IP を取得して動的に portproxy を再登録するスクリプトを用意する

Firewall 設定の公開範囲について

Public プロファイルも許可すると、ネットワーク環境によっては想定以上に広い範囲から到達可能になる場合があります。

必要に応じて Domain や Private のみに制限してください。


6. まとめ

WSL2 上の Krugle Services を Windows 経由で外部公開するには、以下の3点が重要です。

  • portproxy で Windows から WSL2 へ通信を転送する

  • タスクスケジューラで portproxy.bat を自動実行する

  • Windows Defender Firewall で対象ポートを受信許可する

これらを設定することで、WSL2 上で動作する Krugle Services へ、Windows ホスト経由で安定してアクセスできるようになります。


ご参考:portproxy.batの例

@echo off
setlocal

REM WSL を起動
wsl echo WSL started >nul

REM WSL2 の IP アドレスを取得
for /f "delims=" %%i in ('wsl hostname -I') do set WSL_IP=%%i
for /f "tokens=1" %%i in ("%WSL_IP%") do set WSL_IP=%%i

if "%WSL_IP%"=="" (
    echo Failed to detect WSL IP address.
    exit /b 1
)

echo WSL IP: %WSL_IP%

REM 既存設定削除
for %%p in (80 443 5000 5668 8080 9100) do (
    netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=%%p
)

REM 新規設定追加
for %%p in (80 443 5000 5668 8080 9100) do (
    netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=%%p connectaddress=%WSL_IP% connectport=%%p
)

echo.
echo Updated portproxy entries:
netsh interface portproxy show all

endlocal
exit /b 0