Masteries

技術的なことや仕事に関することを書いていきます.

Mackerelでnasneを監視する 〜mackerel-plugin-nasne〜

この記事は, 「OSS紹介 Advent Calendar 2017」です.

qiita.com

昨日の記事は, id:mackee_w さんの「Rin - Redshift data Importer by SQS messaging - のご紹介」でした.

qiita.com

ここまでのあらすじ

id:mackee_w さんに, 「何か書いてよ!」と言われたので, 最近見つけて「最高!」と思った, 小粒だけどぴりりと辛いMackerelのプラグインをご紹介します.

Mackerelのプラグイン

Mackerelですが, 最近サードパーティプラグインのインストール機能が公式から提供されたりと, プラグイン周りがめちゃくちゃ熱いですね.

mackerel.io

ただ単にmackerel-agentをインストールするだけだと, 基本的なメトリックスしか取得できませんが, そこにプラグインを利用することで, 様々なメトリクスを取得し, Mackerelで管理/可視化することができるようになります.

「どんなプラグインがあるんだろう?」と興味を持った方は, Mackerelチームが誇るCRE, id:Soudai が「Mackerel プラグインアドベントカレンダー(全部CRE) Advent Calendar 2017」というのをやっているので, そちらを見てみると良さそうです.

qiita.com

mackerel-plugin-nasne

というわけで本題で, この記事では「mackerel-plugin-nasne」の紹介をします.

github.com

その名の通り, ソニーのネットワークレコーダー/メディアストレージの「nasne」を監視するプラグインです. 設定も簡単で, プラグインをインストールしてパスを通した上で, mackerel-agent.confに,

[plugin.metrics.nasne]
command = "/path/to/mackerel-plugin-nasne 192.168.11.3"

このように, nasneのIPアドレスを引数として渡して実行してあげるとOKです.

f:id:papix:20171202131622p:plain

このように,

  • HDDの最大容量/残り容量/使用容量 (USBで接続した外付けHDDも含む)
  • 録画された番組の数/録画失敗した番組の数

...を可視化することができます. 上の画像は, カスタムダッシュボードでnasneに関するメトリックを集めている様子になります.

ここから更に, 録画を失敗したらMackerelでアラートを出すとか, HDDの残り容量が減ったらアラートを出すとか出来ると, nasneの運用が捗りそうです.

次は...

yoku0825さんの「ytkit - Yoku-san no ToolKITについて」です. お楽しみに!

EdgeRouter XでVPN接続した時にコマンドを実行する

EdgeRouter Xを使って自宅のネットワークにVPNで接続出来るようにすると, どうしても「自分以外がVPNを利用して, 不正に自宅ネットワークに入り込んでいないか?」という所が気になってきます.

いろいろと解決策はありますが, ここでは「VPN接続が行われた時に通知をする」ということで, 不正利用に気付きやすくする(自分がVPNに接続していない時にVPN接続の通知が行われる = 不正利用が行われた, と判断できる)仕組みを作ってみましょう.

そのためには, EdgeRouter XにVPN接続した際, 任意のコマンドを実行できるようにすればよさそうです. そのコマンドの中で, いい感じにメールを送信するなり, SlackやLINEなどのAPIを利用してメッセージを送信するなどすれば良いでしょう.

なお, 今回は以下のページなどを参考にして, L2TP/IPsecで構築したVPNを対象とします.

yabe.jp

方法

結論から言えば, /etc/ppp/ip-up.d/l2tpdというファイルを作って, そこにパーミッション755を与えれば, VPN接続する度にそのファイルを実行してくれます.

例えば, このファイルに,

#!/bin/sh

echo "connected!" >> /tmp/vpn.log

というコードを書いておけば, VPNに接続する度にこのファイルが実行され, /tmp/vpn.logconnected!という文字列が書き込まれる訳です.

逆に, /etc/ppp/ip-down.d/l2tpdを設置してあげれば, VPN接続を切断したタイミングでそのファイルが実行されるので, 切断の通知なども出来ます.

なお, これらのファイルは, rootユーザーでなければ書き込むことはできないので,

$ sudo su -

などでrootユーザーになってから設置/変更などする必要があります. 気をつけましょう.

EdgeRouter XでVPN接続した時にEdgeRouter Xのdnsmasqで名前解決する

tl;dr

community.ubnt.com


EdgeRouter Xは, 次のサイトで紹介されているようにVPN接続にも対応しています:

yabe.jp

自宅の外からVPN接続をした時, EdgeRouter Xで動いているdnsmasqを使った名前解決をしたいのであれば, 次のような設定をしなければなりません:

$ configure
# set service dns forwarding options "listen-address=xxx.xxx.xxx.xxx"
# commit
# save

なお, xxx.xxx.xxx.xxxについては, VPNで接続した時に見えるルーターのIPを指定してあげましょう.

スペシャルサンクス

EdgeRouter Xに, 自宅の外からpingする

今住んでいるマンションは無料でインターネット回線が提供されているのですが, 時間帯によっては余りにも遅くなる(夜23時頃になると, 下りが1Mbpsとかになる)ことがあり, 余りにも人権がなく限界を感じたので, 別に敷設されている有料のケーブルテレビによるインターネット回線(既に敷設されているので, 割引などが効いて初期費用無料/月額3000円くらいで使える)を契約しました.

そのオプションとして, 無料でグローバルIPを1つもらえたので, そろそろEdgeRouter Xを整備するか... となり, 最近EdgeRouter Xをいろいろ触っていたのでした.

自宅の外からpingする

...で, 結論から言えば, EdgeRouter Xは, デフォルトでは外から来る通信は全て弾いています. その為, 初期状態では自宅の外のネットワークからは, グローバルIP経由でEdgeRouter Xに対してpingすら打つことができません.

最初, 何をやってもEdgeRouter Xと疎通が出来ず, 「一体何が...?」と混乱しまくっていました(流石にpingくらいは通るでしょ, と思い込んでいました...).

自宅の外からのpingできるようにする

ブラウザでEdgeRouter Xの管理画面に行き, 「Firewall/NAT」から「Filewall Policies」を選び, 「WAN_LOCAL」の「Actions」から, 「Edit Ruleset」を選びます.

f:id:papix:20171021112009p:plain

すると, このような画面になります(このスクリーンショットは, 既にいろいろ設定した後のものです. 最初は, 「Allow established/related」と, 「Drop invalid state」のみ設定されています).

f:id:papix:20171021112734p:plain

「Add New Rules」を選び, 「Action」は「Accept」に, 「Protocol」は「Choose a protocol by name」から「icmp」を選びます.

f:id:papix:20171021112356p:plain

「Save」を押して保存し, この作られたルールをドラッグして, 最初からあった「Allow established/related」と「Drop invalid state」の間に移動して, 最後に「Save Rule Order」をクリックすればOK.

これでめでたく自宅の外からEdgeRouter Xに対してpingを打つことができます.