Saya menerapkan solusi pemantauan jaringan untuk jaringan yang sangat besar (sekitar 5000 perangkat jaringan). Kami ingin semua perangkat di jaringan kami mengirim perangkap SNMP ke satu kotak (secara teknis ini mungkin akan menjadi sepasang HA kotak) dan kemudian memiliki kotak yang meneruskan perangkap SNMP ke kotak pemrosesan nyata. Ini akan memungkinkan kami untuk memiliki beberapa kotak back-end yang menangani jebakan, dan untuk mendistribusikan beban di antara kotak-kotak ujung itu.
Salah satu fitur utama yang kita butuhkan adalah kemampuan untuk meneruskan jebakan ke kotak tertentu tergantung pada alamat sumber perangkap. Ada saran untuk cara terbaik untuk menangani ini?
Di antara hal-hal yang kami pertimbangkan adalah:
- Menggunakan snmptrapd untuk menerima jebakan, dan membuatnya meneruskannya ke skrip perl handler yang ditulis khusus untuk menulis ulang jebakan dan mengirimkannya ke kotak pemrosesan yang tepat
- Menggunakan beberapa jenis perangkat lunak load balancing yang berjalan pada kotak Linux untuk menangani ini (mengalami kesulitan menemukan banyak program load balancing yang akan menangani UDP)
- Menggunakan Load Balancing Appliance (F5, dll)
- Menggunakan IPTables pada kotak Linux untuk merutekan perangkap SNMP dengan NATing
Kami saat ini telah mengimplementasikan dan sedang menguji solusi terakhir, dengan kotak Linux dengan IPTable yang dikonfigurasikan untuk menerima jebakan, dan kemudian tergantung pada alamat sumber jebakan, tulis ulang dengan tujuan nat (DNAT) sehingga paket dikirim ke server yang tepat. Sebagai contoh:
# 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
Ini harus bekerja dengan efisiensi yang sangat baik untuk routing perangkap dasar, tetapi membuat kita benar-benar terbatas pada apa yang kita bisa mach dan filter dengan IPTable, jadi kami khawatir tentang fleksibilitas untuk masa depan.
Fitur lain yang benar - benar kita sukai, tetapi bukan "harus dimiliki" adalah kemampuan untuk menduplikasi atau mencerminkan paket UDP. Mampu mengambil satu jebakan masuk dan mengarahkannya ke berbagai tujuan akan sangat berguna.
Adakah yang pernah mencoba salah satu solusi yang mungkin di atas untuk perangkap SNMP (atau Netflow, UDP umum, dll) penyeimbangan beban? Atau adakah yang bisa memikirkan alternatif lain untuk menyelesaikan ini?
sumber
Masalah utama Anda adalah, bagaimana Anda tahu ip sebenarnya dari perangkat tempat Anda menerima jebakan?
Jika Anda menggunakan SNMP v1, Anda bisa mendapatkan ip dari header jebakan. Jika Anda menggunakan perangkap v2 atau v3, Anda harus mengkorelasikan snmpengine id ke ip yang sebelumnya Anda ambil dari perangkat. Engineid biasanya bukan item konfigurasi wajib untuk sebagian besar implementasi SNMP, dan karenanya Anda tidak dapat sepenuhnya bergantung pada itu saja.
Fallback adalah bahwa Anda dapat menggunakan ip sumber dari header paket udp. Tentu, ini akan gagal, jika perangkap Anda dialihkan melalui EMS / NMS lain atau jika Anda memiliki NAT antara perangkat dan aplikasi mgmt Anda.
Jika Anda tidak perlu mendukung NAT / forwarded traps dari NMS lain, maka cukup buat salinan paket udp, dan rutekan berdasarkan ip
Jika Anda perlu mendukung itu, Anda harus mengurai perangkap SNMP dan memeriksa kecocokan id mesin untuk v2 / v3, untuk v1 Anda dapat membacanya dari bidang alamat agen di header SNMP.
sumber
satu lagi peretas berbasis netfilter:
[asumsi - semua perangkap dikirim ke 10.0.0.1, yang kemudian mengarahkan mereka ke 10.0.0.2, 10.0.0.3, 10.0.0.4]
selama Anda memiliki perangkap snmp satu paket - panjang - ini akan menyebarkan beban dengan baik - dalam hal ini di 3 mesin. [Meskipun saya belum mengujinya].
sumber
Saya pikir jawaban dari chmeee adalah cara yang tepat untuk pergi. Singkirkan UDP dan SNMP di awal proses yang Anda bisa, mereka mengerikan untuk dikelola.
Saya sekarang sedang membangun sistem yang akan menempatkan semua acara (termasuk perangkap) pada antrian JMS dan kemudian menggunakan semua keajaiban perpesanan perusahaan untuk melakukan load balancing dan failover.
sumber
Untuk mendapatkan IP pengirim asli, Anda dapat mencoba menambal snmptrapd dengan tambalan ini - https://sourceforge.net/p/net-snmp/patches/1320/#6afe .
Itu memodifikasi payload, sehingga header IP akan tetap utuh, sehingga mereka tidak masuk ke routing dan / atau NATting Anda.
sumber