不思議な現象

本日、客先でGenieATMのインストール作業をしていたのですが、GenieATMがなぜかどうしてもNetFlowを受け取ることができない、という事象に出くわしました。
 
設定は何度見直しても問題ないし、来ているNetFlow PDUも正しい。GenieATM上でtcpdumpで確認してもきちんとフローは来ているし、しかるべきポート番号でGenieATMはきちんとLISTENしている。これで受け取れないはずはないんだが・・・。
 
と、散々悩んでたときにふとヒラメキっ! 今回のお客さんのところではちょっとした事情で少々変わったルーティング設定になっていました。NetFlow PDUはGenieATMのeth1のインターフェースから受けるようなっていたのですが、ExporterたちのIPアドレスのNextHopはeth0に向いていました。NetFlow(sFlowもそうですが)はunidirectionalなUDPストリームなので、返りのパケットを返す必要がありません。よって、このようなルーティングでも問題ないと思っていたのですが、ここに落とし穴がありました。
 
GenieATMはLinuxベースなわけですが、LinuxのReverse Path Filter (rp_filter) が今回の怪現象の真犯人! Reverse Path Filterというのは、簡単に言うと、受け取ったIPパケットのソースIPアドレスを自分のルーティングテーブルでルックアップして、NextHopがそのパケットの入ってきたインターフェースと一致しているかどうかをチェックし、異なっていれば捨てる、というものです。主にIP Spoofingを防止するために使われるわけですが、今回のケースは意図せずこれに該当してしまっていたわけです。なので、tcpdumpでパケットは見えていたのにもかかわらず、rp_filter(カーネル)で捨てちゃってたので、一向にGenieATMではフローが見れなかった、という次第。rp_filterを止めればきちんとフローが見えるようになりました。
 
いやー、はまったはまった。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください