世界を動かす技術を、日本語で。

Wireguard FPGAの実装

概要

  • Wireguard FPGA VPN は、現代のインターネットセキュリティの中核技術
  • 従来型VPN (OpenVPN/IPSec)の課題を克服し、 高性能・管理性 を提供
  • Blackwireプロジェクト の教訓を活かし、 安価なFPGAとオープンソース で実装
  • 段階的開発計画 に基づき、証明実験から本格展開までを視野
  • HW/SW協調設計・検証・管理 の課題と解決策を明確化

Wireguard FPGA VPN:オープンソースによる新世代VPN構築

  • Wireguard FPGA VPN は、地理的に分散した異種ネットワークを 暗号化トンネル で接続する技術
  • 従来方式 (OpenVPN/IPSec)は限界が見え始めており、 Wireguard が次世代VPNの標準へ
  • ソフトウェア実装は 性能面で限界、既存ハードウェア実装は 高価・クローズドソース が課題
  • 本プロジェクトは SystemVerilog HDL による 安価なFPGA向けオープンソース実装 を目指す
  • 100Gbps対応の Blackwireプロジェクト での経験を活かしつつ、 教育機関でも導入可能な低コスト を実現

Blackwireプロジェクトからの教訓

  • Blackwire はAMD/Xilinx AlveoU50を用いた100Gbps Wireguardスイッチ
  • 高価な専用ハードウェア商用Vivadoツールチェーン 依存が普及の壁
  • SpinalHDL ベースのゲートウェアは業界標準ではなく、教育・普及に不向き
  • オープンソース化は資金難によるもので、 法的な所有権問題 も未解決
  • 本プロジェクト はこれらの課題を克服し、 真のオープンソース精神 で展開

開発対象ハードウェア・ソフトウェア

  • 安価なArtix7 FPGAボード (4ポート1000Base-T搭載)を選定
  • オープンソースツール (OpenXC7等)で開発可能
  • 全ゲートウェアをVerilog/SystemVerilog で記述し、産業界でも通用する設計
  • 外部PC不要、自己完結型システムを目指す

関連参考資料

  • Wireguardソフトウェア実装(Netbird, Tailscale, Linux Kernel)
  • Blackwire 100Gbps Wireguard
  • Corundum(オープンソースFPGA NIC)
  • ChaCha20-Poly1305暗号RTL
  • Cookie Cutter SOC, RISC-V ISS, 10Gbps Ethernet Switch
  • OpenXC7(Xilinx Series7向けオープンソースツール)
  • Alex’s Ethernet Stack, Amina’s ADASEC-SDN

プロジェクト開発計画

  • Phase1(現行段階) :PoC(概念実証)、将来展開への足掛かり
  • Phase2以降 :チャンネル数増加、GUI管理アプリ対応等、コミュニティのフィードバックを反映

想定課題

  • HW/SW分割・連携・負荷分散 の設計と最適化
    • 外部PC非依存、 オンチップRISC-V CPU と組み合わせた組込みSWの開発
  • HW/SW協調開発・統合・デバッグ
    • 標準シミュレーションは非現実的、 VProc ISS 等の新技術を活用
    • 開発者向けに リモートアクセス可能なテストラボ を設置
  • 実機・高速動作検証
    • SystemVerilogやFPGAプリミティブへの オープンソースツール対応度
    • Blackwireでも苦労した タイミング閉鎖・デバイス利用率・配線混雑 への対策
  • 資金調達
    • Blackwire同様、 資金不足リスク を認識し、無理のない進行管理

