Knowledge Base

お知らせや身辺のことを綴っています。
目次
WSLのインスタンスにリモートから接続する

WSLのインスタンスにリモートから接続する

WSLのインスタンス上のサーバーソフトウェアと、リモートのクライアントとを接続させる方法について記述する。さんざん擦られている内容だが、できるだけGUIを多用して、何をやっているかの解説を入れるというところで独自性を担保していきたいと思う。

サーバーソフトウェアを準備

WSL側でOpenSSH ServerやApache Web Serverなどの任意のサーバーソフトウェアを起動して、任意のポートでリッスンしている状態にしておく。複数のWSLインスタンスを管理している場合は、それぞれのリッスンポートがダブらないようにする。

たとえば筆者の場合、複数のWSLインスタンスでそれぞれOpenSSH Serverをtcp/22とtcp/2022で立ち上げている。一方の起動ログはこんな感じ。Open SSH ServerはTCPを使いServer listening on 0.0.0.0 port 2022となっていることから、IPv4で、TCPの2022番ポートをリッスンしていることが分かる。

$ systemctl status sshd
Failed to dump process list for 'ssh.service', ignoring: Input/output error
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2024-04-02 16:19:08 JST; 826ms ago
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 61619 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 61620 (sshd)
      Tasks: 2 (limit: 14999)
     Memory: 11.1M
     CGroup: /system.slice/ssh.service

Apr 02 16:19:08 arithmetica systemd[1]: Starting OpenBSD Secure Shell server...
Apr 02 16:19:08 arithmetica sshd[61620]: Server listening on 0.0.0.0 port 2022.
Apr 02 16:19:08 arithmetica sshd[61620]: Server listening on :: port 2022.
Apr 02 16:19:08 arithmetica systemd[1]: Started OpenBSD Secure Shell server.

何事もローカルから

念のためSSHでもHTTPでもなんでも、ホストマシン側(Windows 11)から、WSLのインスタンスへ接続できるかどうかを確認しておくとよい。この段階でチェックしておくと、後に問題が発生した場合にそれがポートフォワーディング以前の段階での問題なのか否かがわかる。

ssh [email protected] -p 2022  # シェルが出てきたら成功(適切に公開鍵が交換できているものとします)

リモートからのパケットを通過させる

Windowsファイアウォール側で、リモートからのパケットの通過を許可したいパケットの種類(プロトコルの種類など)やポートを設定しておく。TCPのポート番号と、UDPのポート番号は別物なので、混同しないように正しく設定すること。

Local PortWindows側でリッスンしたい任意のポート(62022など)
Remote PortAny
Protocolサーバー側がリッスンする任意のプロトコル(今回はTCP)
上の表に基づくWindows ファイアウォールの設定例
上の表に基づくWindows ファイアウォールの設定例

リバースプロキシを設定

portproxyを設定する。筆者の理解が正しければportproxyはWindowsに備わるリバースプロキシのようなもので、今回はそのリバースプロキシを特定のポート番号のパケットを別の接続先に転送するために使う。netsh interface portproxy を使ってもよいが、今回はPortProxyGUIというソフトウェアを利用して楽をする。このソフトウェアを使うと、簡単にプロキシの管理ができるのでおすすめ。

Listen portWindowsにリッスンさせたい任意のポート(62022など)
Connect to127.0.0.1 (ループバックアドレス)
Connect portWSL側のアプリケーションがリッスンしているポート(今回は2022)

リモートマシンからテスト

Windowsのホストアドレス(ここでは192.168.3.70)と、開放しているポートに向けてアクセスが通れば成功である。ここでは、リモートの端末から以下のようなコマンドを叩いて、「SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.6」という文字列が返ってくることから、宛先がOpenSSH Serverであることが分かる。

netcat 192.168.3.70 62022
# SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.6

なお、ここで利用しているnetcatコマンドは、ncなどで通ることもある。netcatはデフォルトではTCP接続を張って、そこで通過したデータを標準出力に垂れ流す動作をする。一方、sshdは、接続が張られるとまず最初にこのような文字列を返すので、このような確認方法ができる。

以上。

前の記事

インターネット活動歴が10年になったので全部振り返ってみた

次の記事

4月1日(月)―4月7日(日) 日記

コメント

0

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連投稿

技術
「LLMに英単語帳を作らせる」のサムネイル画像

LLMに英単語帳を作らせる

大規模言語モデルに要件に応じた英単語とその訳のリストを作らせるというコンセプトで書いたプロンプト、工夫した点を紹介し、出力結果の比較を行います。 続きを読む

技術
「コマンドを実行する際の心がけ」のサムネイル画像

コマンドを実行する際の心がけ

筆者がコマンドを実行する際、セキュリティー面で常々心がけていることについて述べます。 続きを読む

技術
「視聴用にイコライザを使わないという変なこだわりを捨てた」のサムネイル画像

視聴用にイコライザを使わないという変なこだわりを捨てた

ホワイトノイズによる現在のスピーカーの周波数特性の検証を通じて、最適なイコライザーのカーブを探ってみます。 続きを読む

技術
「10進数→2進数の手計算をしていて気づいたこととかツールとか」のサムネイル画像

10進数→2進数の手計算をしていて気づいたこととかツールとか

10進数から2進数への変換をしていて気づいたことがあったり、それにまつわるツールを作ったりしたので紹介します。 続きを読む