नेटवर्क निगरानी के लिए मार्ग / प्रॉक्सी एसएनएमपी जाल (या नेटफ्लो, जेनेरिक यूडीपी, आदि) का समाधान?


15

मैं एक बहुत बड़े नेटवर्क (लगभग 5000 नेटवर्क उपकरणों) के लिए नेटवर्क निगरानी समाधान लागू कर रहा हूं। हम चाहते हैं कि हमारे नेटवर्क पर सभी डिवाइस एक ही बॉक्स में SNMP ट्रैप भेजें (तकनीकी रूप से यह शायद HA बॉक्स की जोड़ी होगी) और फिर उस बॉक्स को असली प्रोसेसिंग बॉक्स पर SNMP ट्रैप से गुजारें। यह हमें जाल से निपटने के लिए कई बैक-एंड बॉक्स रखने और उन बैक एंड बॉक्स के बीच लोड वितरित करने की अनुमति देगा।

एक प्रमुख विशेषता जो हमें चाहिए वह है जाल के स्रोत पते के आधार पर जाल को एक विशिष्ट बॉक्स में अग्रेषित करने की क्षमता। सबसे अच्छा तरीका है इसे संभालने के लिए कोई सुझाव?

जिन चीज़ों पर हमने विचार किया है, वे हैं:

  • जाल को स्वीकार करने के लिए स्नेपट्रैप का उपयोग करना, और क्या इसने जाल को फिर से लिखने के लिए एक कस्टम लिखित पर्ल हैंडलर स्क्रिप्ट को पास कर दिया और इसे उचित प्रोसेसिंग बॉक्स में भेज दिया
  • इसे संभालने के लिए लिनक्स बॉक्स पर चल रहे लोड बैलेंसिंग सॉफ़्टवेयर के कुछ प्रकार का उपयोग करना (यूडीपी को संभालने वाले कई लोड संतुलन कार्यक्रमों को खोजने में कुछ कठिनाई होना)
  • एक लोड संतुलन उपकरण (F5, आदि) का उपयोग करना
  • नेटिंग के साथ SNMP जाल को रूट करने के लिए लिनक्स बॉक्स पर IPTables का उपयोग करना

