はじめに
本記事はQiita Engineer Festa 2022のremote.it を使って○○に接続してみた!に関する記事になります。
remote.itは自宅や工場など遠隔地に存在するエッジデバイスに対して、LAN環境のネットワーク設定を変更することなく、リモート接続ができるサービスです。
サービスのソリューションはとてもシンプルです。
ホームページの導入事例を見ると、課題解決の施策としてRemote.Itの様々な利用例が記載されています。
本記事では個人利用からの視点になりますが、実際にremote.itを用いて自宅にあるベアメタルに接続して、クラウドのようにリモートで使用するための方法について記載しています。
本記事で使用しているベアメタルについては以前、書いた自作PCの組み立て方 ベアメタルで構築する俺のKALI【PC組み立て編】を参照。
remote.it概要
remote.itを利用するにあたり、ホームページに記載がある価格の通りに、個人利用でも5台までなら無料で利用できます。
はじめにを参考にしながら、remote.itを使用するためには以下の作業が必要です。
- アカウントの作成
- パッケージのインストール
- デバイス及びサービスの登録
- remote.itの接続
remote.itの接続はプロキシと、P2P(略称)と呼ばれるPeer to Peer利用した接続方式に大別できます。
remote.itの接続方式については、Remote.It 技術概要を参照。(※以下の図は左記リンクより引用)
インターネットの世界ではグローバルIPアドレスを持つノードから、プライペートIPアドレス持つノードに対して通信を行うことはできません。
グローバルIPアドレスを持つノードから見た場合、通信先となるネットワークの宛先は1台のノードでしか認識できないためです。そのため、P2Pなどを用いて内部ネットワークのプライペートIPアドレス持つノード群と通信するためには、NAT越えと呼ばれるNAT traversalの技術が使用されています。
remote.itの接続方式で使用されている技術についてより理解するためには、NATに対する理解が重要です。
NATはFull cone NATや、Symmetric NAT等複数の種類が存在します。
- 参考:ネットワークアドレス変換
remote.itはインターネットに接続するために必要となるグローバルIPアドレスや、VPN等を使用せずに課題解決を行なうことでリモートアクセスを実現しています。
アカウント作成
remote.itにアクセスして「はじめる」を押します。
「Sign Up」の画面に遷移するため、アカウント情報を登録します。
登録したメールアドレス宛に「Remote.It new account email verification required」の件名で登録確認メールが届きます。確認してリンクを押します。
リンクを押すと、アカウントが登録されます。
アカウント登録が完了し、サインインを行うと以下の画面に遷移します。
demo
「Devices」を見ると、初回サインイン後の状態ではdemo用のマシンが登録されています。
demo用のマシンを選択して「SERVICE」を見ると、複数のサービスが確認できます。試しに「SSH Instance」を選択し、「CONNECT」を押します。
接続するためのリンクが生成されるため、リンクのアイコンを押してクリップボードにコピーします。
ターミナルよりdemo用のマシンへのSSH接続が確認できました。
___ ______ _ _ _
/ \ \ / / ___| _ __ ___ _ __ ___ ___ | |_ ___ (_) |_
/ _ \ \ /\ / /\___ \ | '__/ _ \ '_ ` _ \ / _ \| __/ _ \ | | __|
/ ___ \ V V / ___) | | | | __/ | | | | | (_) | || __/_| | |_
/_/ \_\_/\_/ |____/ |_| \___|_| |_| |_|\___/ \__\___(_)_|\__|
https://remote.it/solutions/remote-cloud
remote.itの接続(プロキシ)
プロキシを使用してベアメタルのマシンにSSH接続できるか検証を行います。
まずは必要なパッケージをダウンロードするためにSupported Platformsを確認します。
本記事ではKali Linuxを使用しているため、Debian(amd64)のパッケージを使用します。
Debianは複数の種類がありますが、アーキテクチャが不明の場合、以下Debianのサイト「2.1.1. サポートするアーキテクチャ」が参考になると思います。
パッケージのインストール
amd64のパッケージをダウンロードするためには以下のコマンドを実行します。
$ wget https://downloads.remote.it/remoteit/v4.14.1/remoteit-4.14.1.amd64.deb
amd64のパッケージをダウンロード後、パッケージをインストールするために以下のコマンドを実行します。
$ sudo apt install ./remoteit-4.14.1.amd64.deb
- 参考:Installation
出力例
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
注意、'./remoteit-4.14.1.amd64.deb' の代わりに 'remoteit' を選択します
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
libdav1d5 libdrm-intel1 libgeos3.10.2 liblttng-ust-ctl4 liblttng-ust0
これを削除するには 'sudo apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
jq libjq1 libonig5
以下のパッケージが新たにインストールされます:
jq libjq1 libonig5 remoteit
アップグレード: 0 個、新規インストール: 4 個、削除: 0 個、保留: 2 個。
493 kB 中 388 kB のアーカイブを取得する必要があります。
この操作後に追加で 1,165 kB のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 /tmp/remoteit-4.14.1.amd64.deb remoteit amd64 4.14.1 [105 kB]
取得:2 http://linux3.yz.yamagata-u.ac.jp/pub/linux/kali kali-rolling/main amd64 libonig5 amd64 6.9.8-1 [188 kB]
取得:4 http://linux3.yz.yamagata-u.ac.jp/pub/linux/kali kali-rolling/main amd64 jq amd64 1.6-2.1 [64.9 kB]
取得:3 http://ftp.jaist.ac.jp/pub/Linux/kali kali-rolling/main amd64 libjq1 amd64 1.6-2.1 [135 kB]
388 kB を 1秒 で取得しました (375 kB/s)
以前に未選択のパッケージ libonig5:amd64 を選択しています。
(データベースを読み込んでいます ... 現在 307133 個のファイルとディレクトリがインストールされています。)
.../libonig5_6.9.8-1_amd64.deb を展開する準備をしています ...
libonig5:amd64 (6.9.8-1) を展開しています...
以前に未選択のパッケージ libjq1:amd64 を選択しています。
.../libjq1_1.6-2.1_amd64.deb を展開する準備をしています ...
libjq1:amd64 (1.6-2.1) を展開しています...
以前に未選択のパッケージ jq を選択しています。
.../archives/jq_1.6-2.1_amd64.deb を展開する準備をしています ...
jq (1.6-2.1) を展開しています...
以前に未選択のパッケージ remoteit を選択しています。
/tmp/remoteit-4.14.1.amd64.deb を展開する準備をしています ...
remoteit (4.14.1) を展開しています...
libonig5:amd64 (6.9.8-1) を設定しています ...
libjq1:amd64 (1.6-2.1) を設定しています ...
jq (1.6-2.1) を設定しています ...
remoteit (4.14.1) を設定しています ...
Created symlink /etc/systemd/system/multi-user.target.wants/connectd.service → /lib/systemd/system/connectd.service.
--------------------- Claim this device ---------------------
Use the code xxxxxxxx to register this device to your account
--------------------- Claim this device ---------------------
libc-bin (2.33-6) のトリガを処理しています ...
man-db (2.10.2-1) のトリガを処理しています ...
kali-menu (2022.3.0) のトリガを処理しています ...
デバイスの登録
デバイスの登録を行うために「Devices」から「Linux & Raspberry Pi」を選択し、「CLAM CODE」にパッケージインストール後に出力されるコードを入力します。
エージェントをインストールするためのコマンドを出力されるため、コピーしてターミナルなどから実行します。
上記コマンドを実行後、デバイスが登録されたことが確認できます。
STATUSがOnlineと表示されているので、ターゲットについて正しく認識されていることが確認できます。
サービスの登録
リモートから接続するためのサービスを登録するために、「+」を押します。
「SERVICE TYPE」は「SSH」を選択し、設定値を確認して「SAVE」を押して保存します。
remote.itの接続
「USER NAME」にSSH接続するためのユーザー名を入力して、「CONNECT」を押します。
接続用のリンクが生成されるため、コピーします。また、Connectionを見ると、Public Proxyと表示されていることが確認できます。
現在、どのようにして接続しているかはConnectionを見ると分かります。
接続用のリンクをブラウザにペーストして、ターミナルを起動します。
「許可」を押します。
ターミナルが起動されてSSH接続ができました。
┌──(username㉿hostname)-[~]
└─$
なお、上記で生成されるリンクは以下のコマンドと同等です。
$ ssh -l <ユーザー名> <Proxy URL> -p <ポート番号>
remote.itの接続(P2P)
P2Pで接続するためためには接続するためのクライアントとなるソフトウェアが必要です。
P2Pで接続するための手順について、Macを例に記載します。
クライアントのインストール
ダウンロード画面にアクセスして「MacOS」のアイコンを押します。
デスクトップアプリから対象のCPUアーキテクチャを選択してダウンロードを行います。
CPUアーキテクチャが不明な場合は、ターミナルで$ uname -m
コマンドを実行すると確認できます。
ダウンロード後、デスクトップアプリをインストールします。
remote.itの接続
デスクトップアプリを起動後、サインインを行います。
デスクトップアプリにサインイン後、P2P接続の設定を行うために「ADD TO NETWORK」を押します。
接続用のリンクが生成されるため、コピーします。
ターミナルを起動後、接続用のリンクをペーストしてSSH接続を行います。
┌──(username㉿hostname)-[~]
└─$
P2Pの場合、ConnectionがPear to pearと表示されていることが確認できます。
セキュリティとパフォーマンスの観点からPeer to Peer(P2P)接続が推奨されています。
二要素認証
セキュリティを強化するために二要素認証を使用することを推奨します。
二要素認証を有効化するためには、アカウントの設定から「Security」を選択して、TWO-FACTOR AUTHENTICATIONの「TURN ON」を押します。
「Authenticator app」を選択して「NEXT」を押します。
QRコードが表示されるのでGoogle Authenticatorなどのアプリから読み取ってコードを入力します。
コード入力後、「SUBMIT」を押します。
以降、remote.itにサインインする際は二要素認証が有効になります。
おわりに
本記事ではペネレーションテストなどで使用されるKali Linuxがインストールされたベアメタルに接続しました。
リモートで接続するための目的は人それぞれ違いますが、remote.itを使用することでリモートから自宅のPCなどに接続して、クラウドのように自由にどこからでも作業を行うことができます。
セキュリティ観点で考えた場合に運用で考慮すべき点はありますが、利便性がある面白いサービスだと思います。
また、背景で使用されているネットーク技術に対しても興味深いものを感じました。
他のデバイスにも導入して使いたいと思います。