Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What are the problem?

posted at

updated at

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

はじめに

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

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

なぜP2Pか?

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

2021.9.30 追記 これ以降の手順を、最新のデスクトップアプリを使う手順に更新し、画面なども差し替えました。

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

今回はremote.itデスクトップアプリを使います。
まず、下記のremote.itのダウンロードサイトの「Desktop Applications」から、ソフトウェアをダウンロードします。

Download - remote.it

dmgファイルを展開し、アプリケーションをインストールして実行します。
(Windows版はexeファイルを実行してインストールします。)
スクリーンショット 2021-09-30 14.06.54.png

サインイン画面が表示されたら、remote.itアカウントでサインインします。
スクリーンショット 2021-09-28 13.59.17.png

初回は必要なコマンドラインツールのインストール画面が表示されます。
「INSTALL AGENT」をクリックします。インストール中にOSの権限が求められたら認証します。
スクリーンショット 2021-09-28 14.01.12.png

P2P接続の開始

アプリケーションにサインインすると、アカウントに対して登録されているデバイスのリスト(Webポータルと同じもの)が表示されます。
前回登録した「demo-ubuntu20」がありますね。
スクリーンショット 2021-09-30 14.02.06.png

デバイス名をクリックすると詳細画面に移り、登録されているサービス(アプリケーション)のリストが展開されます。
スクリーンショット 2021-09-30 14.02.22.png

接続したいサービスをクリックし、右下の「ADD TO NETWORK」ボタンをクリックします。
スクリーンショット 2021-09-30 14.02.34.png

接続が待機状態になるとボタンが水色に変わります。また、このサービスへの接続が demo-ubuntu20-http.at.remote.it のポート33000で待機していることが分かります。
スクリーンショット 2021-09-30 14.03.00.png

もう一つのサービスにも接続を行いました。こちらは demo-ubuntu20-http.at.remote.it のポート33001で待機しています。
スクリーンショット 2021-09-30 14.03.15.png

なお、demo-ubuntu20-http.at.remote.it は何かというと、ローカルホスト(localhost=127.0.0.1)を指しています。試しに ping を打ってみると、127.0.0.1 から応答があることが分かります。つまり、remote.itの接続はローカルホストでリスニングしていることになります。

$ ping demo-ubuntu20-http.at.remote.it

スクリーンショット 2021-09-28 14.04.55.png

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

$ netstat -an |grep 127.0.0.1 |grep LISTEN

確かに3000030001でそれぞれ待ち受けているようです。
スクリーンショット 2021-09-28 14.05.31.png

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

それでは実際にアプリケーションから接続します。
今回、demo-ubuntu20-ssh.at.remote.it:30001 がubuntuサーバのsshサービスでしたので、ターミナルからsshコマンドで demo-ubuntu20-ssh.at.remote.it:30001 に対して接続してみます。
スクリーンショット 2021-09-28 14.06.43.png

無事接続できました。よく見ると接続元が 127.0.0.1 になっていることが分かります。(初回接続時は接続が成立するまで少し待ちます。)
スクリーンショット 2021-09-28 14.07.07.png

ちなみに、接続先を localhost:30001 にしても同じターゲットにアクセスされます。
スクリーンショット 2021-09-28 14.07.57.png

同様に、demo-ubuntu20-http.at.remote.it:30000 はubuntuサーバのWebサービスですので、ブラウザから demo-ubuntu20-http.at.remote.it:30000 に対してアクセスするとubuntuサーバのWebコンテンツ(今回はapacheのデフォルトページ)が表示されました。
スクリーンショット 2021-09-28 14.08.37.png

こちらも同様に、 localhost:30000 にアクセスしても同じコンテンツが表示されます。
スクリーンショット 2021-09-28 14.08.53.png

まとめ

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

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

2021.9.28 追記
現在のデスクトップアプリで接続した場合、実際にアプリケーションからローカルホストへアクセスしたタイミングでP2P接続を開始します。また、既定の設定では、P2P接続が成功しない場合に自動的にProxy接続にフェイルオーバーされます。(デスクトップアプリを使うことで、Proxy接続もローカルホストアドレスで待ち受けることができることを意味します。)
実際にP2P接続、Proxy接続のどちらで接続されているかは、接続後の詳細画面で確認することができます。
スクリーンショット 2021-09-30 14.05.31.png

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
4
Help us understand the problem. What are the problem?