投稿日

オープンソースVPN「WireGuard」の全体像から始め方まで ― IoT-Tech Meetup レポート

こんにちは、ソラコムの松下(ニックネーム: Max)です。

9/26に開催したIoTの勉強会「IoT-Tech Meetup」では、オープンソースVPN「WireGuard (ワイヤーガード)」をテーマに、基礎やIoTとの関わり、そして具体的な始め方を共有しました。

本ブログでは、公開された資料とともに要点を皆さんにレポートとしてご紹介します。

IoT-Tech Meetupとは?

「IoT-Tech Meetup」は、ソラコムが持つIoTや周辺技術の知見を、主にエンジニアの方に共有する事を目的としてシリーズ開催する無料のオンライン勉強会です。プレゼンテーションの他にQAもあり、学びを深めていきます。

テーマは多岐に渡っており、Raspberry Pi(ラズパイ)やM5Stack、クラウド型カメラといったハードウェアから、サーバーレスIoTやAIといったクラウド・ソフトウェア、そしてMatter等のIoT向け規格、法規やオープンソースライセンスといったあらゆる面で、IoTを活用するエンジニアの方に役立つ内容を企画・定期開催しています。

【セッション1】IoTとは?WireGuard概要とIoTで通信を守る理由

冒頭は私(Max)より、いつもお送りしている「IoTの全体像の振り返り」を皮切りに、IoT における狙い目 “攻撃ポイント” を紹介しました。IoT といえども、実は情報セキュリティの基本三要素「機密性」「完全性」「可用性」が適用できることと、そのうえでVPN技術が情報セキュリティのどの要素をカバーするのかを解説しました。

WireGuard はオープンソースの VPN です。どのような特徴を持つのかを、WireGuard 自体が称している「Fast」「Modern」「Secure」の項目別に解説しました。

  • Fast
    • 既存 VPN を上回るスループットとレイテンシ
    • 軽量でマイコンでも動作
  • Modern
    • IP が変化し続けるモバイル環境でも安定した接続性
  • Secure
    • 接続認証、暗号化、メッセージ認証は最新の標準技術
    • 実装がコンパクト

より詳細な WireGuard 自体の解説については「オープンソースVPN 「WireGuard」とは?ホワイトペーパーから読み解く仕組みや実用性」を併せてごらんください。IP アドレスが変化しても接続ができている様子などがご覧いただけます。

資料はこちらです。

【セッション2】「CloudflareのWireGuard活用と将来展開」の資料は事前のご案内通り、非公開となっています。

【セッション3】セキュアエレメントによるWireGuardのセキュリティ強化

続いては、セキュリティビジネスの会社で IoT セキュリティを研究されている光安さんより「セキュアエレメント」を用いた WireGuard の運用面におけるセキュリティ強化の一手を紹介いただきました。

セキュアエレメントとは、機密情報を守るための特殊なチップです。身近なところでは、クレジットカードの IC チップや、スマートフォン SIM がセキュアエレメントです。これをつかって WireGuard のカギを保護するという内容です。

セッション冒頭は IoT デバイスのリスクや課題を振り返りました。IoTデバイスが備えるべきガイドライン(NISTIR 8259A)の紹介がありましたが、中でも知っておきたいのが「セキュリティ・バイ・デザイン」です。製品やサービスを作るときに、設計段階からセキュリティを盛り込んでおく考え方です。運用後の対策では、設計段階に比べて100倍以上もコストが違うという試算もあります。

続いて WireGuard の「認証情報」を振り返りました。VPN 製品は ID とパスワードで接続認証するのが一般的です。WireGuard は公開鍵による認証です。この時課題なのは、接続元(クライアント)に保存する秘密鍵の保管場所です。この秘密鍵が盗まれてしまうと、なりすまして VPN 接続ができてしまうという運用上の課題が WireGuard にはあります。

この課題をセキュアエレメントで解決していく話に移りました。

セキュアエレメントは複数のベンダーから販売されています。今回は NXPセミコンダクターズ社の SE050 を使いました。これは WireGuard の公開鍵に使われている Curve25519 に対応しているからです。これにより、通常は CPU 上で行う秘密鍵と公開鍵のペアの運用を SE050 に肩代わりさせることができ、また、秘密鍵は SE050 内に閉じた(取り出せない)状態で WireGuard の接続情報にできます。

具体的なコマンド等は資料のP24以降で解説されています。発表内では実用性を確認するために、通信速度の測定やキーのローテーション(更新)も行っていました。速度は CPU 上で行った場合と遜色のないパフォーマンスが出ており、またキーのローテーションも行えている事が確認できました。

今回お試しいただいた内容は GitHub でも公開されています。詳しくは、以下の公開資料の「まとめ」のページをご覧ください。

【セッション4】WireGuardを動かす環境やハードウェア紹介

ここまでのセッションでは WireGuard の概要や詳細、そして運用面を見てきました。最後は皆さん自身が WireGuard を使う方法を、ソラコムのソリューションアーキテクト 井出(ニックネーム: Takao)からご案内しました。

