カテゴリー:ネットワーク周り

検索



Please click now!!

net-snmpd+mrtg の IPv6 化とその他もろもろ。(2)

前回は、mrtg が実質的に IPv6 に対応していないねぇ。って所で話が終わったのですが、そこから進展がちょっとあったので書いてみたいと思います。

net-snmp に対して IPv6 で接続したい人は前の記事を先に読んで 、その後でこの記事を読んでください。

さてと。物語りは前回からの続きなのですが、mrtg の config ファイルを記述した時、 Target に IPv6 を記述した場合 ifIndex でしかトラフィック情報が取得できない。と言う所で終わりました。

確かに、何度試してもダメだったので、debug オプションを有効にしてログを見つつソースコードなどを眺めていたら問題点を発見しました。最近の ports-current から mrtg をインストールするとmrtg-2.16.2,1 がインストールされるのですが、その時に /usr/local/lib/perl5/site_perl/5.8.9/Net_SNMP_util.pm も併せてインストールされます。こいつの中で Net::SNMP を呼んでいる時に -domain で udp/IPv4 しかセットしていないみたいなので udp/IPv6 をセットするようにしたら IPv6 でも一応動くようになりました。

修正分のパッチはこの辺りに置いておきます

このパッチを適用することにより、FQDN で問い合わせした時は ifDescr でも値が取れる事を確認できました。以下におさらいしてみることにしましょう。

・IPv6 で SNMP が取得できるもの

Target[dir_re1]: 2:public@taro6.running-dog.net:
Target[dir_re1]: \re1:public@taro6.running-dog.net:
Target[dir_re1]: 2:public@[2001:200:161:14cc::1:1]:161:

taro6.running-dog.net は DNS に IPv6 のみのアドレスが登録されています。

この設定では IPv6 では ifIndex と ifDescr でトラフィック量を取得することができました。

・取得できないもの

MAC アドレス指定(FQDN・IPv6 共に)
ifDescr 指定での IPv6 アドレスを記述した場合

とまぁ、こんな感じで ifDescr で取得できるようになったのでヨシとしておきましょう。それにしても DNS は必須になってしまうのですが・・。

後、net-snmp って --enable-ipv6 で make しても snmpwalk は IPv6 に対応していないのねぇ。DNS に IPv6 のみ登録してある FQDN を指定しても「そんなアドレス知らん。」とか言われます。/etc/hosts に書いてもダメ。snmpd が IPv6 に対応しているだけにもったいないことです・・。

さてと。ここまでは net-snmp と mrtg のお話で、前回の続きの完結編。と言う感じになります。

続きまして rrdtool に行ってみましょうか。ports 的には ports/databases/rrdtool になりますが、これをインストールすると RRDs と言う perl のモジュールをインストールしてくれて RRDs::graph と言うモジュールを使うと MRTG グラフを表示してくれます。グラフを作成する際のオプションとして IPv6 アドレスが存在した場合にどうなるのか?

正解ですが、":" は区切り文字に使われているので DEF: の設定に IPv6 アドレスがあるとまともに動作してくれません。

ports 的な rrdtool-1.3.5 のソースを見てみると rrdtool-1.3.5/src/rrd_graph_helper.c に以下のような記述が所々にあり、"[]" で囲むとか "\:" などしても全然対処できないと言うことが解ります。

    if (line[*eaten] == '\0' || line[*eaten] == ':') {
        dprintf("- no (or: empty) legend found\n");
        return 0;
    }

と、言うことで RRDs を使う場合には IPv6 を意識しないようにしないとまずいです。では、どんな時に IPv6 を使う必然性が出てくるのかとなるのですが、僕の場合、rrdfile と PNG ファイルの保存場所に IP アドレスを利用してる感じですね。

/data/mrtg/192.168.1.1/re1.rrd
/data/mrtg/2001:200:161:14cc::1:1/re1.rrd

でもって RRDs::graph では以下のようなコーテイングをしていたらこらアカンですわなー。

:
my $rrdfile = "/data/mrtg/2001:200:161:14cc::1:1/re1.rrd";
my $pngfile = "/data/mrtg/2001:200:161:14cc::1:1/re1.png";
push (@options
:
   ,"DEF:avein0=${rrdfile}:ds0:AVERAGE",  "CDEF:avein=avein0,8,*"
   ,"DEF:maxin0=${rrdfile}:ds0:MAX",      "CDEF:maxin=maxin0,8,*"
:
);
my @rv = RRDs::graph( $pngfile ,@optins : );

