¿Cómo hacer que ipfix funcione con openvswitch? [cerrado]

7

Estoy tratando de monitorear mi OpenVswitch a través de IPFix . Pero me estoy golpeando la cabeza contra una pared de ladrillos durante dos días: /

De acuerdo con la página de manual de ovs-vsctl , necesito agregar una nueva entrada en la base de datos de configuración, más precisamente en la tabla "ipfix". Eso funcionó bastante bien, y parece que lo hice bien:

# ovs-vsctl list ipfix
_uuid               : 2d54982b-6cc5-4a8c-845c-cc7ef701da01
external_ids        : {}
obs_domain_id       : 123
obs_point_id        : 456
sampling            : 64
targets             : ["<collector-ip>:<port>"]

Luego descargué libIPFIX y comencé el example_collector. Pero no aparece nada. No recibo ninguna información Lo confirmé usando wireshark ...

Algunos estudios de Google sacaron un correo electrónico de la lista de correo que indica que uno necesita

Acciones de OpenFlow para hacer que IPFIX se envíe a los recopiladores

De acuerdo con este correo electrónico, hay nuevas "acciones de muestra", pero no pude encontrar más información sobre cómo agregarlas.

Mi mejor conjetura es que me faltan estas acciones de muestra de OpenFlow. ¿Alguien puede proporcionarme información sobre cómo agregarlos?

/ edit: estoy ejecutando OpenVswitch Versión 1.11.0 en openSUSE 13.1 (x86_64).

Para que IPFix funcione, probé lo siguiente:

# ovs-vsctl -- set Bridge s1 ipfix=@i -- --id=@i create IPFIX targets=\"10.0.0.1:4739\" obs_domain_id=123 obs_point_id=456 sampling=64
2d54982b-6cc5-4a8c-845c-cc7ef701da01

Para confirmar que hice la lista ovs-vsctl ipfix (ver arriba)

Un comando similar funcionó como se esperaba para que sFlow funcione:

# ovs-vsctl -- set Bridge s1 sflow=@sflow -- --id=@sflow create sflow agent=eth0  target=\"10.0.0.1:6343\" header=128 sampling=32 polling=2
0df2b92b-8a83-4a63-acc4-fecf6f8f492f

Justo después de ingresar esa línea, recibí resultados de muestreo enviados a mi computadora de destino. Lamentablemente no hubo suerte con IPFix.

Christoph Haefner
fuente
1
@ChristophHaefner ¿Qué dicen sus archivos de registro cuando pasa el comando IPFix que falla?
Ryan Foley
1
@Fizzle: Un millón de gracias por la pista. Estaba buscando archivos de registro anteriormente, pero / var / log / openvswitch / estaba vacío, así que seguí adelante. Pero con tu empuje busqué más sofisticado y encontré un archivo de registro: /var/log/ovs-vswitchd.log. Y en realidad está indicando que intenta entregar: "2014-01-22T10: 09: 04Z | 1017630 | coleccionistas | ADVERTENCIA | el envío al colector falló: conexión rechazada" Debe haberlo pasado por alto al depurar con cables: /
Christoph Haefner

Respuestas:

5

El lenguaje que está utilizando para configurar IPFix es definitivamente correcto.

Esto es lo que tienes:

ovs-vsctl -- set Bridge s1 ipfix=@i -- --id=@i create IPFIX targets=\"10.0.0.1:4739\" obs_domain_id=123 obs_point_id=456 sampling=64

Y prácticamente el mismo ejemplo se describe en el archivo man ovs-vsctl:

IPFIX

Configure bridge br0 to send one IPFIX flow record per packet sample to UDP port 4739 on host 192.168.0.34, with Observation Domain ID 123 and Observation Point ID 456:

ovs−vsctl −− set Bridge br0 ipfix=@i −− −−id=@i create IPFIX targets=\"192.168.0.34:4739\" obs_domain_id=123 obs_point_id=456

Según su archivo de registro en la sección de comentarios:

2014-01-22T10:09:04Z|1017630|collectors|WARN|sending to collector failed: Connection refused

Creo que sería razonable suponer que el recopilador ( 10.0.0.1) está mal configurado o que algo impide las conexiones entrantes.

Ryan Foley
fuente
Estás 100% en lo cierto con tu suposición. Nunca lo pensé porque estoy usando el example_collector de libipfix (que se supone que es la implementación de referencia).
Christoph Haefner
Rápidamente escribí un pequeño programa escuchando en el puerto 4739 y simplemente volcando lo que obtiene en la pantalla. Depurar eso con Wireshark nuevamente trae a colación una cosa importante: El exportador no envía una plantilla: / También podría ser la razón por la cual el coleccionista de ejemplos rechaza lo que obtiene ...
Christoph Haefner
¿Qué estás usando para la recolección / análisis de flujo?
Ryan Foley
3
Gracias por su sugerencia, lo investigaré. Encontré el error por ahora: el example_collector de libipfix está escuchando en tcp: 4739, mientras que OpenVswitch lo estaba enviando en udp: 4739. No lo vi en wireshark, porque estaba agregando un filtro "tcp.port == 4739" ... Me faltaba la plantilla porque se envió una vez al principio y detuve varias veces Wirewhark y reinicie el escaneo sin guardar.
Christoph Haefner
1
@ ChristophHaefner, gracias por una buena pregunta. Por favor considere preguntar nuevamente si surge la necesidad
Mike Pennington