進捗状況(WIP)

  • Take1 :ボード初期化、Wireguardエコシステム調査、設計青写真策定
    • ボード・SWプラットフォームの習熟、LED点滅・イーサネット動作確認
    • SOCアーキテクチャ・データパス・HW/SW分割・検証戦略策定
    • 主要暗号(ChaCha20, Poly1305, Curve25519, blake2)と既存実装の詳細比較
    • Corundumや10GE Switch等のIPブロック調査・活用
  • Take2 :基本的なWireguardリンクのハードウェア実装
    • RTLブロック統合、手動プリセットチャンネルでのデータパス構築
    • ChaCha20-Poly1305は 必ずハードウェア実装、Curve25519・blake2は当面ソフトウェア対応
    • FPGAタイミング閉鎖・利用率・配線混雑の課題解決
    • CI/CD環境でのcocoTB DV・テストケース作成
  • Take3 :組込み管理ソフトウェア(Control Plane)の開発・統合
    • ソフトRISC-Vプロセッサ上でのファームウェア開発
    • HWブロックの設定・管理、低頻度管理パケットの処理
    • KMM(Key Management Module)機能の実装
  • Take4 :VPNトンネルのセッション管理
    • セッション初期化・維持・安全なクローズ手順の確立
    • 一時鍵や機密情報の安全消去
  • Take5 :テスト・プロファイリング・OpenXC7への移植
    • 実機動作検証・バグ修正・性能評価
    • OpenXC7へのポーティングとタイミング閉鎖
    • オープンソース開発者との連携によるツールバグの報告・解決
    • 魅力的なGithubリポジトリの整備・ドキュメント更新
  • Take6(時間が許せば) :フロー制御モジュール
    • VPNトンネル内のデータ流量管理ソフトウェアの開発

設計方針とアーキテクチャ

  • HW/SW分割方針
    • WireguardノードはIPルータ+Wireguardプロトコルサポートとして設計
    • 制御プレーン :ソフトCPU上のソフトウェアで管理(IPルーティング・セッション・鍵管理)
    • データプレーン :RTLで実装し、ワイヤースピードでIPルーティング・暗号処理
    • 制御トラフィック (ハンドシェイク等)と データトラフィック (ユーザ通信)の明確な分離
  • ハードウェア構成
    • ソフトCPU(Boot ROM・DDR3 SDRAMコントローラ搭載)
    • データプレーンは全てFPGA上でRTL実装
    • 制御プレーンとデータプレーンの明確な役割分担

本プロジェクトは、 低コスト・高性能・オープンソース のWireguard FPGA VPNを目指し、 実践的な開発計画・課題認識・設計方針 を明示している。既存の商用/クローズドな障壁を打破し、 教育・研究・実運用 まで幅広い普及を目指す。

Hackerたちの意見

もうちょっと詳しい人に説明してもらわないと分からないな。VPNってどうやって機能するの?FPGA版が必要なのは何で?これは内部VPNなの、それともインターネットに接続するためのやつ?

READMEのこの部分が「なぜ」の答えを結構うまく説明してるよね。

Wireguardのソフトウェアとハードウェアの実装はすでに存在する。ただし、ソフトウェアのパフォーマンスはワイヤの速度には遠く及ばない。 既存のハードウェアアプローチは、非常に高価で、独自のクローズドソースのIPブロックやツールに基づいている。 このプロジェクトの目的は、SystemVerilog HDLで書かれたWireguardのFPGAオープンソース実装でこれらのギャップを埋めることだ。FPGAで実装することで、プロプライエタリなブラックボックスの懸念なしに、ハードウェア実装の速度を享受できる。

ただの推測だけど、これはIoTとかその辺りのためのものだと思う。デバイスをVPNに接続したいなら、プロトコルを実装する何かが必要だよね。組み込みの世界ではサイクルが貴重だから、マイコンでやりたくない。設計の中で別のマイコンにオフロードすることもできるけど、その場合はFPGAを使ってハードウェアレベルでやる方が理にかなってるかも。これを「ネットワークインターフェースチップ」と考えると、普通のIPじゃなくてWireguardを使う感じ。

NIC自体に計算集約的な部分を統合するってことだね。ハードウェアでやる理由は効率を上げるため(時にはパフォーマンスも、ただソフトウェア/CPUのWireguardはすでにかなり良いけど)。これは、Wireguardプロトコルをサポートする低消費電力で小型化された効率的なハードウェアへの第一歩かもしれないし、作者たちにとっては楽しいプロジェクトでもあるんだろうね。 :)

プロジェクトのメンバーじゃないけど、私の見解はこうだ:あなたのコンピュータやスマホでWireGuardアプリを動かして、接続をタップすると、オフィスやクラウドにある小さなネットワークボックス(「FPGAゲートウェイ」)への暗号化されたトンネルが作られる。そこからは、たとえ自宅や旅行中でも、アプリは会社のネットワークにいるかのように振る舞う。FPGAボックスの理由は、ソフトウェア実装が遅すぎるし、既存のハードウェア実装は高すぎるから。内部用かインターネット用か:両方だよ。