なので、結局 $rrdfile =~ s/:/_/g; など言う弱いことをして問題回避したのでありました。

これで、net-snmp・mrtg・rrdtools の IPv6 対応が一応終わった感じかなぁ。10Gbps 問題も回避できたし、今の所は多分これで IPv6 な世界が来ても大丈夫なような気がします。が・・。mrtg には IPv6 対応をもう少し頑張ってもらい所ではあります。

http://oss.oetiker.ch/mrtg/doc/mrtg-ipv6.en.html

こんな所読んだって Target の所がハショッて書いてありすぎで全然ダメなんだもの・・。トホホ。

くーーっ。MacOSX Leopard の /usr/sbin/snmpd は 5.4.1 使っているのに IPv6 に対応してないじゃん。 udp6:161 のオプション、そんなのねーー。とか言いやがる・・orz。これはヒサンだ・・。

つまり、どういうことかと言うと、例えば MacOSX を leopard.running-dog.net と言う FQDN で 192.168.1.30 と 2001:200:161:14cc::1:10 の二つ RR レコードを記述していた場合、mrtg.cfg の Tagrt に FQDN を記述すれば mrtg は IPv6 で問い合わせに行くことになります。

けど、MacOSX の snmpd は IPv4 にしか答えないので mrtg はエラーとなります。そして、mrtg は「IPv6 から IPv4 にフェイルオーバーしないよ。」と言う仕様なので、MacOSX への mrtg.cfg の設定における Target は FQDN ではなく、IPv4 アドレスを記述しないと正しく情報が取得できないことになります。

いやぁ・・。奥が深い・・。まず最初に監視対象機器が DNS に A と AAAA があるか確認した後、当該機器の snmpd が IPv6 に対応しているか確認してからでないと mrtg.cfg の記述が完成しないんだー・・。

と。言うこで、このネタ。ここまでにしておきましょう・・。

apache で Proxy を作ってみた。

Proxy サーバ、何が一番良いのだろう?と、思い、まず、パッとひらめいたのが squid だったので、それを利用して Proxy サーバを構築してみた。ふむ。設定を施した後はちゃんと動作してキャッシュも溜まっていくねぇ。と言う感じだったのだけど・・。

