$30 off During Our Annual Pro Sale. View Details »

【IoT-Tech Meetup #5】WireGuardを動かす環境やハードウェア紹介

SORACOM
PRO
September 26, 2023

【IoT-Tech Meetup #5】WireGuardを動かす環境やハードウェア紹介

2023年9月26日開催『IoT-Tech Meetup 第5回【オープンソースVPN "WireGuard"】』で、ソラコム井出(takao)が発表した資料です。

SORACOM
PRO

September 26, 2023
Tweet

More Decks by SORACOM

Other Decks in Technology

Transcript

  1. WireGuardを動かす環境・ハードウェア
    Sep. 26, 2023
    IoT-Tech Meetup 第5回【オープンソースVPN "WireGuard"】
    株式会社ソラコム
    ソリューションアーキテクト
    井出 尭夫
    #5-4

    View Slide

  2. 井出 尭夫 Takao IDE
    ソリューションアーキテクト
    株式会社ソラコム
    国内重工メーカーでロケット開発🚀
    →同 本社部門でIoTプラットフォーム企画開発
    →2022.9 ソラコム join
    得意領域:
    IoT デバイス周辺
    PLC・産業ネットワーク
    ラーメン
    About me

    View Slide

  3. • UDP通信ができること
    UDPの通信ができる環境
    UDPをサポートしているプロトコルスタックが動かせること
    • WireGuard で利用しているセキュリティ技術が動かせること
    - ChaCha20 for symmetric encryption, authenticated with Poly1305, using RFC7539’s
    - AEAD construction
    - Curve25519 for ECDH
    - BLAKE2s for hashing and keyed hashing, described in RFC7693
    - SipHash24 for hashtable keys
    - HKDF for key derivation, as described in RFC5869
    WireGuard が使える条件とは?

    View Slide

  4. • 各種OSに対応
    • Windows
    • macOS
    • Linux
    • Android
    • iOS
    どんなOSで動くの?
    https://www.wireguard.com/install/
    ありがたい!

    View Slide

  5. 1. アプリケーションをインストール&起動
    2. トンネル追加
    3. 設定をコピー
    4. インターフェースを有効化
    Windowsの場合

    View Slide

  6. 1. アプリケーションをインストール&起動
    2. トンネル追加
    3. 設定をコピー
    4. インターフェースを有効化
    Windowsの場合

    View Slide

  7. 1. アプリケーションをインストール&起動
    2. トンネル追加
    3. 設定をコピー
    4. インターフェースを有効化
    Windowsの場合

    View Slide

  8. 1. アプリケーションをインストール&起動
    2. トンネル追加
    3. 設定をコピー
    4. インターフェースを有効化
    Windowsの場合
    簡単!

    View Slide

  9. • wireguard, wireguard-tools をインストール
    apt などのパッケージマネージャからインストール可能
    Linuxの場合(CLI)
    https://www.wireguard.com/install/

    View Slide

  10. • 接続はwg-quickコマンドで簡単
    1. パッケージマネージャからwireguardをインストール
    2. configファイルを準備
    3. wg-quick up {configファイルのパス}
    Linuxの場合(CLI)
    pi@raspberrypi:~ $ sudo apt install wireguard wireguard-tools

    View Slide

  11. • 接続はwg-quickコマンドで簡単
    1. パッケージマネージャからwireguardをインストール
    2. configファイルを準備
    3. wg-quick up {configファイルのパス}
    Linuxの場合(CLI)
    pi@raspberrypi:~ $ vi /path/to/config
    a
    [Interface]
    PrivateKey = (wg_demo_client.key )
    Address = IP
    [Peer]
    PublicKey =
    EndPoint = demo.wireguard.com:
    AllowedIPs = 0.0.0.0/0
    Esc :wq!

    View Slide

  12. • 接続はwg-quickコマンドで簡単
    1. パッケージマネージャからwireguardをインストール
    2. configファイルを準備
    3. wg-quick up {configファイルのパス}
    Linuxの場合(CLI)
    簡単!
    pi@raspberrypi:~ $ wg-quick up /path/to/config

    View Slide

  13. • 実はGUI(GNOME NetworkManager)でもできる
    Linuxの場合(GUI)

    View Slide

  14. 「黒い画面はちょっと・・・」という人でも安心して設定できます
    Linuxの場合(GUI)

    View Slide

  15. • Windowsと同様のGUIがapp Storeからダウンロード可能
    • BrewでinstallしてLinux のようにコマンドラインでの接続も可能
    Macの場合
    簡単!
    簡単!

    View Slide

  16. iOS / Android の場合
    https://apps.apple.com/jp/app/wireguard/id1441195209 https://play.google.com/store/apps/details?id=com.wireguard.android

    View Slide

  17. • スマートフォン・タブレット
    • Linux(debian,ubuntuなどのdistro)が搭載されているデバイス
    e.g. ラズパイ、Linuxゲートウェイ
    どんなIoTデバイスで動く?
    Raspberry Pi OS
    Raspberry Pi Armadillo-IoT G3 AG10

    View Slide

  18. • それほどコンピューティング性能がなくてもOK
    • Linuxの機能で通信を制御するルーター製品(アプライアンスサーバー)
    どんなIoTデバイスで動く?
    ブラウザから設定可能!
    ブラウザから設定可能!

    View Slide

  19. • マイコン(ESP32)でも動かすことができます
    • lwIP向けのwireguard実装(https://github.com/smartalock/wireguard-lwip)を利
    用したライブラリ
    https://github.com/ciniml/WireGuard-ESP32-Arduino
    どんなIoTデバイスで動く?
    みんな大好きM5Stackでも動かせます!

    View Slide

  20. 手順
    #include
    static WireGuard wg;
    char private_key[] = "{YOUR [Interface] PrivateKey}";
    IPAddress local_ip(192, 168, 200, 254); // [Interface] Address
    char public_key[] = "{YOUR [Peer] PublicKey}";
    char endpoint_address[] = "{YOUR [Peer] Endpoint}";
    int endpoint_port = 11010;
    configTime(9 * 60 * 60, 0, "ntp.jst.mfeed.ad.jp", "ntp.nict.jp", "time.google.com");
    delay(3000); // Wait for adjust
    wg.begin(local_ip, private_key, endpoint_address, public_key, endpoint_port);

    View Slide

  21. • 基本的な使い方はLinuxと同じ(wg-quick up するだけ)
    • wireguard(wireguard-tools)と iproute2をインストールする
    • docker run する時に –cap-add=NET_ADMINする
    コンテナからも使える
    アプリケーション

    View Slide

  22. • 基本的な使い方はLinuxと同じ(wg-quick up するだけ)
    • wireguard(wireguard-tools)と iproute2をインストールする
    • docker run する時に –cap-add=NET_ADMINする
    コンテナからも使える
    # ベースイメージとしてUbuntuを使用
    FROM ubuntu:latest
    # 必要なパッケージをインストール
    RUN apt-get update && ¥
    apt-get install -y wireguard vim iproute2 && ¥
    apt-get clean && ¥
    rm -rf /var/lib/apt/lists/*
    ~(中略:アプリケーションの構築)〜
    # コンテナ起動時にwg-quickコマンドを実行
    CMD [“wg-quick”, “up”, “/config/wgtest.conf”] ¥
    [アプリケーションの実行コマンド]
    $ docker build -t custom-wireguard-image .
    # configファイルの保存先をマウントする
    $ docker run -it ¥
    --cap-add=NET_ADMIN ¥
    -v /path/to/your/wgtest.conf:/config/wgtest.conf ¥
    custom-wireguard-image
    Dockerfileの例 Buildして、中に入るとwireguardでつながっている

    View Slide

  23. • 各種OS(Win, Linux, Mac, Android, iOS)の環境で動く
    • configファイルさえあればコマンド一つで簡単接続
    • GUIで設定する方法もある
    • ルーター製品やマイコンでも動作する
    • コンテナからも使える
    まとめ

    View Slide

  24. IoT の「つなぐ」を簡単に
    You Create. We Connect.

    View Slide