Soracom

Users

ドキュメント
Home ドキュメント SORACOM Napter Getting Started

IoT デバイスで動作する TCP サーバーにアクセスする (TLS 接続)

IoT デバイスで「暗号化されていない TCP でアクセスすること」を前提としたサーバー (以下、TCP サーバー) が動作している場合でも、そのデバイスが IoT SIM を利用していればセキュアに接続できます。

具体的には、オンデマンドリモートアクセスの [TLS] をオンにすると下図のように通信できます。この動作のポイントは、[TLS] をオンにしたオンデマンドリモートアクセスを境にして、デバイス側とアクセス元の端末 (以下、PC) 側で通信方式が異なる点です。

  • SORACOM と PC の間は、TLS 暗号化されている TCP でセキュアに通信できます。逆に、SORACOM と PC の間は、暗号化されていない TCP では通信できません。
  • デバイスと SORACOM の間は、暗号化されていない TCP (TCP サーバーが待ち受けている通信方式) で通信できます。

Napter 利用料金が発生します

オンデマンドリモートアクセスを作成すると Napter 利用料金が発生します。なお、Napter には無料利用枠があるため、無料利用枠内の利用であれば、Napter 利用料金が発生しません。詳しくは、SORACOM Napter のご利用料金 を参照してください。

TCP サーバーが「TLS 暗号化されている TCP」(TCPS サーバー) で待ち受ける場合

オンデマンドリモートアクセスを作成するときに [TLS] をオフにしてください。[TLS] をオフにした場合は、SORACOM と PC の間で TLS 暗号化されている TCP で通信すると、そのまま TCPS サーバーにアクセスできます。

デバイスと SORACOM の間は「TLS 暗号化されていない TCP」で通信してもセキュアです

SORACOM と IoT SIM を利用するデバイスの間は閉域網接続なためセキュアです。その結果、PC からデバイスまでセキュアなリモートアクセスを実現できます。

操作を始める前に準備が必要です (クリックして確認してください)

(1) SORACOM Air for セルラーの IoT SIM、および IoT SIM を利用できるデバイスを準備する

各種デバイスでの IoT SIM の使用方法については 各種デバイスで SORACOM Air を使用する を参照してください。

準備完了

ステップ 1: IoT デバイスで TLS サーバーを起動する

デバイスで、TLS で待ち受ける TLS サーバーを起動します。今回はデバイスとして Raspberry Pi を想定した手順を掲載します。

  1. デバイスで利用する 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
    
  2. 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: オンデマンドリモートアクセスを作成する

  1. ユーザーコンソール にログインし、デバイスが利用する IoT SIM にあわせてカバレッジタイプを変更します。

    たとえば、plan01s の IoT SIM を利用するデバイスに SSH 接続する場合は、グローバルカバレッジの表示に変更します。詳しくは、SORACOM ユーザーコンソールで表示するカバレッジタイプを変更する を参照してください。

  2. [メニュー][SORACOM AIR FOR セルラー][SIM 管理] の順にクリックします。

    SIM 管理画面が表示されます。

  3. デバイスが利用する IoT SIM がオンラインであることを確認します。

  4. デバイスが利用する IoT SIM にチェックを入れて、[操作][オンデマンドリモートアクセス] の順にクリックします。

    オンデマンドリモートアクセス画面が表示されます。

    選択した IoT SIM にすでにオンデマンドリモートアクセスが作成されている場合は、オンデマンドリモートアクセスの一覧が表示されます。新しいオンデマンドリモートアクセスを作成するには、[+作成] をクリックします。

  5. 接続先の情報を設定します。

    設定項目について詳しくは、ユーザーコンソールでオンデマンドリモートアクセスを作成する を参照してください。

    項目説明
    [接続方法]デバイスに接続する方法 (SORACOM Air または SORACOM Arc) を選択します。SORACOM Air で追加サブスクリプションを利用している場合は、複数のサブスクリプションが表示されます。ただし、Napter で利用するサブスクリプションを選択する必要はありません。オンライン が表示されているサブスクリプションが利用されます。
    [デバイス側ポート]

    デバイスで動作する TCP サーバーが待ち受けているポート番号 (例: 8080) を指定します。

    [アクセス可能時間]オンデマンドリモートアクセスを維持する時間 (リモートアクセスを許可する時間) を選択します。
    [TLS]

    暗号化されていない TCP で待ち受ける TCP サーバーにアクセスするときは、アクセス元から SORACOM までを暗号化するためにチェックを入れます。

    [アクセス元 IP アドレスレンジ]デバイスにリモートアクセスできる IP アドレスレンジをグローバル IP アドレスで指定します。空欄の場合は、ユーザーコンソールを操作している端末のグローバル IP アドレスが設定されます。

  6. [保存] をクリックします。

    選択した IoT SIM に対してオンデマンドリモートアクセスが構成され、アクセス情報が表示されます。

  7. [IP アドレス] の表示を確認します。

    : の前が IP アドレス、: の後ろがポート番号です。

ステップ 3: オンデマンドリモートアクセスを利用して TLS 接続する

ステップ 1: IoT デバイスで Web アプリを起動する で起動した TCP サーバーは、暗号化されていない TCP にのみ対応していますが、Napter の [TLS] をオンにすることで、アクセス元から SORACOM まで (インターネット区間) をTLS 暗号化されている TCP でアクセスできます。

ここでは、PC (アクセス元の端末) で Node.js を利用し、TLS 暗号化されている TCP で Napter に接続して、Napter からデバイスまでは 暗号化されていない TCP で接続します。デバイス (TCP サーバー) からのレスポンスも PC で受信できます。

  1. PC で以下の JavaScript を tcp-client.js という名前で保存します。

    yyy.yyy.yyy.yyyzzzzz は、ステップ 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);
    });
    
  2. 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.
    
  3. 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: オンデマンドリモートアクセスを削除する

オンデマンドリモートアクセスは、[アクセス可能時間] で指定した時間が経過すると、自動的に削除されます。手動で削除する場合は、オンデマンドリモートアクセスを削除する を参照してください。