外部PCからWSLのSSHに接続する
今までやる必要性を感じなかった
先日パルワールドのサーバーを立てる記事を書いた。
実際プレイするとカックカックで遊べたものではなかった。
マイクラならともかくハイエンドマシンを使うようなゲームで、
クライアントとサーバーを同居させるのは無理だ。
ということで別のPCにサーバーを立ててリモート接続するのをやろうとしたのだが、
実はこの方法やったことがなかった。
(NASのようなサーバー専用機ではあるけど)
リモートにあるWSLにLAN経由で接続するということだが、
調べるとすでに情報がたくさんあるので、
今回はいったんそれをまとめることにした。
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪
------------------- ↓ 本題はここから ↓-------------------
事前準備
WSL上にSSHDが稼働している前提。
パスワード認証設定とか鍵認証の準備などは説明しない。
接続設定する前に接続に関する情報を集めておく必要がある。
ServerPCのローカルIP
サーバーとなるPCのIPアドレスを調べておく
ipconfig
コマンドで一覧表示されるうち、
外部と接続しているLANアダプタのアドレスを抑えておく
ipconfig
Wireless LAN adapter Wi-Fi:
IPv4 アドレス . . . . . . . . . . . .: 192.168.1.32
φ(..)カキカキ
WSLのIPアドレス
サーバーとなるPCでSSHサーバーが稼働しているWSLインスタンスのIPアドレス
こちらは ifconfig
で表示される eth0
の inet
の情報
ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1472
inet 172.18.166.75 netmask 255.255.240.0 broadcast 172.18.175.255
( ..)φメモメモ
クライアントPCに疎通確認
疎通確認用のツールを入れて、
疎通できないことを確認しておく
winget install Insecure.Nmap
ターミナルを再起動してPathを通しておく
ポート22の状態を確認すると
nmap 192.168.1.32 -p 22
PORT STATE SERVICE
22/tcp filtered ssh
ポート22は filtered
で解放されていないということがわかる
ファイヤーウォールのポート開放
WindowsPCにはWindows Defenderというセキュリティツールが入っているが、
外部から接続する際にポートを開ける必要がある。
GUIツールでも可能だが、
ここではコマンドで実行
管理者権限のあるPowershell上で行う
New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort 22 -Action Allow -Protocol TCP
New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort 22 -Action Allow -Protocol TCP
参考:
netshでポートフォーワーディング
先ほどメモしたWSLインスタンスのIPアドレス 172.18.166.75
今度はServerPCがポート22で受けたものをWSLインスタンスのポートに割り当てる必要がある
ややこしいのでWSLのポートを 61546
とする。
netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=61546 connectaddress=172.18.166.75
netsh interface portproxy show all
ipv4 をリッスンする: ipv4 に接続する:
Address Port Address Port
--------------- ---------- --------------- ----------
0.0.0.0 22 172.18.166.75 61546
再度疎通確認
疎通設定ができたので外部PCから疎通確認してみる
nmap 192.168.1.32 -p 22
PORT STATE SERVICE
22/tcp open ssh
ポート22は open
で解放されていることがわかる
SSHで接続
ではSSHでサーバーPCに接続してみる。
ssh user@192.168.1.32
Last login: Tue Feb 6 23:37:09 2024 from 172.18.160.1
[user@DESKTOP-xxxxx ~]$
('ω') つながった
今回異なる目的で試してみたものの、
結構応用範囲が広い内容だなと感じた。
今後の参考にしていこう
------------------- ↓ 後書きはここから ↓-------------------
NetFireWallRuleコマンド
ファイヤーウォール設定のコマンドを整理しておく
設定名称を WSL 2 Firewall Unlock
、ポートを 22
、プロトコルを TCP
とすると
追加
New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort 22 -Action Allow -Protocol TCP
New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort 22 -Action Allow -Protocol TCP
削除
Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock'
netshコマンド
ポートフォーワーディングツールのコマンドを整理しておく
設定名称を v4tov4
、外部PCからの接続ポートを 22
、
WSLインスタンスのIPアドレスを 172.18.166.75
、ポートを 61546
とすると
(0.0.0.0
は固定値)
追加
netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=61546 connectaddress=172.18.166.75
確認
netsh interface portproxy show v4tov4
削除
netsh interface portproxy delete v4tov4 listenport=61546 listenaddress=0.0.0.0
次のヘルパー DLL を読み込めません: PEERDISTSH.DLL
netshを使うと毎回エラーとして出るが、
はっきり言って無視でいい。
Discussion