非常に大規模なネットワーク(約5000台のネットワークデバイス)にネットワーク監視ソリューションを実装しています。ネットワーク上のすべてのデバイスが単一のボックスにSNMPトラップを送信し(技術的にはこれはおそらくHAペアのボックスになります)、そのボックスにSNMPトラップを実際の処理ボックスに渡すようにします。これにより、トラップを処理する複数のバックエンドボックスを使用し、それらのバックエンドボックス間で負荷を分散できます。
必要な重要な機能の1つは、トラップのソースアドレスに応じて特定のボックスにトラップを転送する機能です。これを処理する最良の方法に関する提案はありますか?
私たちが検討したものの中には:
- snmptrapdを使用してトラップを受け入れ、カスタム記述されたperlハンドラスクリプトに渡して、トラップを書き換えて適切な処理ボックスに送信します。
- Linuxボックスで実行されている何らかの負荷分散ソフトウェアを使用してこれを処理します(UDPを処理する多くの負荷分散プログラムを見つけるのは多少困難です)
- 負荷分散アプライアンスの使用(F5など)
- LinuxボックスでIPTablesを使用して、NATでSNMPトラップをルーティングする
現在、トラップを受信するようにIPTablesが設定されたLinuxボックスを使用して最後のソリューションを実装し、テストしています。次に、トラップの送信元アドレスに応じて、パケットが送信されるように宛先nat(DNAT)で書き換えます適切なサーバー。例えば:
# Range: 10.0.0.0/19 Site: abc01 Destination: foo01
iptables -t nat -A PREROUTING -p udp --dport 162 -s 10.0.0.0/19 -j DNAT --to-destination 10.1.2.3
# Range: 10.0.33.0/21 Site: abc01 Destination: foo01
iptables -t nat -A PREROUTING -p udp --dport 162 -s 10.0.33.0/21 -j DNAT --to-destination 10.1.2.3
# Range: 10.1.0.0/16 Site: xyz01 Destination: bar01
iptables -t nat -A PREROUTING -p udp --dport 162 -s 10.1.0.0/16 -j DNAT --to-destination 10.3.2.1
これは基本的なトラップルーティングに対して優れた効率で機能するはずですが、IPTablesを使用してフィルター処理できるものに完全に制限されているため、将来の柔軟性が懸念されます。
私たちが本当に望んでいるが、「必須」ではない別の機能は、UDPパケットを複製またはミラーリングする機能です。1つの着信トラップを取得し、それを複数の宛先にルーティングできると非常に便利です。
SNMPトラップ(またはNetflow、一般的なUDPなど)の負荷分散のために、上記の解決策を試した人はいますか?それとも、誰かがこれを解決する他の選択肢を考えることができますか?