हमने वर्तमान में कार्यान्वित किया है और जाल को प्राप्त करने के लिए कॉन्फ़िगर किए गए IPTables के साथ एक लिनक्स बॉक्स के साथ अंतिम समाधान का परीक्षण कर रहे हैं, और फिर जाल के स्रोत पते के आधार पर, इसे एक गंतव्य नेट (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

यह बुनियादी जाल मार्ग के लिए उत्कृष्ट दक्षता के साथ काम करना चाहिए, लेकिन यह हमें पूरी तरह से सीमित कर देता है कि हम क्या कर सकते हैं और आईपीटीबल्स के साथ फ़िल्टर कर सकते हैं, इसलिए हम भविष्य के लिए लचीलेपन के बारे में चिंतित हैं।

एक और विशेषता जो हमें वास्तव में पसंद आएगी, लेकिन यूडीपी पैकेट को डुप्लिकेट या मिरर करने की क्षमता के लिए "होना चाहिए" काफी नहीं है। एक आने वाले जाल को लेने और इसे कई गंतव्यों तक ले जाने में सक्षम होना बहुत उपयोगी होगा।

क्या किसी ने एसएनएमपी जाल (या नेटफ्लो, सामान्य यूडीपी, आदि) लोड संतुलन के लिए ऊपर दिए गए संभावित समाधानों में से कोई भी आजमाया है? या किसी को भी इसे हल करने के लिए किसी अन्य विकल्प के बारे में सोच सकते हैं?

जवाबों:


4

एक सहकर्मी ने मुझे सिर्फ नमूना दिखाया । यह उपकरण एक संपूर्ण समाधान के बारे में प्रतीत होता है जो मैं देख रहा था। उपकरण की वेबसाइट से:

यह साधारण प्रोग्राम एक नेटवर्क पोर्ट पर UDP डेटाग्राम के लिए सुनता है, और इन डेटाग्राम की प्रतियों को एक गंतव्य स्थान पर भेजता है। वैकल्पिक रूप से, यह नमूना प्रदर्शन कर सकता है, अर्थात हर पैकेट को अग्रेषित करने के बजाय, केवल 1 एन में आगे। एक अन्य विकल्प यह है कि यह आईपी स्रोत पते को "स्पूफ" कर सकता है, ताकि प्रतियां रिले के बजाय मूल स्रोत से आ सकें। । वर्तमान में केवल IPv4 का समर्थन करता है।

इसका उपयोग उदाहरण के लिए Netflow पैकेट, SNMP ट्रैप (लेकिन सूचित नहीं), या Syslog संदेशों को कई रिसीवरों में वितरित करने के लिए किया जा सकता है।


3

मैं स्वयं इस समाधान को कार्यान्वित करने जाऊंगा, क्योंकि मुझे नहीं पता कि आपको कुछ विशिष्ट मिलेगा जैसा आप चाहते हैं।

मैं संतुलन नियमों और यहां तक ​​कि जाल श्रोता को लागू करने के लिए रूबी जैसी उच्च-स्तरीय भाषा का उपयोग करूंगा। उदाहरण के लिए, इस लाइब्रेरी का उपयोग करना आसान लगता है

जाल को सुनो:

m = SNMP::TrapListener.new(:Port => 1062, :Community => 'public') do |manager|
  manager.on_trap_default { |trap| p trap }
end
m.join

आपको on_trap_defaultब्लॉक में संतुलन तर्क जोड़ना चाहिए ।

जाल भेजें:

Manager.open(:Version => :SNMPv1) do |snmp|
  snmp.trap_v1(
    "enterprises.9",
    "10.1.2.3",
    :enterpriseSpecific,
    42,
    12345,
    [VarBind.new("1.3.6.1.2.3.4", Integer.new(1))])
end

डेमॉन बनाने के लिए आप डेमन-किट रूबी रत्न का उपयोग कर सकते हैं ।

यदि आप इसे सरल रखते हैं और अच्छी वस्तुओं को परिभाषित करते हैं, तो आप सॉफ़्टवेयर को अधिक प्रयास के साथ बनाए रख सकते हैं।


मैं उत्तर की सराहना करता हूं, लेकिन ईमानदारी से अगर मैं खुद कुछ बनाता हूं, तो यह नेट-एसएनएमपी के स्नैम्पट्रैप पर आधारित होगा, और पर्ल में लागू किया जाएगा, क्योंकि स्नैप्ट्रैप ने जाल को स्वीकार करने और उन्हें संभालने के लिए पर्ल मॉड्यूल का समर्थन करने के लिए अंतर्निहित समर्थन किया है। यह सरल और बहुत बेहतर समर्थित रखता है (हमारे पास एक दर्जन लोग हैं जो बुनियादी पर्ल को संभाल सकते हैं, और एक लड़का जो मुश्किल से रूबी के साथ खिलवाड़ करता है)।
क्रिस्टोफर कैशेल

1

आपकी मुख्य समस्या यह है कि, आप उस डिवाइस के वास्तविक आईपी को कैसे जानते हैं जिसे आप ट्रैप से प्राप्त कर रहे हैं?

यदि आप SNMP v1 का उपयोग कर रहे हैं, तो आप जाल के शीर्ष लेख से आईपी प्राप्त कर सकते हैं। यदि आप v2 या v3 ट्रैप का उपयोग कर रहे हैं, तो आपको उस स्नेपेंगिन आईडी को आईपी से सहसंबंधित करने की आवश्यकता होगी जिसे आपने पहले डिवाइस से प्राप्त किया है। अधिकांश एसएनएमपी कार्यान्वयनों के लिए इंजिनिड आमतौर पर एक अनिवार्य विन्यास मद नहीं है, और इसलिए आप उस अकेले पर पूरी तरह से भरोसा नहीं कर सकते।

फ़ॉलबैक यह है कि आप udp पैकेट हेडर से सोर्स आईपी का उपयोग कर सकते हैं। बेशक, यह विफल हो जाएगा, अगर आपका जाल किसी अन्य ईएमएस / एनएमएस के माध्यम से रूट किया जाता है या यदि आपके पास डिवाइस और आपके एमजीएमटी एप्लिकेशन के बीच एनएटी है।

  1. यदि आपको अन्य एनएमएस से NAT / अग्रेषित जाल का समर्थन करने की आवश्यकता नहीं है, तो बस udp पैकेट की प्रतिलिपि बनाएँ, और IP पर आधारित मार्ग

  2. यदि आपको समर्थन करने की आवश्यकता है, तो आपको SNMP ट्रैप को पार्स करना होगा और v2 / v3 के लिए इंजन आईडी मैच की जांच करनी होगी, v1 के लिए आप इसे SNMP हेडर में एजेंट-एड्रेस फील्ड से पढ़ सकते हैं।


0

एक और नेटफिल्टर आधारित हैक:

iptables -t nat -A PREROUTING -d 10.0.0.1 -p udp --dport 162 -m random --average 33 -j DNAT --to-destination 10.0.0.2:162
iptables -t nat -A PREROUTING -d 10.0.0.1 -p udp --dport 162 -m random --average 33 -j DNAT --to-destination 10.0.0.3:162
# everything else goes to other consumer
iptables -t nat -A PREROUTING -d 10.0.0.1 -p udp --dport 162 -j DNAT --to-destination 10.0.0.4:162

[धारणा - सभी जाल 10.0.0.1 को भेजे जाते हैं, जो फिर उन्हें 10.0.0.2, 10.0.0.3, 10.0.0.2] पर पुनर्निर्देशित करता है।

जब तक आपके पास एक-पैकेट-लंबा स्नैप जाल है - इसे 3 मशीनों में इस मामले में अच्छी तरह से लोड फैलाना चाहिए। [हालांकि मैंने इसका परीक्षण नहीं किया है]।


वास्तव में, हम बहुत ज्यादा नहीं चाहते हैं कि लोड अनियमित रूप से फैल जाए। हम एक ही मशीन को हिट करने के लिए दिए गए सबनेट से सभी जाल चाहते हैं ताकि हम विशिष्ट साइटों पर घटनाओं को सहसंबंधित कर सकें। अभी मेरे IPTables नियमों ने जाल के स्रोत के आधार पर DNAT गंतव्य को निर्धारित किया है।
क्रिस्टोफर काशेल

@Christopher Cashell - तब वैकल्पिक रूप से आपके समाधान के लिए आप s32 आईपी पते के आधार पर 'हैश' गंतव्य सर्वर के लिए u32 नेटफिल्टर मॉड्यूल का उपयोग कर सकते हैं। उदाहरण के लिए src आईपी एड्रेस के अंतिम 2 बिट्स लें और 4 स्नैम्प 'उपभोक्ताओं' में लोड फैलाएँ। netfilter.org/documentation/HOWTO/…
pQd

@Christopher Cashell stearns.org/doc/iptables-u32.v0.1.html u32 मैच के लिए अच्छा ट्यूटोरियल है। वैकल्पिक रूप से - "linux virtual server" प्रोजेक्ट को देखें - वे src / dst ip पर आधारित udp पैकेट के लिए लोड बैलेंसिंग भी कर सकते हैं।
pQd

0

मुझे लगता है कि चमी का जवाब सही रास्ता है। यूडीपी और एसएनएमपी से जितना जल्दी हो सके छुटकारा पाएं, वे प्रबंधन करने के लिए भयानक हैं।

अब मैं एक ऐसी प्रणाली का निर्माण कर रहा हूं, जो सभी घटनाओं (जाल सहित) को एक जेएमएस कतार पर रख देगा और फिर लोड संतुलन और विफलता को पूरा करने के लिए एंटरप्राइज़ मैसेजिंग के सभी आश्चर्यों का उपयोग करेगा।


मुझे लगता है कि आप गलत समझ रहे हैं। । । मैं एक पूर्ण निगरानी प्रणाली बनाने की कोशिश नहीं कर रहा हूं, सिर्फ एक एसएनएमपी ट्रैप राउटर। हमें 5000 नेटवर्क डिवाइस और सैकड़ों हज़ारों पोर्ट मिल गए हैं जिनकी हम यहां निगरानी कर रहे हैं। वहाँ कोई रास्ता नहीं है कि मैं उस पहिये को फिर से मजबूत कर रहा हूँ। । । केवल उन उपकरणों को बनाने की कोशिश कर रहे हैं, जिनके पास हमारे पास बेहतर काम है।
क्रिस्टोफर कैशेल

मैंने आपको सही समझा, शायद आपने मुझे नहीं समझा;) जेएमएस का उपयोग परिवहन के रूप में किया जाता है क्योंकि आधुनिक दलालों के पास सभी अच्छे फेलोवर, दृढ़ता और संतुलन की विशेषताएं हैं। आप URL पर POST कर सकते हैं, ईमेल भेज सकते हैं, SOAP, जो भी काम करता है। UDP को कभी विश्वसनीय या बैलेनेबल नहीं बनाया गया क्योंकि इसमें डेटा स्ट्रीम या प्रवाह नियंत्रण की कोई अवधारणा नहीं है। आप लंबे समय तक यूडीपी को बनाने की कोशिश कर रहे हैं, जिसे वह करने के लिए डिज़ाइन नहीं किया गया था।
अलेक्जेंडर इवानिसेविक

