用於網路監控的路由/代理 SNMP 陷阱(或 Netflow、通用 UDP 等)的解決方案?
我正在為一個非常大的網路(大約 5000 個網路設備)實施網路監控解決方案。我們希望我們網路上的所有設備都將 SNMP 陷阱發送到單個盒子(從技術上講,這可能是一對 HA 盒子),然後讓該盒子將 SNMP 陷阱傳遞給真正的處理盒子。這將允許我們有多個後端盒處理陷阱,並在這些後端盒之間分配負載。
我們需要的一個關鍵特性是能夠根據陷阱的源地址將陷阱轉發到特定的盒子。對於處理這個問題的最佳方法有什麼建議嗎?
我們考慮過的事情包括:
- 使用 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 數據包的能力。能夠獲取一個傳入陷阱並將其路由到多個目的地將非常有用。
有沒有人嘗試過上述任何可能的 SNMP 陷阱(或 Netflow、通用 UDP 等)負載平衡解決方案?或者任何人都可以想到任何其他替代方案來解決這個問題?
一位同事剛剛給我看了採樣器。這個工具看起來幾乎是我正在尋找的完美解決方案。從該工具的網站:
這個簡單的程序在網路埠上偵聽 UDP 數據報,並將這些數據報的副本發送到一組目的地。可選地,它可以執行採樣,即不是轉發每個數據包,而是僅轉發 N 中的 1 個。另一個選擇是它可以“欺騙”IP 源地址,以便副本看起來來自原始源,而不是中繼. 目前僅支持 IPv4。
它可用於將 Netflow 數據包、SNMP 陷阱(但不通知)或 Syslog 消息分發給多個接收者。