「VPN」ってのは、ノートパソコンをWi-Fiルーターに接続するための仮想的なエミュレートされたネットワークケーブルのことだよ。多くの企業がその言葉を、有料のクラウドベースのインターネットサービスとして使っているだけなんだ。タクシー会社が自分たちを「車輪」会社と呼ぶようなもので、物理的なオブジェクトを指しているのか、サービスを指しているのかが曖昧になってる。VPNは通常ソフトウェアで処理されていて、その処理は通常マルチステップなんだ。だから、レイテンシーやジッター、パケットの種類ごとの処理時間などが変わることがある。このFPGAベースのものは、いくつかのアルゴリズムやプログラムを固定レイテンシーで実行できるから、ソフトウェアの関数呼び出しに依存せずに条件を連鎖させることができる。おそらく、これによってソフトウェアアプローチよりも速くて安定しているんだろうね。

WireguardはポイントツーポイントのVPN接続を作るためのプロトコルとプログラムだよ。シンプルだから(OpenVPNのような代替と比べて)、それがカーネルモジュールになってすごく速くなったのが特徴なんだ。この人たちは、できるからFPGAに実装したんだよ。

FPGAに触ったのは何年も前だけど、これには興味が湧いてきた。プロトコル処理をルーティングから分離して、どれだけ軽量(FPGAのサイズや電力効率)にできるか見てみたいな。ルーティングにはあまり興味ないけど、低消費電力のIoTトラフィックを守るのは確かに面白い。

「従来のソリューション(OpenVPN / IPSecなど)が力尽きかけている」って言ってるけど、その理由や証拠が全くないよね。IPSecには議論の余地があると思うけど、何年も使ってないから。だけど、OpenVPNが「力尽きかけている」っていう証拠は全く見当たらない。これについての理由を知りたいな。もしかして「これが5年以上前のものだから、新しいものの方が自動的に良いに違いない」っていう感情なのかな?もし私があまりにもシニカルならごめん、最近そういうのを見すぎてるんだ。

あなたはちょっと注意を払っていないみたいだね。PIAみたいな商用VPNも、今では従来のVPNスタックの代わりにWireguardを使ってるし、Tailscaleやその周辺の会社もWireguardソリューションに置き換え始めてる。理由はいろいろあるけど、主なものはパフォーマンスが劇的に良くなって、セキュリティもスタック自体が小さくてシンプルだから保証しやすいし、設定もかなり柔軟で、自分が欲しい動作を得るのが簡単だからだよ。

Wireguardはゆっくりとその領域を侵食していて、これはいいことだよ。Wireguard、OpenVPN、IPSecの非常に教育的な比較があるんだけど、Wireguardが他のソリューションに比べてどれだけ管理しやすいかを示していて、速度の違いも測定して説明してるよ: https://www.youtube.com/watch?v=LmaPT7_T87g すごくおすすめ!

面白いことに、今ちょうど自分のデバイスで試してみたら、同じ設定でWireguard VPNの速度がOpenVPNの5倍速かったよ。

彼らが力尽きてるとは言えないけど(そもそも力がなかったし)、OpenVPNはいつも設計とエンジニアリングがひどかったし、IPSecは選択肢が多すぎて互換性が悪いんだよね。

OpenVPNは、他のどんなものと比べても設定がひどいし、パフォーマンスも悪い。ここ数年、Wireguardベースのソリューションに置き換わって、企業でも個人でもほとんど使われなくなってるのを見てきたよ。

これが役立つシナリオが思いつかないな。「フルスロットル、ワイヤースピードのハードウェア実装のWireguard VPN」って言ってるけど、たったの4つの1 Gbpsポートのボードで実装してるんだよね… Wireguardの標準ソフトウェア実装(Linuxカーネル)は、すでにGbpsリンクを飽和させることができるし(ワイヤースピード、確認済み)、ミドルレンジのCPUで10 Gbpsに近づくこともできるよ: https://news.ycombinator.com/item?id=42172082 もし4つの10 Gbpsポートを持つプラットフォームを作ってたら、面白くなっただろうけど、ハードウェアとビットストリームはほぼゼロから再開発しなきゃいけないね。

なんか助成金ソフトウェアっぽい雰囲気があるね。RTLからエンドツーエンドで監査可能になる可能性は面白いけど、一般的にWireguardのパフォーマンスは、大きなルーティングテーブルと小さなMTUがあると落ち込むから、VPNエンドポイントサーバーで苦しむかもしれないけど、このプロジェクトは最悪のルーティングxパケットシナリオでもラインスピードを目指してるみたいだね。