ps で確認してみると squid は一個のプロセスでしか動作していない。でもってマルチスレッドにもなっていないので、ふと「これで同時にたくさんのアクセスがあった場合どうなるんだ?」とか思い調べてみると・・。あぁら。squid はファイルハンドラがボトルネックになって大規模な運用を行うのには向いてないのねぇ(そら、squid サーバを複数台立てれば大規模サイトの運用できるのは解るけど、全然現実的しゃないじゃん;-()。というのが発覚。

default で 1024 個のファイルハンドラしか無い状態で一個の接続に三つのファイルハンドラを利用するとなると同時に接続できるのは 300 個のクライアントじゃん。ダメだこら。と言うことで別の Proxy サーバを探し始めます。

続いてトライしたのが apache の 2.2.9 。まぁ、大規模環境において動けば良いのでねぇ。他にも色々あるみたいだけど、勝手知ったると言うか・・(^^;;。

Proxy サーバと、後、キャッシュサーバとしてのみ動作させるので要らない機能は落とします。configure 時のオプションはこんな感じ。--with-mpm=worker を付けたのでスレッドな httpd として動作します。

./configure --enable-headers --enable-so
 --with-mpm=worker
 --disable-cgi --disable-cgid --disable-userdir
 --enable-proxy --enable-proxy-ftp --enable-proxy-http --enable-proxy-connect
 --enable-file-cache --enable-cache --enable-disk-cache --enable-mem-cache

さてと。インストールが終わっていよいよ設定ですが、今回は以下のようにします。


・192.168.1.200 で動作しているサーバの情報をキャッシュするための Proxy サーバを構築します。
・Proxy サーバに対して port:8080 でアクセスした場合はキャッシュしません。
・Proxy サーバに対して port:8081 でアクセスした場合はキャッシュして、その情報を利用するようにします。

オープン Proxy サーバとならないように 192.168.1.200 にのみアクセス可能なサーバとします。これでどこから接続があってもまるで利用できないものとなりますし;-)。

で、設定は大体こんな感じなのだけど、一番苦労した点が、port:8080 にアクセスした場合にキャッシュしないもしくはキャッシュ情報を利用しないで、port:8081にアクセスがあった場合はキャッシュを利用するもしくは新規に取ってきた情報をキャッシュするように動作する設定でした。

<IfModule mod_proxy.c>
ProxyRequests Off
ProxyVia On
AllowCONNECT 8080 8081
<Proxy *:8080> Order deny,allow # Deny from all Allow from all </Proxy>
<Proxy *:8081> Order deny,allow # Deny from all Allow from all </Proxy>
<VirtualHost *:8080> ProxyPass / http://192.168.1.200/
<IfModule mod_cache.c> CacheDisable / </IfModule> </VirtualHost>
<VirtualHost *:8081> ProxyPass / http://192.168.1.200/
<IfModule mod_cache.c> <IfModule mod_disk_cache.c> CacheRoot /data/httpd/cache/ CacheEnable disk / CacheMaxExpire 5184000 CacheDefaultExpire 5184000 CacheDirLevels 3 CacheDirLength 5 </IfModule>
<IfModule mod_mem_cache.c> CacheEnable mem / MCacheSize 2048000 MCacheMaxObjectCount 100 MCacheMinObjectSize 1 MCacheMaxObjectSize 10240000 </IfModule> </IfModule> </VirtualHost>
</IfModule>

Proxy ディレクティブはアクセス制限のためにしか書けないのねぇ。けっこう悲しい。僕的には <Proxy *:8080> の中に mod_cache の情報が書けるとすごーい嬉しいと思ったのだけど・・。

しょーがないので VirtualHost ディレクティブを記述して、そこで port をわけて、一個は CacheDisable、もう一個の 8081 では CacheEnable を記述すると言う、非常にややこしい設定となってしまいました。まぁ、それが apache の設定だぜぃ。と言われればその通りで、この設定をパッと思いついてしまう自分もすっかりと apache に染まっているのだなぁ(自慢か?;-P)と思ってしまうのだけど・・。

個別の設定については詳しい説明は書きませんので apache.orgのドキュメントを参照してください。

今回やりたかったのは、キャッシュを利用するポートとキャッシュを利用しないポートでサービスができる Proxy サーバが欲しかった。と言う感じでしょうか。

Aterm WR8500N 購入。

Corega の CG-WLBARGNH を購入したけど返却可能キャンペーンにより Corega に送り返した。そして、いよいよお金が振り込まれたので新しい BB ルータ兼 WifiAP としてかねてからの懸案であった NEC の Aterm WR8500N を購入した。

早速接続して PPPoE してみたが、まぁ、簡単に繋がる。HUB の部分は GiGa ポートなので RJ45 ケーブルに接続した PC から RBB のスピード計測を試してみると 70Mbps 位出るので、まぁ、速いかなぁ。と言う感じ。

でもって、無線 LAN のほうは Draft 802.11n だと言うので MacBook 2GHz の Leopard で試してみたが、今回は Corega の CG-WLBARGNH とは違い、無事に接続できたので、やはり RBB で試してみた。PPPoE は 70Mbps 出ているのでボトルネックは無い状態で試したら 20Mbps ほど出ていた。ふむー。Draft 802.11n の公称よりは遅いけど、無線 LAN で 20Mbps 出れば速いよなぁ。と言う感じで、まぁ許せるかな。

ちなみに 802.11g の NotePC で RBB を試してみたら 10Mbps 位だったので Draft 802.11n はおよそ倍の速度が出ているわけだ。

さて、細かい設定についてですが、僕は自宅にサーバを立てています。WR8500N で PPPoE するのでサーバのサービスに必要なポートは WR8500N からポートフォワードする必要があるのですが、ポートマッピングの設定では 50 個設定ができるので、サーバ上では色々なサービスを公開できる点が嬉しいです。

がっ!! もっと嬉しいことにプロトコルの転送までできる設定があるではないですかっ!!早速、プロトコルパン号 41 番を転送設定するのでありました。

display.jpg

プロトコル番号 41 番とは何か? と言われれば、IPv6 トンネルの転送です。自宅サーバが BB ルータの NAT 内にあった場合、IPv6 トンネルが掘れないのですが、BB ルータにおいて、プロトコル番号 41 番を転送することによって NAT 内のサーバでも IPv6 トンネルが掘れるようになります。

ちなみに dtcp で試したところ、無事にトンネルを掘ることが出来ました。嬉しいですねぇ;-)。

