J'implémente une solution de surveillance réseau pour un très grand réseau (environ 5000 périphériques réseau). Nous aimerions que tous les appareils de notre réseau envoient des interruptions SNMP à une seule boîte (techniquement, ce sera probablement une paire de boîtes HA), puis que cette boîte transmette les interruptions SNMP aux vraies boîtes de traitement. Cela nous permettra d'avoir plusieurs boîtiers dorsaux manipulant des pièges et de répartir la charge entre ces boîtiers dorsaux.
Une fonctionnalité clé dont nous avons besoin est la possibilité de transmettre les pièges à une boîte spécifique en fonction de l'adresse source du piège. Des suggestions sur la meilleure façon de gérer cela?
Nous avons notamment envisagé:
- Utilisation de snmptrapd pour accepter les interruptions et les faire passer à un script de gestionnaire perl écrit personnalisé pour réécrire l'interruption et l'envoyer dans la boîte de traitement appropriée
- Utiliser une sorte de logiciel d'équilibrage de charge fonctionnant sur une boîte Linux pour gérer cela (avoir du mal à trouver de nombreux programmes d'équilibrage de charge qui géreront UDP)
- Utilisation d'un dispositif d'équilibrage de charge (F5, etc.)
- Utilisation d'IPTables sur une boîte Linux pour router les pièges SNMP avec NATing
Nous avons actuellement implémenté et testons la dernière solution, avec une boîte Linux avec IPTables configurée pour recevoir les interruptions, puis en fonction de l'adresse source de l'interruption, réécrivez-la avec une destination nat (DNAT) pour que le paquet soit envoyé à le bon serveur. Par exemple:
# 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
Cela devrait fonctionner avec une excellente efficacité pour le routage de piège de base, mais cela nous laisse complètement limités à ce que nous pouvons mach et filtrer avec IPTables, nous sommes donc préoccupés par la flexibilité pour l'avenir.
Une autre fonctionnalité que nous aimerions vraiment , mais qui n'est pas tout à fait un "must have" est la possibilité de dupliquer ou de refléter les paquets UDP. Être capable de prendre un piège entrant et de l'acheminer vers plusieurs destinations serait très utile.
Quelqu'un a-t-il essayé l'une des solutions possibles ci-dessus pour les interruptions SNMP (ou Netflow, UDP général, etc.)? Ou peut-on penser à d'autres alternatives pour résoudre ce problème?
la source
Votre problème principal va être, comment savez-vous l'IP réelle de l'appareil dont vous recevez les pièges?
Si vous utilisez SNMP v1, vous pouvez retirer l'ip de l'en-tête du piège. Si vous utilisez des interruptions v2 ou v3, vous devrez corréler l'ID snmpengine à l'IP que vous avez précédemment récupérée à partir de l'appareil. Engineid n'est généralement pas un élément de configuration obligatoire pour la plupart des implémentations SNMP, et vous ne pouvez donc pas compter entièrement sur cela seul.
Le repli est que vous pouvez utiliser l'ip source à partir de l'en-tête du paquet udp. Bien sûr, cela échouera si votre interruption est acheminée via un autre EMS / NMS ou si vous avez un NAT entre le périphérique et votre application mgmt.
Si vous n'avez pas besoin de prendre en charge les traps NAT / transférés à partir d'autres NMS, faites simplement une copie du paquet udp et route en fonction de l'ip
Si vous devez prendre en charge cela, vous devez analyser le piège SNMP et vérifier la correspondance de l'ID du moteur pour v2 / v3, pour v1, vous pouvez le lire dans le champ d'adresse de l'agent dans l'en-tête SNMP.
la source
un hack de plus basé sur netfilter:
[hypothèse - tous les pièges sont envoyés vers 10.0.0.1, qui les redirige ensuite vers 10.0.0.2, 10.0.0.3, 10.0.0.4]
tant que vous avez des interruptions snmp d'un paquet - cela devrait bien répartir la charge - dans ce cas sur 3 machines. [même si je ne l'ai pas testé].
la source
Je pense que la réponse de chmeee est la bonne voie à suivre. Débarrassez-vous d'UDP et de SNMP dès que possible dans le processus, ils sont horribles à gérer.
Je construis maintenant un système qui placera tous les événements (y compris les interruptions) dans une file d'attente JMS, puis utilisera toutes les merveilles de la messagerie d'entreprise pour effectuer l'équilibrage de charge et le basculement.
la source
Pour obtenir l'IP de l'expéditeur d'origine, vous pouvez essayer de patcher le snmptrapd avec ce patch - https://sourceforge.net/p/net-snmp/patches/1320/#6afe .
Cela modifie la charge utile, de sorte que les en-têtes IP seront conservés intacts, afin qu'ils n'entrent pas dans votre routage et / ou NATting.
la source