WSL2を使っていると、LAN内の別PCやタブレットからSSH接続したい場面があります。
WSL2はデフォルトでNAT構成になっており、同一PC内からはlocalhost
で届くものの、LAN上の別PCからはそのままでは届きません。
対処方法はいくつかありますが、今回はWindows 11で使えるmirrored networking modeを使う方法を選びました。portproxyを使う方法と比べて、WSL2のIPアドレスが再起動のたびに変わる問題を気にしなくていいのがメリットです。
ということで、手順をメモ。
環境
- Windows 11
- WSL2 Ubuntu 24.04
目次
- WSL2にSSHサーバをインストール
- sshdのポートを変更
- mirrored modeを有効化
- ファイアウォールの設定
1.WSL2にSSHサーバをインストール
WSLのターミナルで実行します。
sudo apt update
sudo apt install -y openssh-server
インストールできたら、systemdでサービスとして登録・起動します。
sudo systemctl enable ssh
sudo systemctl start ssh
起動確認:
systemctl status ssh
Active: active (running) と表示されればOKです。
2. sshdのポートを変更
デフォルトは22番ですが、将来的にWindows側にもsshd(22番)を入れることを想定して、WSL2側は2222番にしておきます。
/etc/ssh/sshd_config の #Port 22 をPort 2222 に変更します。
sudo sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config
Ubuntu 24.04はsystemdのsocket
activationを使っているので、ポート変更後は以下の3コマンドが必要です。
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
sudo systemctl restart ssh
リッスンしているか確認:
ss -tlnp | grep 2222
0.0.0.0:2222 が表示されればOKです。
3. mirrored modeを有効化
Windows側の設定です。
%USERPROFILE%\.wslconfig
に以下を追記します(ファイルがなければ新規作成)。
[wsl2]
networkingMode=mirrored
PowerShellから書き込む場合:
Add-Content "$env:USERPROFILE\.wslconfig" "`n[wsl2]`nnetworkingMode=mirrored"
追記したらWSLを再起動します。
wsl --shutdown
WSLのターミナルを開き直して、WindowsのLAN
IPが含まれているか確認します。
hostname -I
192.168.xxx.xxx が含まれていればmirrored
modeが有効になっています。
4. ファイアウォールの設定
mirrored
modeではWindowsファイアウォールに加えて、Hyper-Vファイアウォールへの許可も必要です。これがないとLANからタイムアウトになります。
管理者権限のPowerShellで以下の2つを実行します。
# Hyper-Vファイアウォール
New-NetFirewallHyperVRule -Name "WSL2 SSH" -DisplayName "WSL2 SSH" -Direction Inbound -VMCreatorId "{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}" -Protocol TCP -LocalPorts 2222
# Windowsファイアウォール
New-NetFirewallRule -Name "WSL2 SSH" -DisplayName "WSL2 SSH" -Direction Inbound -Protocol TCP -LocalPort 2222 -Action Allow
{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}
はWSL用に固定されているGUIDです。以下のコマンドで確認できます。
Get-NetFirewallHyperVVMCreator
接続確認
別PCから以下で接続できます。
ssh -p 2222 <ユーザー名>@<WindowsのLAN IP>
まとめ
| 項目 | 設定内容 |
|---|---|
| WSL2ネットワーク | mirrored mode |
| WSL2 sshd | ポート2222 |
| Hyper-Vファイアウォール | TCP 2222 許可 |
| Windowsファイアウォール | TCP 2222 許可 |
portproxyと異なり、すべての設定が永続します。WSL再起動後も追加の操作は不要です。


コメント