RADIUSのサーバー・クライアント実装をRustで書いた
An English article is here: https://dev.to/moznion/released-radius-rs-2e1o
タイトルの通り、AAA (Authentication, Authorization and Accounting) のためのデファクト・スタンダードなプロトコルであるところのRADIUSのサーバー・クライアント実装をRustで書きました。
また、crates.io にもpublishしてあります: https://crates.io/crates/radius
このRADIUS実装の特徴としてはtokioを使用することで非同期 (async/await) ネイティヴな実装になっていることが挙げられます。
また、RADIUSのgolang実装であるところのlayeh/radiusを参考にして、FreeRADIUSのdictionaryをコード生成器に食わせることによって、RADIUSアプリケーションの構築で必要となるRustの定義ファイルがRFCに基づいて自動生成されるようになっています。
簡単なサーバーとクライアントアプリケーションのサンプルは以下のような感じです。
- https://github.com/moznion/radius-rs/blob/main/examples/server.rs
- https://github.com/moznion/radius-rs/blob/main/examples/client.rs
割と簡単に書けて良いですね。
なんやかや、今でもRADIUS使うことってあるじゃないですか? もしも突然、RustでRADIUSアプリケーションを書く必要が出てきた際にはぜひご利用ください。
ところで、Rustでそこそこの規模感のあるコードを書いたのは実際初めてみたいなものなので実装上の問題などあるかもしれませんが、その場合はissue等でご指摘いただけると助かります。