Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

• 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 が使える条件とは?

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

• 接続は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!

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

手順 #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);

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

• 基本的な使い方は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でつながっている

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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