Upgrade to Pro — share decks privately, control downloads, hide ads and more …

クライアントエージェントsoratun とは / SORACOM Meetup Arc sor...

クライアントエージェントsoratun とは / SORACOM Meetup Arc soratun overview

2021年7月27日(火)SORACOM Meetup〜Wi-Fiからもソラコムを!はじめよう新サービスSORACOM Arcにて、ソラコム カスタマーリライアビリティエンジニア佐藤 薫が発表した資料です。

イベントページ:https://soracom.connpass.com/event/218134/

SORACOM

July 27, 2021
Tweet

More Decks by SORACOM

Other Decks in Technology

Transcript

  1. 自己紹介 佐藤 薫 (kaoru) カスタマーリライアビリティエンジニア + エンジニアリングマネージャー 2019 年ソラコム入社。お客様にソラコムを安心して使い こなしていただくことを目標とし、技術サポートを中心に

    Binary Parser Playground や SORACOM Orbit、各種社内 ツールの開発、ユーザーサイト https://users.soracom.io/ の整備などを行っている。 SORACOM Arc のリリースにあたって soratun の企画・開 発を担当。
  2. 1. soratun の特徴 2. soratun の使い方 1. 簡単インストール 2. 簡単バーチャル

    SIM 作成 (ブートストラップ) 3. 簡単 WireGuard 接続 3. soratun v1.1.0 の新機能 今日の内容: クライアントエージェント soratun とは
  3. 1. soratun の特徴 2. soratun の使い方 1. 簡単インストール 2. 簡単バーチャル

    SIM 作成 (ブートストラップ) 3. 簡単 WireGuard 接続 3. soratun v1.1.0 の新機能 今日の内容: クライアントエージェント soratun とは
  4. soratun (sora-com tun-nel, ソラタン) とは SORACOM Arc を簡単・安全に使っていただくた めに開発された WireGuard

    クライアントです。 https://github.com/soracom/soratun/ 以下のような特徴があります。 1. SORACOM プラットフォームとの統合—デバイスからバーチャル SIM を簡単に作成し、容 易に WireGuard で接続できる 2. ユーザー空間で 1 つのプロセスとして動作するという手軽さ—既存の構成に大きな変更を 加えずアドオンしやすい 3. macOS や Docker コンテナー環境でも動作する柔軟性—開発者 PC や CI/CD 環境でも SORACOM プラットフォームへ接続できる soratun の特徴
  5. soratun Linux カーネル WireGuard 実装 パフォーマンス ユーザー空間で 1 つのプロセスとして動作す るため相対的に低速

    カーネル空間で動作するため高速に動作 安定性 公式の wireguard-go をライブラリとして使 用していますがカーネルの方がテストカバレ ッジが広いと考えられる カーネルの一部としてメンテナンスされ ているため安定性は高いと考えられる 通信のセキュリティ 公式の wireguard-go を使用しており、プロ トコルや通信に関わる部分に変更を加えてい ないためカーネルと同等と考えられる - 導入 1 つのバイナリファイルのコピー (SIM 認証を 利用する場合は Krypton CLI を含む 2 つのフ ァイルのコピー)で完了 OS のパッケージマネージャーによるイン ストール SORACOM プラット フォームとの統合 バーチャル SIM のブートストラップや接続が 容易 SORACOM API などを利用し WireGuard の構成ファイルを自動的に生成するよう な仕組みの実装が必要 soratun の特徴: Linux カーネル実装との比較
  6. soratun あり soratun なし デバイスに soratun をインストールする デバイスに WireGuard がサポートされているカーネル

    や WireGuard クライアントソフトウェアをインストー ルする デバイスから soratun を使ってバーチャル SIM をブ ートストラップする ユーザーコンソールまたは SORACOM API でバーチャ ル SIM を作成する デバイスで soratun を起動する 払い出されたセッション情報を元にデバイスの WireGuard を構成する デバイスで WireGuard を有効化する デバイスから SORACOM のプラットフォームサービ スを利用する デバイスから SORACOM のプラットフォームサービス を利用する soratun の特徴: SORACOM Arc 開始までのステップ比較 soratun を使用すると少ないステップで SORACOM Arc を開始できます。
  7. 1. soratun の特徴 2. soratun の使い方 1. 簡単インストール 2. 簡単バーチャル

    SIM 作成 (ブートストラップ) 3. 簡単 WireGuard 接続 3. soratun v1.1.0 の新機能 今日の内容: クライアントエージェント soratun とは
  8. 1. soratun の特徴 2. soratun の使い方 1. 簡単インストール 2. 簡単バーチャル

    SIM 作成 (ブートストラップ) 3. 簡単 WireGuard 接続 3. soratun v1.1.0 の新機能 今日の内容: クライアントエージェント soratun とは
  9. 1. soratun の特徴 2. soratun の使い方 1. 簡単インストール 2. 簡単バーチャル

    SIM 作成 (ブートストラップ) 3. 簡単 WireGuard 接続 3. soratun v1.1.0 の新機能 今日の内容: クライアントエージェント soratun とは
  10. SORACOM Arc で接続するための準備作業をブートストラップと呼びます。 1. デバイス側から新しいバーチャル SIM を作成する 2. バーチャル SIM

    を使った WireGuard 接続に必要な情報をデバイスに保存する バーチャル SIM を作成するには何らかの手段で認証が必要です。soratun は SORACOM プラ ットフォームの提供する 3 つの認証方法をサポートしています。 • SORACOM API 認証キーを使用する方法 • SORACOM Air のセルラー回線で接続できている = 認証 OK とする方法 (セルラー回線認証) • SIM カード内の秘密情報を使って認証する方法 (SIM 認証) soratun の使い方: 簡単バーチャル SIM 作成
  11. • メリット • SIM カード不要です。一番手軽に SORACOM Arc を使い始められます。 • デメリット

    • 認証キーをそれぞれのデバイスへセキュアに配布する手段が必要になります。 • デバイス上に SORACOM API の認証キーを保存しなければならないため、Raspberry Pi の盗難などの際に漏洩のリスクがあります。そのため、専用 SAM ユーザーの作成と 最小権限の付与を推奨しています。 soratun の使い方: ブートストラップ (SORACOM API 認証) $ soratun bootstrap authkey --auth-key-id keyId-xxx --auth-key secret-xxx --coverage-type jp Virtual subscriber SIM ID: 890000109xxxxxxxxxx Created/updated configuration file: /path/to/arc.json
  12. • 新しく planArc01 のバーチャル SIM が作成されます。 • --config フラグで指定した設定ファイルがすでに存在する場合、かつ、認証情報 (profile)

    が記録されている場合は接続情報(arcSessionStatus)のみを更新し終了しま す。すなわち: • soratun bootstrap authkey コマンドを実行するたびにバーチャル SIM が作成され ることはありません。 • 2 回目以降は soratun bootstrap authkey コマンドの実行時に認証情報の入力は不 要です。 soratun の使い方: ブートストラップ (SORACOM API 認証)
  13. • メリット • セルラー接続そのものを認証の手段としますので、デバイスに固有の認証情報を保存 しておく必要がありません。 • SORACOM Air for セルラーによる通信がセットアップ済みであれば簡単にバーチャル

    SIM の作成と接続ができます。 • デメリット • ブートストラップ時にデバイスが SORACOM Air for セルラーで接続している必要があ ります。 soratun の使い方: ブートストラップ (セルラー回線認証) $ soratun bootstrap cellular Created/updated configuration file: /path/to/arc.json
  14. • ブートストラップのときに接続している SIM のセカンダリーサブスクライバーとして planArc01 が作成されます。 • --config フラグで指定した設定ファイルがすでに存在する場合は秘密鍵(privateKey)、 公開鍵(publicKey)、およびセッション情報

    (arcSessionStatus) を更新して終了しま す。soratun bootstrap cellular コマンドを実行するたびにセカンダリーサブスク ライバーが追加されることはありません。 soratun の使い方: ブートストラップ (セルラー回線認証)
  15. • メリット • SIM カードに保管された認証情報を使用しますので、デバイス側に認証情報を保存し ておく必要がありません。 • SORACOM Air for

    セルラーの接続も不要です。モデムではなくカードリーダーでもブ ートストラップできます。 • デメリット • 現時点では plan01s または plan01s - Low Data Volume のみ対応しています。 • Krypton CLI のインストール(1 ファイルのみ)と動作確認済み USB ドングルが必要です。 soratun の使い方: ブートストラップ (SIM 認証) $ soratun bootstrap sim Running /usr/local/bin/krypton-cli ... Got response from /usr/local/bin/krypton-cli: {...} Created/updated configuration file: /home/ubuntu/s/arc/soratun/arc.json
  16. • ブートストラップのときに接続している SIM のセカンダリーサブスクライバーとして planArc01 が作成されます。 • --config フラグで指定した設定ファイルがすでに存在する場合は秘密鍵(privateKey)、 公開鍵(publicKey)、およびセッション情報

    (arcSessionStatus) を更新して終了しま す。 soratun bootstrap sim コマンドを実行するたびにセカンダリーサブスクライバ ーが追加されることはありません。 soratun の使い方: ブートストラップ (SIM 認証)
  17. 1. soratun の特徴 2. soratun の使い方 1. 簡単インストール 2. 簡単バーチャル

    SIM 作成 (ブートストラップ) 3. 簡単 WireGuard 接続 3. soratun v1.1.0 の新機能 今日の内容: クライアントエージェント soratun とは
  18. ブートストラップが終わると soratun を起動するだけで WireGuard 接続を開始します。 soratun の使い方: 簡単 WireGuard 接続

    $ sudo soratun up DEBUG: (soratun0) 2021/07/23 09:45:25 device started ... DEBUG: (soratun0) 2021/07/23 09:45:25 assign IP address: 10.151.193.3 DEBUG: (soratun0) 2021/07/23 09:45:25 set link up: soratun0 DEBUG: (soratun0) 2021/07/23 09:45:25 add route: 100.127.0.0/16 DEBUG: (soratun0) 2021/07/23 09:45:25 Interface up requested ...
  19. soratun 内部では起動時にあれこれ処理しています。 1. (systemd から起動された場合) systemd に「起動中」(RELOADING=1)を通知 2. arc.json で指定された名前と

    MTU で仮想ネットワークデバイス (tun) を作成 3. tun を使用する WireGuard 仮想インターフェースを作成し arc.json の情報を元に WireGuard 接続情報を設定 4. 仮想インターフェースに SORACOM Arc サーバーから割り当てられた IP アドレス(arcClientPeerIpAddress)を設定 5. 仮想インターフェースを up 6. サーバーから配布された AllowedIPs (arcAllowedIPs) と arc.json に記載されている additionalAllowedIPs をマージし、それらのネットワ ーク宛の通信を仮想インターフェース経由とするようルーティングテーブルを更新 7. postUp スクリプトを実行 8. (systemd から起動された場合) systemd に「起動完了」(READY=1)を通知 また、動作中は以下のような仕事もしています。 • SORACOM Arc サーバーとの定期的なハンドシェイク • (systemd から起動された場合) 110 秒毎に systemd へ生存を報告 • 60 秒毎にメトリクス(送受信バイト数、最終ハンドシェイク時刻)をログに出力 終了時に、仮想インターフェースを削除したあとに postDown スクリプトを実行します。 soratun の使い方: 簡単 WireGuard 接続
  20. 1. soratun の特徴 2. soratun の使い方 1. 簡単インストール 2. 簡単バーチャル

    SIM 作成 (ブートストラップ) 3. 簡単 WireGuard 接続 3. soratun v1.1.0 の新機能 今日の内容: クライアントエージェント soratun とは
  21. https://github.com/soracom/soratun/releases/tag/v1.1.0 1. 仮想インターフェースの MTU が指定可能になりました (これまでは 1420 固定)。 2. WireGuard

    の PersistentKeepalive が設定可能になりました (これまでは 60 秒固定)。 3. 仮想インターフェース Up / Down 後に実行するコマンドを指定できるようになりました。 4. arcSessionStatus.arcServerEndpoint がホスト名で保存されるようになりました。 soratun v1.1.0 の新機能: 設定項目の追加・変更 { "mtu": 2000, "persistentKeepalive": 25, "postUp": [["/bin/echo", "postUp %i"], ["perl", "-E", "say ¥"hello from perl¥""]], "postDown": [["/bin/echo", "postDown", "%i"]], "arcSessionStatus": { "arcServerEndpoint": "abe.arc.soracom.io:11010” } }
  22. 5. bash/zsh 向けの autocompletion を生成できるようになりました。 soratun v1.1.0 の新機能: bash/zsh autocompletion

    # bash $ source <(soratun completion bash) # zsh $ echo "autoload -U compinit; compinit" >> ~/.zshrc $ soratun completion zsh > "${fpath[1]}/_soratun"
  23. 6. arc.json を WireGuard の設定ファイル形式でダンプする soratun wg-config コマンド を追加しました。 soratun

    v1.1.0 の新機能: wg-config サブコマンド $ soratun wg-config --config arc.json [Interface] Address = .../32 PrivateKey = ... PostUp = /bin/echo postUp %i PostDown = /bin/echo postDown %i [Peer] PublicKey = ... AllowedIPs = ...
  24. ブートストラップのみ soratun を利用し、実際の接続はカーネルの WireGuard を使うといっ たユースケースに対応しました。 soratun v1.1.0 の新機能: wg-config

    サブコマンド $ soratun bootstrap cellular --config /etc/wireguard/wg0.json $ soratun wg-config --config /etc/wireguard/wg0.json > /etc/wireguard/wg0.conf $ wg-quick up wg0
  25. • soratun を使うとバーチャル SIM の作成 (ブートストラップ)から WireGuard 接続まで簡単 にできます。 •

    ブートストラップだけに使っても便利です。 • オープンソースです。要件に応じたカスタマイズの土台としてご利用いただけます。 おわりに
  26. • 改造例 https://github.com/0x6b/soratun/tree/soratun-curl-nc/ • soratun curl と soratun nc という

    2 つのサブコマンドを実装。 • ネットワークスタックに https://gvisor.dev/ を使用。すべてユーザー空間で動くため root 権限不要。 • コマンド実行時に WireGuard 接続をオンデマンドに作成。 おまけ $ soratun curl -X POST -d '{"message": "hello"}' http://beam.soracom.io:8888 Success: {"message"=>"hello"} $ echo -n -e "¥x4d¥x01¥x03¥x51" | soratun nc uni.soracom.io 23080 -u -w10 201