Closed2
WSL2のポートフォワードを自動化する
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
タスクスケジューラでポートフォワード
タスクスケジューラで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にクローズされました