#はじめに
AWSのサーバに(AWSに限らずですが)インターネット経由で接続する場合、接続したいアプリケーションが待ち受けているポートに対するアクセスを許可する必要があります。Webサーバであれば80番、sshで乗り込みたければ22番といった具合です。
当然これらはインターネットに対して公開されていますので、意図しない人からもアクセスされる可能性があります。(ので、普通は送信元で制限したり、アプリケーションで認証を要求したりします。)
では、全くポートを開かずに、魔法のように接続できるとしたらどうでしょう?!
#remote.itを使うと
それができます。
remote.itがどんなサービスかというのは、こちらの@u___skさんの記事で紹介されていますので、併せてご覧ください。
2021.9.27 追記
これ以降の手順を、最新のCLIを使う手順に更新し、画面なども差し替えました。
#1. まずは普通にAWSのサーバを用意する
####AWSでサーバを用意する
ubuntuサーバを用意して、apache 2 をインストールしました。(この辺の手順はQiitaに優れた記事がたくさんあると思いますので割愛します。)
また、このサーバのパブリックIP(グローバルIP)が 54.248.15.144
であることが分かります。
####セキュリティグループでポートを開ける
Webサーバなので80番を開けました。sshの22番もいったんそのままです。 Hello world!
####Webサーバにアクセスしてみる
先ほど確認した 54.248.15.144
にアクセスでき、apacheのデフォルトページが表示されました。(当たり前)
#2. remote.itアカウントを作る
ubuntuサーバへremote.itをインストールする前にremote.itアカウントを作る必要があります。
remote.itのWebサイトにアクセスし、「Get Started」からアカウントを登録してください。
#3. remote.itをインストールする
今回はremote.itのCLI(Command Line Interface)を使う方法を紹介します。
ubuntuサーバにsshなどで接続し、以下のコマンドを順に実行してremote.itのCLIを取得してインストールします。(ダウンロードURLはremote.itのWebサイトの「ダウンロード」から、自身のプラットフォームに適合するものを確認できます。)
$ curl -LkO https://downloads.remote.it/cli/v1.7.48/remoteit_linux_x86_64
$ sudo cp ./remoteit_linux_x86_64 /usr/bin/remoteit
$ sudo chmod +x /usr/bin/remoteit
続けて、以下のコマンドでシステムサービスと関連バイナリをインストールします。
$ sudo remoteit agent install
✓ Agent installed and started successfully
$ sudo remoteit tools install
✓ Installing tools
✓ Tools installed to: '/usr/bin'
#4.ubuntuサーバをremote.itのデバイスとして登録する
remote.itを使って接続できるように、ubuntuサーバと接続したいサービス(アプリケーション)を登録します。
まず、サインインコマンドでremote.itアカウントにサインインします。
$ sudo remtoeit signin
次に、以下のコマンドでremote.itを使って接続するターゲットとして登録します。
このubuntuサーバをremote.itに登録するための名前の入力を求められますので、任意の名前を入力します。
$ sudo remoteit register
Device name: demo-ubuntu20
✓ REGISTER in progress ...
✓ NEXT-ACTION: run 'remoteit add' to add services to this device
続けて、以下のコマンドで接続するサービス(アプリケーション)を登録します。
$ sudo remoteit add
対話形式で登録できるアプリケーションのリストが表示されます。
Webサービスを登録するので 7
を選びます。(1
を選べばTCPのアプリケーションを何でも登録できます。)
Service Type is not specified or invalid. This is a list of valid service types
ID | Name | Default Port | Protocol | Description
-------------------------------------------------------------------------------------------
32770 | WireGuard | 51820 | UDP | WireGuard VPN server
32771 | Minecraft Bedrock | 19132 | UDP | Minecraft Bedrock server
5 | RDP | 3389 | TCP | Microsoft remote desktop
8 | HTTPS | 443 | TCP | Secure web protocol
37 | NxWitness | 7001 | TCP | Nx Witness VMS
43 | Terraria | 7777 | TCP | Terraria server
38 | Nextcloud | 443 | TCP | Nextcloud hub
32769 | UDP | 0 | UDP | Generic UDP
1 | TCP | 0 | TCP | Generic TCP
7 | HTTP | 80 | TCP | Web protocol
28 | SSH | 22 | TCP | Secure shell terminal
34 | SMB/CIFS | 445 | TCP | Internet file sharing
41 | Minecraft | 25565 | TCP | Minecraft server
42 | Admin Panel | 29999 | TCP | remote.it admin panel
4 | VNC | 5900 | TCP | VNC remote desktop
39 | OpenVPN | 1194 | TCP | OpenVPN server
Enter Service Type ('ID' or 'Name', not case sensitive, default is 'ssh'): 7
接続先のポート番号の入力を求められれますので 80
を入力します。(任意のポート番号に変更している場合は、その番号を入力してください。)
Enter Port (default is '80'): 80
今度はサービス(アプリケーション)に対して登録する名前を入力します。
アプリケーションかプロトコルが分かるようにするのがお勧めです。ここでは http
としました。
Enter Service Name (default is 'MyService'): http
✓ ADD in progress ...
✓ NEXT-ACTION: run 'remoteit add' to add more services
登録が完了しました。以下のコマンドを実行して、登録状態を確認します。
$ sudo remoteit status
「Services:」の中に、http
が connected
になっていることが確認できます。
$ sudo remoteit status
✓ Fetching status
Username: your@mail.address
Device:
UID | Name | Type | Status | Address
------------------------------------------------------------------------------------------------------------------------------
80:00:00:00:01:1B:87:94 | | device | connected | 127.0.0.1:65535
Services:
UID | Name | Type | Status | Address | Enabled
-----------------------------------------------------------------------------------------------------------------------------------------
80:00:00:00:01:1B:87:A2 | http | HTTP (7) | connected | 127.0.0.1 | true
Connections:
続けて、同じ手順を繰り返して、ssh用のサービス(22番ポート)も登録してみました。SSH
も connected
になっていることが分かります。
$ sudo remoteit status
✓ Fetching status
Username: your@mail.address
Device:
UID | Name | Type | Status | Address
------------------------------------------------------------------------------------------------------------------------------
80:00:00:00:01:1B:87:94 | | device | connected | 127.0.0.1:65535
Services:
UID | Name | Type | Status | Address | Enabled
-----------------------------------------------------------------------------------------------------------------------------------------
80:00:00:00:01:1B:87:A2 | http | HTTP (7) | connected | 127.0.0.1 | true
80:00:00:00:01:1B:87:AB | ssh | SSH (28) | connected | 127.0.0.1:22 | true
Connections:
これで準備は完了です。
#5.remote.itを使って接続する
####セキュリティグループでポートを全閉じする
AWSのコントロールパネルに戻って、ubuntuサーバのインバウンドポートを全部閉じます。ちょっとドキドキします。
閉じました。これで世界から遮断されました。Good-bye world!
念のため、ブラウザから 54.248.15.144
へアクセスしますが、応答はありません。(当たり前)
ぜひ 54.248.15.144
にポートスキャンしてみてください
####でも接続できます。 remote.itならね。
remote.itのWebポータルにサインインすると、デバイスリストに先ほど登録したubuntuサーバが表示されています。
デバイス名をクリックすると、先ほど登録したhttpとsshのサービス名があります。
HTTPの方をクリックすると・・・
同じようにSSHをクリックすると、こちらはURLとポート番号が生成されます。
この接続先を使ってターミナルでSSHコマンドを叩くと・・・
#まとめ
ご覧のとおり、remote.itを使うことでサーバはセキュアな状態(というかインターネットから全くアクセスできない)にありながら、自分だけはアクセスすることができるという非常に面白い状態を作り出すことができます。
実は、今回紹介した接続方法は、remote.itがクラウドにホストしているProxyサーバ経由で接続しています。この他にも P2P(Peer-to-Peer)で接続する方法も用意されています。また次の機会に紹介したいと思います。
一度使い方が分かるとかなり便利です。VPNより簡単にセキュアに接続できますので、ぜひ試してみてください!
2019.8.20追記
続きを書きました。