無線LANのアクセスポイント

派遣先の大学は、広い敷地に何棟もの建物が建っており、それぞれで無線LANが使えるようになっています。しかも、教室や研究室でも必ずパソコンを使うことから、どこでも無線LANが使えるようになっています。

そのため、無線LANのアクセスポイントもたくさんあります。さっき、数えてみたのですが、200台近い台数でした。それを2台のコントローラで管理しています。1つのコントローラにつき100台とは、ちょっと驚きでした。

それだけあると、もう、どうなっているか正直わかりません。なんか、あの建物のあの場所は、無線LANが快適に使える、みたいことがあるようです。ちなみに、今いる事務所は、遅いことで有名です。

最近、無線LANのコントローラから、管理しているアクセスポイントの情報を、SNMP で取れることを発見しました。どこかにメーカー製の管理ツールがインストールされていると思うのですが、見たことは1度もありません。きっと、メンテでたまに来る人が、何かあったらそこを確認するのでしょう。

SNMP で情報を取れるのであれば、MRTG とか、munin でもグラフにして状況を確認することができそうです。munin は、簡単なプラグインを作ってあげれば、グラフにするのは難しくなさそうなので、これを使うことにしました。
実は、ネットで読んだ記事に触発されました。なんでも、それまで有線LANがメインだった事務所のネットワークを、無線LANでの管理を切り替えて、その管理に munin を活用している、というものでした。やはり、こういうグラフは管理するうえで必要なんですよね。昔は、MRTG をいろいろな場面で活用していたのを思い出します。

無線LANの各アクセスポイントの状況を取り出すには、まず、ネットで MIB を調べることから始めます。無線LAN のコントローラのメーカーが、PDFで公開していたので、参考にしました。昔、Linuxサーバーのリソース管理を MRTG で始めたときもなかなか情報がなくて手探りで始めたのですが、こっちも同じような感じです。ただ、MIB が解れば、なんとかなります。

幸い、アクセスポイントに接続した機器の数を出力する MIB が用意されていました。できれば、エラーパケット数とかも取りたい、と思ったのですが、見つけられませんでした。ネットワーク系のドキュメントは、読みにくいし情報の一部しかネットに公開されていないような気がします。Linux と違って個人でなんとかできるような物でないだけに、しょうがない。

とりあえず使う MIB を決めたら、そのに合わせて snmpwalk を使って情報を取り出し、munin に合わせて加工します。始めは、csh で作り始めたのですが、対象が多すぎるのでなんとか情報を見えやすくしないと管理できません。そこで、ruby で作り変えした。

とりあえずプラグインとして用意したのは、こんなのです。

#!/usr/bin/ruby
#
# SNMPにより、無線LANのアクセスポイントに接続している台数を調べるスクリプト
# 各APを管理しているコントローラに対して問い合わせを行う
# ただし、2GHzと5GHzの両方を使えるAPに対しては、5GHzのみ確認する
# Aruba MIB : wlanAPRadioNumAssociatedClients
# OID:  .1.3.6.1.4.1.14823.2.2.1.5.2.1.5.1.7.{MAC ADRESS}.{TYPE}

CMD = "/usr/bin/snmpwalk "
OPTION = "-v 2c -c {コミュニティ名} "
CONTROLLER = "{コントローラのIPアドレス} "
BASE = ".1.3.6.1.4.1.14823.2.2.1.5.2.1.5.1.7."
AWK = " | awk -F \":\" '{gsub(\" \", \"\", $4);print $4;}'"

# APName    IPaddress         MACaddress             RadioType
APs = [
 [ "GK1011", "192.168.???.???", "0.36.108.207.xxx.xxx", ".2" ],
 [ "GK1021", "192.168.???.???", "0.36.108.207.xxx.xxx", ".2" ],
 [ "GK1031", "192.168.???.???", "0.36.108.205.xxx.xxx", ".2" ],
]

if ARGV[0] == "config" then
  print("graph_title AP_Clients [ dokoka ]\n")
  print("graph_category Wirless AP\n")
  APs.each { |tmp|  
    print( tmp[0], ".label ", tmp[0], "\n" )
  }
else
  APs.each { |tmp|
    program = CMD + OPTION + CONTROLLER + BASE + tmp[2] + tmp[3] + AWK
    val = `#{program}`
    print( tmp[0], ".value ",  val )
  }
end

ruby で作ったので各アクセスポイントの情報をまとめて書けました。管理台帳には、ホスト名とIPアドレスのみしか記載してないので、別途コントローラからIPアドレスとMACアドレスを取得して調べました。

このメーカーは、MIB にアクセスポイントのMACアドレスを指定する必要があります。人が見るときは、ホスト名で設置場所などを調べるので、この辺の情報をどこかにまとめておく必要がありそうです。

それを、一覧を取ってみたところ、応答の無いアクセスポイントもありました。後から確認してみる必要がありそうです。それと予想どおり、がらがらのアクセスポイントと結構混んでいるアクセスポイントの接続している機器の差が大きいこともわかりました。設置できる場所に制約があるので、ある程度はしょうがいないのでしょうが、こんなにあるのにもったいないような気もします。

後日、役にたてばいいなと思いつつ、1週間くらいグラフができるの待ってみます。しかし、大学は夏休みなんで、しばらくは調整かな。雪が降る頃には何か結果がでればいいなと思ってます。