Edited at

続・インバウンドポートを全閉したAWSのサーバに接続する方法 〜P2P編〜


はじめに

この記事はremote.itについて私が書いた以下の内容の続編です。是非事前にご覧ください。


これは魔法か?! インバウンドポートを全閉したAWSのサーバに接続する方法



なぜP2Pか?

先の記事の最後に「実は、今回紹介した接続方法は、remote.itがクラウドにホストしているサーバ経由で接続しています。」と書きました。この記事に対して多くの好意的な反響をいただいた反面、remote.itがホストしているサーバを介して接続されることによる不安やリスクについてのコメントも寄せられました。

そこで今回は接続がremote.itのサーバを経由しない、P2P接続の方法をご紹介します。


remote.itのクライアントアプリケーションのインストール

今回は一番最新のMacOS用ベータアプリを使います。 ※2019.8.23編集:Windows版も公開されました。

まず、下記のremote.itのドキュメントサイトから、ソフトウェアをダウンロードします。


Using the Desktop App (Beta)


dmgファイルを展開し、アプリケーションをインストールして実行します。

(Windows版はexeファイルを実行してインストールします。)

アプリケーションを実行すると、初回は必要なコマンドラインツールのインストール画面が表示されます。

「INSTALL NOW」をクリックします。

続けてサインイン画面が表示されるので、remote.itアカウントでサインインします。(サインイン画面が表示されない場合は、タスクトレイのアイコンをクリックします。)


P2P接続の実行

アプリケーションにサインインすると、アカウントに対して登録されているデバイスのリスト(Webポータルと同じもの)が表示されます。

前回登録した「test-ubuntu18-web」がありますね。

デバイス名の右側のアイコンをクリックすると、登録されているサービス(アプリケーション)が展開されます。

接続したいサービスをクリックします。接続に成功するとアイコンが水色のドーナツ型のものに変わります。

また、このサービスへの接続がlocalhostのポート33002で開始したことが分かります。

もう一つのサービスにも接続しました。こちらはlocalhostのポート33000で開始しました。

実際にローカルホスト(127.0.0.1)でLISTENしているポートを確認してみます。

$ netstat -an |grep 127.0.0.1 |grep LISTEN

確かに3300033002でそれぞれ待ち受けているようです。


アプリケーションからP2P接続を使ってアクセスする

それでは実際にアプリケーションから接続します。

今回、localhost:33000はubuntuサーバのsshサービスでしたので、ターミナルからsshコマンドでlocalhost:33000に対して接続してみます。

無事接続できました。よく見ると接続元が127.0.0.1になっていることが分かります。

同様に、localhost:33002はubuntuサーバのWebサービスですので、ブラウザからlocalhost:33002に対してアクセスするとubuntuサーバのWebコンテンツ(今回はapacheのデフォルトページ)が表示されました。


まとめ

接続元側にもremote.itのクライアントを用意することで、自分のアカウントに登録されている接続先デバイスに対して簡単にP2P接続を行うことができます。

今回はAWS上のHTTPとSSHの例を紹介しましたが、一般的なTCP/IPの作法に則ったアプリ(IPアドレスとポート番号で会話できるアプリ)であれば、プロトコルやターゲットのロケーション(回線の種別)は問いません。VPNのようにインターネットをプライベートなネットワークとして使える一方で、VPNのようにインターネットに対して入り口を用意する必要がありません。

前回の記事ではさも魔法かのように書きましたが、実際はもちろんカラクリがありremote.itはいわゆるNAT越えを実現するサービスです。そのため、双方のネットワーク環境によっては今回紹介したP2P接続が成功しない可能性があることにご注意ください。