मैं सुझाव की सराहना करता हूं, लेकिन मेरा अपना उद्यम स्तर नेटवर्क निगरानी प्रणाली बनाने में वास्तव में कोई इरादा या रुचि नहीं है। उनमें से बहुत से पहले से ही उपलब्ध हैं, और एक को लागू करने की सुविधा सेट और स्केलेबिलिटी के साथ जिसकी हमें आवश्यकता है, 2-4 वर्षों के लिए एक दर्जन प्रोग्रामर की टीम की आवश्यकता होगी। यह संभव या वांछनीय नहीं है। यह मुझे मौजूदा सिस्टम के साथ बातचीत करने के साथ छोड़ देता है, और यह मुझे UDP पर बहुत अधिक SNMP से निपटने के लिए छोड़ देता है ।
क्रिस्टोफर कैशेल

0

आपकी मुख्य समस्या यह है कि, आप उस डिवाइस के वास्तविक आईपी को कैसे जानते हैं जिसे आप ट्रैप से प्राप्त कर रहे हैं?

मूल प्रेषक का आईपी प्राप्त करने के लिए, आप इस पैच के साथ स्नैप्टपैड को पैच करने की कोशिश कर सकते हैं - https://sourceforge.net/p/net-snmp/patches/1320/#6afe

यह पेलोड को संशोधित करता है, इसलिए आईपी हेडर को बरकरार रखा जाएगा, ताकि वे आपके रूटिंग और / या नैटिंग में न आएं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.