Closed2

WSL2のポートフォワードを自動化する

fate_shelledfate_shelled

WSL2のIPアドレスを取得

WSL2のIPアドレスはPC再起動のたびに変わってしまうため、ポートフォワードの設定が面倒くさいです。
まずはWSL2のIPアドレスを取得する方法です。

WSL2にIPアドレスを取得するためのスクリプトを生成

ファイル名をget_ipv4.bashとして、ホームディレクトリに生成します。

get_ipv4.bash
ip address show eth0 | awk '/inet / {print $2}' | awk -F / '{print $1}'

awkを使って、余計な文字列を削除しています。

Windows側からWSL2のIPアドレスを取得する

Powershellから先ほど生成したスクリプトを実行します。
Powershellでbashと入力するとWSL2のshellを実行できます。

bash ~/get_ipv4.bash
fate_shelledfate_shelled

タスクスケジューラでポートフォワード

タスクスケジューラでPC起動時にPowerShellスクリプトを実行して、ポートフォワードを設定します。。

PowerShellスクリプト

例として、WSL2のSSHポートをフォワーディングするスクリプトです。
ホストPCのIPアドレスに対してSSH接続すると、WSL2にSSH接続されます(WSL2のSSH設定が完了している前提です)。

$WSL2_IPV4=bash ~/get_ipv4.bash # WSL2のIPアドレスを取得
$HOST_IPV4="ホストPCのIPアドレス" # 適宜指定してください
$PORT=22 # SSHのポート
netsh interface portproxy delete v4tov4 listenport=$PORT # 古い設定を削除
netsh interface portproxy add v4tov4 listenaddress=$HOST_IPV4 listenport=$PORT connectaddress=$WSL2_IPV4 connectport=$PORT # ホストIP:PORTへアクセスがあったら、WSL2_IP:PORTに転送します。

タスクスケジューラの設定

タスクスケジューラを起動し、タスクを作成します。

  • 全般タブで、最上位の特権で実行するにチェック
  • トリガーはログオン時/任意のユーザーのログオン時
  • 操作タブで新規をクリック
    • プログラムの開始
    • プログラム/スクリプト(P):C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
    • 引数の追加(オプション)(A):-ExecutionPolicy RemoteSigned 〜スクリプトのパス〜
このスクラップは2021/09/06にクローズされました