面白いことに、多くの人がVPNで10 Gbpsを出すのは不可能だと思ってるんだよね。2年前の/r/mikrotikの投稿を思い出すけど、みんなOPに不可能だって言って、引用や情報を出してたけど、結局うまくいったんだよね: https://old.reddit.com/r/mikrotik/comments/112mo4v/is_there_...

個人的には、CorundumにWireguardが追加されたらいいなと思うけど、そうなると値段が高くなって、趣味の人たちからは評価されないだろうね。

PCが10Gbpsできるなら、他の処理に使えるサイクルは残ってるの?

概念的には面白いけど、実際のエンドツーエンドの実装にはまだかなりの距離があるみたいだね。ちょっと学術的な助成金ソフトウェアの匂いがするけど、完成することを願ってるよ。RTLから完全に利用可能なソースは、監査の観点から非常に興味深いし、1Gラインスピードのパフォーマンスは、最近のデスクトップハードウェアなら簡単に達成できるけど、最悪のシナリオ(大きなルーティングテーブルと小さなフレーム)でもかなり尊敬できるものだよ。アーキテクチャは理にかなってるし(ソフトウェア管理のハンドシェイクがハードウェアパケットパイプラインを設定する)、WireGuardはほとんどのコンテキストで加速が欠けてるから(新しいIntel QATはChaCha20を加速できるらしいけど、実際にどうやって動かすかを考えるのは本当に頭を悩ませるね)、ハードウェア実装をするには面白い場所だと思うよ。

Wireguardは最高だと思うし、俺はそれだけを使ってるよ。ただ、旅行中にホテルのWi-Fiで仕事をするためのインターネットでは、TCPポート443は常に開いてるから、OpenVPNはそのポートで動かせば常に使えるんだ。Wireguardの場合、信頼できる常に開いているUDPポートがないんだよね。ポート123や53はたまに使えるかもしれないけど、保証はできない。だけど、他のアプリケーションに関しては、Wireguardが最初の選択肢だね。

Wireguardには、信頼できる常時オープンのUDPポートがないんだ。ポート123や53は時々使えるかもしれないけど、保証はできないよね。そういう場合、udp2rawみたいなので通せないの?たぶんパフォーマンスは悪くなるだろうけど、ホテルのネットワークだから、そもそもひどいことが多いしね。

うん、Wireguardにはすごく愛着があって、初期の頃にちょっと貢献したこともあるけど、どこでも(カフェやホテル、病院など)dsvpnがうまく動いてるのを見てきたよ(シドニー空港を除いて - あそこのwifiは最悪)。 [dsvpn]: https://github.com/jedisct1/dsvpn

一部のVPNアプリは、TCP上でWGをトンネルする手段を提供してるよ。速度は落ちるけど、UDPをブロックしてるサービスが高速度を提供することはあまりないから、あんまり気にしなくてもいいかもね。

ちょっとバカな質問だけど、関連してるから聞いてみるね。なんでほとんど誰もL2の10ギガスイッチを作らないの?Ubiquitiが8ポートのL2を出してるけど、それくらいしか見たことないな。

具体的に消費者向けの製品のことを言ってるの?CiscoやJuniper、Aristaなどからはたくさんの10GbEスイッチが出てるよ。

Mikrotikは結構いろいろあるよ。私はCRS306とCRS312を数年使ってて、すごく満足してる。

CiscoやJuniperとかは除いて?eBayで32ポートの10Gが安く手に入るかも。AmazonやAliExpressにもあるし、ホワイトラベルの選択肢もたくさんあるよ。

つまり、ほとんどのベンダーがより速いポートスピードに移行してるってこと?でも、遅い10Gのオプティクスもまだ使えるし、名目上のポートスピードが高くても、ポートはダウンするよ。

すごくクールなプロジェクトだね!ポートごとに1Gbps以上の性能を持つデザインが見られることを期待してるよ!最近、Debianを使って、COTS Zen4マシンと特別に調整したLinuxカーネルビルドで、LRファイバーリンク用の完全にLayer2透明な25Gbps以上のWireguardベースのソリューションを作ったんだ。最適化されたFPGAがそれと比べて何ができるのか、すごく興味あるな。

Macsecはいつ存在するの?

これはすごく面白いプロジェクトだね!今日までSystemVerilogのことを知らなかったよ。

プロジェクトページ: https://nlnet.nl/project/KlusterLab-Wireguard/