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

コメントはありません。

コメントを残す

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

関連投稿

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

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

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

技術
「中華フォントはどうにかならないか?→ならない」のサムネイル画像

中華フォントはどうにかならないか?→ならない

日本語の文脈で中華フォントを見かける機会があるとムッとする。しかし、これは結局ユーザーが悪いか、あるいは開発者が悪いかという問題に帰着する問題なのである。 続きを読む

技術
「Nautilus の左ペインに邪魔なデバイスが表示されるのを防ぐ」のサムネイル画像

Nautilus の左ペインに邪魔なデバイスが表示されるのを防ぐ

Nautilusの左ペインに邪魔なデバイスが表示される問題を、/etc/fstabを編集することで解決する方法。 続きを読む

技術
「ちょっと便利な OBS の小技」のサムネイル画像

ちょっと便利な OBS の小技

配信ソフトウェアのOBSで使える細かなテクニックを紹介しています。 続きを読む