Posted on Fri Oct 09 22:32:50 +0900 2009 by nabeken
サーバの状態を監視するツールであるmuninのIPv6対応に挑戦しました。結果、無事にIPv6経由で値を取得することができるようになりました。その顛末です。
muninのIPv6対応は2年前からすでに要望が上がっていました。しかし、現状もIPv6対応はされていません。理由はmuninが使っているライブラリNet::Server
のupstreamがIPv6対応を行なっていないためです。 そこで、自力でNet::Server
をIPv6対応することでmunin-nodeのIPv6化を試みました。
Net::Serverの成果物はgithubで公開しています。
対応したebuildも公開しています。
次にmunin本体のIPv6対応です。こちらは簡単でmunin-updateで使用しているIO::Socket::INET
を機械的にIO::Socket::INET6
へ置き換えるだけです。今回はプラグインは数が多いので無視しています。 成果物はパッチで公開しています。
対応したebuildも公開しています。
今回はやや手抜きをしてすべてIPv6のソケットを使っています。そのため、IPv4からの通信はすべて::ffff:<IPv4ADDR>
に見えてしまいます。そのため、allow, denyを修正する必要があります。例:
allow ^127\.0\.0\.1$
は
allow ^::ffff:127.0.0.1$
になります。IPv6はそのまま書けます。ちなみに、IO::Socket::INET6のバージョンが古いと、ホスト名に’*’を渡してもIPv4でしかbindしないというバグがあります。最新版を使いましょう。
一応、しばらく寝かせたらNet::Serverへ還元しようと思いますが、Net::Server自体もあまりメンテされていないため需要があるかもわかりません。