WireGuard はオープンソースで開発されており、Windows や macOS だけでなく、広く一般的に使われている OS 上で動作します。今回は Windows を題材にインストールから設定の手順の紹介をしましたが、基本的には数ステップで済むことが共通点です。

WireGuard は Linux OS でも動作します。Raspberry Pi ではパッケージマネージャーからインストールを行うことで利用できるようになりますが、最近のルーター製品には WireGuard が最初から入っているものもあり、ブラウザからの設定だけで即利用が可能です。例としてはTeltonika RUT240FutureNet MA-S120/Lがあります。

また、WireGuard はマイコンでも動作します。組込み向け IP スタック「Lightweight IP (lwIP)」向けのWireGuard 実装があります (wireguard-lwip)。これを ESP32(マイコン) 向けにポーティングされたものがあり、ESP32を使った「M5Stack」で動かすこともできます。

このように多数の様々な環境で動かすことができるのも、WireGuard の1つの特徴です。

資料はこちらです。

Q&A セッション

Q. ラズパイ4を WireGuard サーバー、WindowsとmacOS を WireGuard のクライアントだとして、クライアント同士を通信させる方法はありますか?

A. OS の設定で可能だと考えられます。Linux OS であれば、OS の設定(カーネルパラメーター)で IP パケットの転送を有効化します。具体的には sysctl コマンドで net.ipv4.ip_forward というパラメータに 1 を設定します (sysctl -w net.ipv4.ip_forward=1)。これでクライアント同士の通信が可能になると考えられます。より詳細なヒントは archlinux のユースケースのページから得られるでしょう。

Q. YAMAHAのルーターで WireGuard を設定するサンプルコードは公開されていますか?

A. YAMAHA のルーター(例: RTX1300RTX3510)の仕様を確認したところ、残念ながら WireGuard への対応は見受けられませんでした。個人的に好きなルーターなので、対応していただけると嬉しいとは感じています。

主旨とは異なりますが、昨今のRTシリーズはUSBポートを持っており、ここに 3G/LTE データ通信端末を挿すことで 3G/LTE ルーターにできます。3G/LTE はそれ自体が暗号化の役割を持っているため、この回線を使うことも可能です。詳細はモバイルインターネット接続機能のページをご覧ください。また、SIM については SORACOM IoT SIM のページを参照ください(接続確認は個別にご相談ください)。

Q. 2台以上のルーターがそれぞれ所持しているサブネット(例えばルータAの持つ192.168.1.0/24とルータBの持つ192.168.1.0/24)をWireGuardを用いて同一ネットワークして扱う…というような構築は可能でしょうか。

A. ルーターによる拠点間接続なのか、ルーター配下の端末からの接続なのかで状況が異なります。後者であれば、端末の WireGuard のネットワークインターフェイスに IP アドレスが割り当てられるため、このQAの一番最初で紹介した「クライアント同士を通信させる」方法で同一セグメントとして扱えるでしょう。

前者のルーターによる拠点間接続の場合、VXLAN (L3ネットワーク上に、仮想的なL2ネットワークが作れるプロトコル)を用いて同一サブネットを作る事になるかと思います。この場合、ルーターが VXLAN に対応している必要があります (VXLAN 対応のルーター/スイッチとしては Cisco 社製品あたりが既知です)。または、OpenVPN の TAP インタフェースで L2 ネットワークを延伸する方法も考えられますが、こちらもルーターでOpenVPNのTAPインタフェースサポートが要件となります(参考: OpenVPNで拠点間L2接続)。いずれにしても、WireGuard だけでは解決できない可能性があります。WireGuard の実装趣旨から考えても、端末個々からの VPN 接続に向いている (拠点間接続は別の VPN プロダクトを使っていく) というのが回答になろうかと思います。

Q. WireGuard を使った事例があれば、ご紹介ください!

セッション2でご紹介いただいた Cloudflare WARP(ブログ) が1つの商用利用の事例となるでしょう。

また SORACOM では、マネージド WireGuard サーバーともいえるサービス「SORACOM Arc (アーク)」を提供しています。製造業の IoT 化を支援しているスリーアップ・テクノロジー社では、工場設備の稼働状況や生産数をリアルタイムで把握するサービスを提供しています。クラウドとの通信の際、お客様のネットワークが使える場合には VPN として WireGuard を利用し、SORACOM Arc (WireGuard サーバー)に接続しています。

次回のIoT-Tech Meetupは10/24(火)「IoT × サーバーレス入門」

次回の IoT-Tech Meetup は「IoT × サーバーレス入門」です。

先日公開したブログ「IoTだからこそ、サーバーレスを活用すべき3つの理由」を基に、改めてサーバーレスの基礎や始め方、IoT システムで役立つサービスを紹介予定です。

すでにお申し込みページはオープンしています。お気軽にご参加ください。
オンラインでお会いしましょう!

― ソラコム松下 (Max)