Unyablog.

のにれんのブログ

mackerel-plugin-strongswan を作った

Mackerel アドベントカレンダーが空いていたので、半年ほど前に作ったプラグインの話を軽くします。22 23日目の記事です*1

qiita.com

昨日は sfujiwara さんで、「Mackerel と連携する外形監視エージェント maprobe でマネージドサービスのメトリック収集を自動化する」でした。

sfujiwara.hatenablog.com

作ったもの

  • mackerel-plugin-strongswan

github.com

これは何

strongSwan という広く使われている IPSec 実装があります。

このプラグインは、 strongSwan の IKE デーモンである charon のインターフェースである vici を用いて、アドレスプールの状況や確立された SA (Security Association) の数を出力するものです。

vici は 5.4.0 からデフォルトで有効になっていますが、 swanctl を使わないパッケージの場合は無効になっていて使えないことがあるかもしれません。

libreswan には vici はないので使えません。

作った理由

SA の状況を監視したかったのですが、無かったので作りました。貼ってる SA の数が上限する様子を見て楽しんでいます。

f:id:nonylene:20181223010228p:plain

0 -> 1 になっているのは端末から接続したからですね。 1 -> 2 になってるのは常時接続しているルーターが reboot したからです。このルーター不安定でたまに reboot するのですが、その様子がよく分かります。

技術的な話

Python3 で書いています。公式に提供されているバインディングPython, Ruby, Perl だったので Python にしました。設置する場合は pipenv installpip instsall して vici モジュールを入れてください。

strongswan/src/libcharon/plugins/vici/python at e4a3ef2e4da28e4553262f4cc91f0b3e17066a71 · strongswan/strongswan · GitHub

コード自体は、 vici モジュール経由で API を叩いてメトリックにしているだけなので単純です。

mackerel-plugin-strongswan/main.py at master · nonylene/mackerel-plugin-strongswan · GitHub

その他

strongSwan は ipsec.conf に設定を書いていくという形式*2でしたが、新しく swanctl というのが開発され、strongswan.conf と同じ形式で非常に分かりやすく & 書きやすくなりました。今のところ困る点もなく使えており、おすすめです。

例えば、 left right というどっちがどっちか良く分からない名前も、localremote になっています。

wiki.strongswan.org

ちなみに、 swanctl 内部では vici を使って charon とやり取りしています。

*1:初め22日目だと勘違いしていた

*2:FreeS/Wan 由来