IoT デバイスで「暗号化されていない TCP でアクセスすること」を期待するサーバー (以下、TCP サーバー) が動作している場合でも、そのデバイスが IoT SIM を利用していればセキュアに接続できます。
具体的には、オンデマンドリモートアクセスの
で「IoT デバイスは平文通信を待ち受けている (HTTP など)」を選択し、 にチェックを入れると下図のように通信できます。この動作のポイントは、 にチェックを入れたオンデマンドリモートアクセスを境にして、IoT デバイス側とアクセス元の端末 (以下、PC) 側で通信方式が異なる点です。- SORACOM と PC の間 (インターネット区間) は、TLS 暗号化されている TCP でセキュアに通信できます。なお、TLS 通信は SORACOM で終端され、デバイスへはデバイスが待ち受けているプロトコルでアクセスできます。逆に、SORACOM と PC の間は、暗号化されていない TCP では通信できません。
- IoT デバイスと SORACOM の間は、暗号化されていない TCP (TCP サーバーが待ち受けている通信方式) で通信できます。なお、SORACOM と IoT SIM を利用するデバイスの間は閉域網接続なためセキュアです。
その結果、PC からデバイスまでセキュアなリモートアクセスを実現できます。
Napter 利用料金が発生します
オンデマンドリモートアクセスを作成すると Napter 利用料金が発生します。なお、Napter には無料利用枠があるため、無料利用枠内の利用であれば、Napter 利用料金が発生しません。詳しくは、SORACOM Napter のご利用料金 を参照してください。
TCP サーバーが「TLS 暗号化されている TCP」(TCPS サーバー) で待ち受ける場合
オンデマンドリモートアクセスの
で「IoT デバイスは暗号通信を待ち受けている (HTTPS/SSH など)」を選択し、 のチェックを外してください。この設定の場合は、SORACOM と PC の間で TLS 暗号化されている TCP で通信すると、そのまま TCPS サーバーにアクセスできます。
操作を始める前に準備が必要です (クリックして確認してください)
(1) SORACOM Air for セルラーの IoT SIM、および IoT SIM を利用できるデバイスを準備する
各種デバイスでの IoT SIM の使用方法については 各種デバイスで SORACOM Air を使用する を参照してください。
準備完了ステップ 1: IoT デバイスで TCP サーバーを起動する
デバイスで、TLS で待ち受ける TCP サーバーを起動します。今回はデバイスとして Raspberry Pi を想定した手順を掲載します。
デバイスで利用する IoT SIM の IP アドレスをコピーします。
ifconfig wwan0
などのコマンドを実行すると、IP アドレスを取得できます。以下の例の場合は、xxx.xxx.xxx.xxx
が IoT SIM の IP アドレスです。$ ifconfig wwan0
wwan0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500 inet xxx.xxx.xxx.xxx netmask 255.255.255.248 destination xxx.xxx.xxx.xxx unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8 bytes 1474 (1.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Raspberry Pi に
netcat-openbsd
をインストールして、TCP サーバーを起動します。$ sudo apt install netcat-openbsd $ nc -l xxx.xxx.xxx.xxx 8080
なお、
xxx.xxx.xxx.xxx
は、手順 1 で確認した IP アドレスを入力します。この手順で TCP サーバーを起動した場合は、TCP サーバーは「暗号化されていない TCP」で待ち受けており、待ち受けているポート番号は「8080」です。
ステップ 2: オンデマンドリモートアクセスを作成する
ユーザーコンソール にログインし、デバイスが利用する IoT SIM にあわせてカバレッジタイプを変更します。
たとえば、plan01s の IoT SIM を利用するデバイスに SSH 接続する場合は、グローバルカバレッジの表示に変更します。詳しくは、SORACOM ユーザーコンソールで表示するカバレッジタイプを変更する を参照してください。
→ → の順にクリックします。
SIM 管理画面が表示されます。
デバイスが利用する IoT SIM がオンラインであることを確認します。
デバイスが利用する IoT SIM にチェックを入れて、
→ の順にクリックします。オンデマンドリモートアクセス画面が表示されます。
選択した IoT SIM にすでにオンデマンドリモートアクセスが作成されている場合は、オンデマンドリモートアクセスの一覧が表示されます。新しいオンデマンドリモートアクセスを作成するには、
をクリックします。接続先の情報を設定します。
設定項目について詳しくは、ユーザーコンソールでオンデマンドリモートアクセスを作成する を参照してください。
項目 説明 デバイスに接続する方法 (SORACOM Air または SORACOM Arc) を選択します。SORACOM Air で追加サブスクリプションを利用している場合は、複数のサブスクリプションが表示されます。ただし、Napter で利用するサブスクリプションを選択する必要はありません。オンライン が表示されているサブスクリプションが利用されます。 デバイスで動作する TCP サーバーが待ち受けているポート番号 (例: 8080) を指定します。 オンデマンドリモートアクセスを維持する時間 (リモートアクセスを許可する時間) を選択します。 Raspberry Pi で起動した TCP サーバーは暗号化されていない TCP で待ち受けているため、「IoT デバイスは平文通信を待ち受けている (HTTP など)」を選択します。また、アクセス元 (クライアント) から SORACOM まで (インターネット区間) を暗号化するために にチェックを入れます。デバイスにリモートアクセスできる IP アドレスレンジをグローバル IP アドレスで指定します。空欄の場合は、ユーザーコンソールを操作している端末のグローバル IP アドレスが設定されます。 をクリックします。
選択した IoT SIM に対してオンデマンドリモートアクセスが構成され、アクセス情報が表示されます。
の表示を確認します。
:
の前が IP アドレス、:
の後ろがポート番号です。
ステップ 3: オンデマンドリモートアクセスを利用して TLS 接続する
ステップ 1 で起動した TCP サーバーは、暗号化されていない TCP で待ち受けていますが、ステップ 2 で作成したオンデマンドリモートアクセスを利用すると、アクセス元から SORACOM まで (インターネット区間) をTLS 暗号化されている TCP でアクセスできます。
ここでは、PC (アクセス元の端末) で Node.js を利用して、TLS 暗号化されている TCP で Napter にアクセスします。Napter からデバイスまでは、Napter によって 暗号化されていない TCP でアクセスされます。なお、デバイス (TCP サーバー) からのレスポンスも PC で受信できます。
PC で以下の JavaScript を
tcp-client.js
という名前で保存します。yyy.yyy.yyy.yyy
とzzzzz
は、ステップ 2: オンデマンドリモートアクセスを作成する で確認した IP アドレスとポート番号を指定します。var HOST = "yyy.yyy.yyy.yyy"; var PORT = "zzzzz"; var tls = require("tls"); var client = tls.connect(parseInt(PORT), HOST, {rejectUnauthorized: false}, function () { console.log("Connected Server:", HOST, PORT); var message = "Hello, Server! This is a message from the client.\n"; client.write(message); console.log("Send Data:", message); }); client.on("data", function (data) { console.log("Received from server:", data.toString()); client.end(); }); client.on("close", function () { console.log("Disconnected"); }); client.on("error", function (err) { console.error("Error:", err); });
tcp-client.js
を実行します。TLS 暗号化されている TCP で Napter に接続され、「Send Data: Hello, Server! This is a message from the client.」が送信されます。このあと、TCP サーバーからのメッセージを受信します。PC は以下の表示のままにしてください。
$ node tcp-client.js
Connected Server: yyy.yyy.yyy.yyy zzzzz Send Data: Hello, Server! This is a message from the client.
TCP サーバーが起動している Raspberry Pi にメッセージが表示されます。
Hello, Server! This is a message from the client.
Raspberry Pi に表示されたメッセージの次の行に「Hello, Client!」を入力して Enter キーを押します。
Hello, Client
「Hello, Client!」が PC に送信されます。このとき、Napter までは 暗号化されていない TCP で通信されています。
node tcp-client.js
を実行した PC にメッセージが表示されます。このとき、Napter から PC までは TLS 暗号化されている TCP で通信されています。Received from server: Hello, Client! Disconnected
ステップ 4: オンデマンドリモートアクセスを削除する
オンデマンドリモートアクセスは、オンデマンドリモートアクセスを削除する を参照してください。
で指定した時間が経過すると、自動的に削除されます。手動で削除する場合は、