Windows 11のPort Forwardingとファイアウォールの穴あけ

Windows上のPowerShellからWSL2へsshできるようにしましたが、本来やりたいのはLinuxマシンからWSH2へのsshアクセスで、Windowsの外からsshできるようにする必要があります。

そのためにはWindowsのPort Forwardingとファイアウォールの穴あけを設定します。

Port Forwardingの設定

Windows上からWSL2のIPアドレスに対して、sshすることが確認できたわけで、LinuxマシンからWSL2にsshするには起動毎に変わるWSL2のIPアドレスも含めてWindowsのIPアドレスでアクセスできるようにPort Forwardingの設定をする必要があります。

Port Forwardingの設定する次の内容のスクリプトを /usr/local/bin/port-forwarding.shに用意します。

#!/bin/bash

IP=$(ip address show eth0 | grep 'inet ' | awk '{print $2}' | sed 's/\/.*$//')

netsh.exe interface portproxy delete v4tov4 listenport=22
netsh.exe interface portproxy add    v4tov4 listenport=22 connectaddress=$IP

sc.exe config iphlpsvc start=auto
sc.exe start  iphlpsvc

このスクリプトはWSL2上で実行するのですが管理者権限で起動する必要があるのでWindows側から起動します。

具体的には管理者権限で起動したPowerShell上で次のように実行します。

wsl -d Ubuntu-20.04 -u root --exec /bin/bash /usr/local/bin/port-forwarding.sh

上記のコマンドを毎度、入力するのも面倒なので次のようにport-forwarding.batというバッチファイルを作成します。

wsl -d Ubuntu-20.04 -u root --exec /bin/bash /usr/local/bin/port-forwarding.sh
wsl -d Ubuntu-20.04 -u root --exec /bin/bash service ssh start

さらにport-forwarding.batのショートカットを作成して管理者権限で実行できるようにします。

上図の詳細設定から下図の「管理者として実行」にチェックを付けるとショートカットを管理者権限で実行できます。

そうすると、デスクトップ上などに配置してダブルクリックするとPort Forwardingの設定が有効になります。

ファイアウォールの穴あけ

ファイアウォールが設定されているとPort Forwardingを設定してもLinuxマシンからアクセスできないのでポートを開放します。

コントロール パネル > システムとセキュリティ > Windows Defender ファイアウォールにから詳細設定でsshの22番ポートを受信可能にします。

これでLinuxマシンからWSL2にsshすることができるようになったのでWSL2からLinuxマシン、LinuxマシンからWSL2の両方向にsshできる環境が整いました。

注意

ファイアーウォールの穴あけをしているのでセキュリティの管理は自己責任です。

そして、LinuxマシンからWSL2にsshする場合、Windowsでログイン状態にしてWSL2を起動しておかなければいけません。

例えば、遠隔からWindowsを起動してそのままWSL2にアクセスできるようにするにはWindowsの起動時に自動でログインできるようにすることと、Port Forwardingをログイン時に実行できるようにしなければいけません。

write: 2022/01/12/ 00:00:00