Estou implementando uma solução de monitoramento de rede para uma rede muito grande (aproximadamente 5000 dispositivos de rede). Gostaríamos que todos os dispositivos em nossa rede enviassem traps SNMP para uma única caixa (tecnicamente provavelmente será um par de caixas HA) e, em seguida, essa caixa passasse os traps SNMP para as caixas de processamento reais. Isso nos permitirá ter várias caixas de back-end lidando com traps e distribuir a carga entre essas caixas de back-end.
Um recurso importante de que precisamos é a capacidade de encaminhar os traps para uma caixa específica, dependendo do endereço de origem do trap. Alguma sugestão para a melhor maneira de lidar com isso?
Entre as coisas que consideramos estão:
- Usando o snmptrapd para aceitar os traps, e enviá-los para um script personalizado do manipulador de perl escrito, para reescrever o trap e enviá-lo para a caixa de processamento adequada
- Usando algum tipo de software de balanceamento de carga em execução em uma caixa Linux para lidar com isso (tendo alguma dificuldade em encontrar muitos programas de balanceamento de carga que manipularão UDP)
- Usando um appliance de balanceamento de carga (F5, etc)
- Usando IPTables em uma caixa Linux para rotear os traps SNMP com NATing
No momento, implementamos e estamos testando a última solução, com uma caixa Linux com IPTables configurada para receber os traps e, dependendo do endereço de origem do traps, reescreva-o com um destino NAT (DNAT) para que o pacote seja enviado para o servidor apropriado. Por exemplo:
# 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
Isso deve funcionar com excelente eficiência no roteamento básico de armadilhas, mas nos deixa completamente limitados ao que podemos trabalhar e filtrar com o IPTables, por isso estamos preocupados com a flexibilidade para o futuro.
Outro recurso que realmente gostaríamos, mas que não é "obrigatório", é a capacidade de duplicar ou espelhar os pacotes UDP. Ser capaz de pegar uma armadilha de entrada e encaminhá-la para vários destinos seria muito útil.
Alguém já tentou alguma das soluções possíveis acima para balanceamento de carga de traps SNMP (ou Netflow, UDP geral, etc.)? Ou alguém pode pensar em outras alternativas para resolver isso?