コンシューマ向けでプロトコル転送の機能を持っていることに感動しました。いちじきアライドテレシスの AR410 を買おうかと悩んでいただけに・・。

と、言うことで今回は、前回の Corega の CG-WLBARGNH とは違い、そこはかとなく大満足なのでした;-)。まぁ、値段は安いサイトで比べれば倍近くになるんですけどねぇ・・。

と、言うことで、このネタは次回に続きます。次回は IPv6 ブリッジについてです;-)。

CG-WLBARGNH を試してみた。

Draft IEEE802.11n と HUB 部分の全ポート GiGa インターフェースと言うのにあこがれて BB ルータを新調してみた。

同じようなものに去年の暮れに NEC から Aterm WR8500N が出たのだけど、これがずっと欲しいなぁ。と思っていた。しかし、Corega から CG-WLBARGNH と言うのが出たので、どっちにしようかと悩んでいるうちに、値段に負けて CG-WLBARGNH を買ってしまった。送料込で大体 9,500yen 位。

さて、自宅に届いて早速利用したのだけど、まぁ、サクサク動く。有線 GiGa ポートに接続した PC から RBB のスピード計測 で確認すると 70Mbps 位出るのでまぁ、速いなぁ。とは思った。

無線 LAN のほうは Draft IEEE802.11n 対応なんだけど、NotePC が IEEE802.11g にしか対応していないのでこれで試すと 13Mbps 位。おぉ。無線 LAN で 10Mbps 越えたんだ。とちょっと感激。

んならば MacBook 2GHz の Leopard で接続して確認するべ。と思い試したらなんとっ!! 700kbps しか出ない。これはひどいなぁ・・。まぁ、僕は MacBook にディスプレーとキーボードをつけて、本体はふたを閉じてまな板立てに立てて使っているのでアンテナが本体と干渉してこれくらいしか出ないのだろう。と安易な気持ちでいた。

なんせ、MacBook には GiGa ポートが付いているので、デスクトップ機のように使っている現状では無線 LAN を使う必要が無いので;-)。

さて、僕の家にはサーバがあるのだけど、BB ルータからポートフォワードしてサーバに転送するのだが、CG-WLBARGNH は 10 個しか転送できない。ダメダこらー・・。

更に悪いことにサーバは GiGa NIC を持っている、FreeBSD で言う所の if_re で BB ルータに接続しているのだけど、これが定期的に link Down/Up を繰り返すようになってしまった・・。せっかく GiGa ポート搭載の BB ルータを購入したのに頻繁に Down/Up が発生したら全然ダメじゃん・・。

以前利用していた BB ルータはそんなことは無かったので、相性問題かもしれないけど、 CG-WLBARGNH が悪さしているのかもしれない。GiGa ポートへの省電力機能って何よ?オン/オフはメニューで設定できないのかしら?

この辺りで、「ムムムちょっと動作おかしいぞ。」と思えてきたので、再度 MacBook を引っ張り出してきて、今度はちゃんとフタを明けて、キーボードもディスプレーも外して、由緒正しい NotePC の形で Draft IEEE802.11n を試してみた。

が・・。接続できない・・。Leopard は「タイムアウトしました。」と表示され、BB ルータ側のログも「認証 OK よん。」と表示されている。認証は wep で MAC アドレスフィルターをしているのだけど、 MAC アドレスフィルターを無効にして接続しようとしても Leopard は一向に接続できない。

しかし、他の NotePC や iPod Touch は IEEE802.11g で何の問題も無く接続できている・・。

あぁ・・。もうイヤになった・・。やっぱ NEC のにしておけば良かった・・。などと思い始める。でもって買ってきた CG-WLBARGNH の箱を見るとなにやらキャンペーンをやっている。

http://corega.jp/cp/005/

「つながらなかったらコレガが直接 "返金・返品" 受け付けます。」ってのをやっているではないかっ!! これはラッキー。と言うことで、早急に送り返したのでした。現在はコレガからの返事待ちです。

さて、ここでもう一度再確認してみましょう。

・今まで BB ルータに(100Mbpsだけど)接続していたサーバを CG-WLBARGNH に接続するようにしたら Link の Up/Down が頻発するようになり、サーバの運用に支障が出てきた。なお、Down タイムは 2,3 秒だが、NIC の復旧時間はもっとかかるため、実質一分程度 LinkDown 状態となる。

・ IEEE802.11g 対応の NotePC や iPod Touch は無線 LAN に接続でき、10Mbps 程度の速度が出るが、Draft IEEE802.11n の MacBook 2G は速度が出ない、もしくは全く接続できない状態しか体験できなかったので、CG-WLBARGNH の仕様にうたわれている Draft IEEE802.11n の恩恵がまるで受けられない。

以上の理由により、今回のキャンペーンに申し込んだのですが、この判断は妥当?

#Corega 買う時点で間違っているよ。って解答は却下;-)。本当は Cisco Catalyst 3560-E 辺りが欲しいんだから。自宅にはオーバースペックなんだけどねぇ;-P。

fon を設置してみた。

今、fon は LiveDoor と提携したのでバーゲンセールをやっている。

http://www.tsukumo.co.jp/fon/

IEEE802.11g/b の無線 AP が 1,000yen で買えるのでこれは買わない手はありません。僕は結局二個買いました。一個は自宅で、もう一個は移動時に iPod Touch のために使うことにしました。

本当は PCI GW-MF54G2 を買おうとしたのだけど流通していないし、売っていたとしても定価(6,980yen)でしか売っていないのでやめました。

と、言うことで fon の利用方法ですが、まず、何はともあれユーザ登録します。そうするとその時のユーザ ID とパスワードで他の人が設置した fon を利用することができるようになります。

さて、FON ソーシャルルーター La Fonera (ラ・フォネラ) ですが、僕は DHCP が動作しているネットワークに接続しました。そこで解ったことですが、

・FON_ で始まる SSID はみんなで利用できる 192.168.182.0/24 のネットワーク
・MyPlace で始まる SSID は自宅用のネットワークで 192.168.10.0/24 のネットワーク

と、言う、二つのネットワークが現れます。default Gateway は多分 DHCP で所得したアドレスになります。ただ、これは僕の家の場合だけかも知れませんけど。

なので、FON 自体は二つのネットワークをルーティングしていると言うことになりそうですね。それで自宅で利用する側の MyPlace 側はセキュリティが保たれている。

ちなみに FON_ で始まるネットワークはウェブ認証です。MyPlace で始まるネットワークは機器の裏にあるシリアル番号を WPA キーとして入力することによりログインできます。

さてと。これで僕は旅の時は FON と iPod Touch を持っていけばいつでもどこでもネットワークに接続できる環境ができるようになりました;-)。

ちなみに 1,000yen セールは 4/6 までです。

ADSL増速。しかし・・。

うちの家は ADSL の固定 IPv4+IPv6 の /48 (IIJmio)と マンションタイプの B フレッツのマルチホームである。

最近、自宅のサーバのウェブサーバにアクセスが増えてきたので ADSL 側を 12Mbps から 47Mbps のフレッツ・モアIII と言うのに変えてみました。

しかし、モアIIIは品質悪いなぁ。ブツブツ切れまくりなんだけど・・。NTT 側でなんちゃらって機器を変えてもらったのだけどそれでも直らない。しょーがないので今までのに戻そうかなぁ・・。

ちなみに自宅のサーバは mpd で PPPoE して それを ipnat して自宅 LAN はプライベートアドレスで利用している。更にこのサーバは NIC がもう一枚刺さっていて、DHCP で マンションタイプの B フレッツのグローバルアドレスが付いているのだけど、IIJmio 側から入ってきたパケットはそっち出ていって(こっちが default route)、Bフレッツ側のパケットははやり Bフレ側に流さなければならないのでポリシールーティングが必要なのである・・。

こーいうことは絵が無いと、文章だけではまったく解らない。と言うことはよおーく知っているんだけどね(^^;;。

それにしても ADSL をなんとかしないとなぁ・・。

いっそのこと IPv6 を捨ててしまえば、IIJmio からさくらに乗換えて値段はうんとさがるし、FreeBSD での PPPoE やめてフツーの BB ルータでどうにでもなるので、やはりそう考えると、IPv6 は不要なものなのかなぁ・・。

 
Copyright (c) 1997-2010 takachan@running-dog.net All Rights Reserved.