GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo enviar paquetes de multidifusión a través de una interfaz específica en Linux

No estoy completamente convencido de que mi solución sea correcta, pero al menos puedo arrojar un poco más de luz sobre lo que está sucediendo.

Antecedentes

Linux en realidad tiene múltiples tablas de enrutamiento, y se buscan una a la vez en un orden de prioridad específico hasta que se encuentra una tabla con una ruta coincidente. Opcionalmente, puede buscar algunas de las tablas de enrutamiento en función de la dirección o el protocolo de origen; ver el ip-rule(8) página man.

El problema es la tabla de enrutamiento "local", que tiene prioridad 0, la más alta posible. El núcleo rellena automáticamente la tabla "local" y contiene rutas de transmisión e interfaz "obvias". Para IPv6 bajo Linux, esto aparentemente incluye todo el bloque de multidifusión.

El problema

Voy a utilizar iproute2 herramienta en lugar de la más tradicional route , porque me mostrará todo lo que necesito saber.

En mi caja de Linux:

$ ip -6 route show table local
local ::1 via :: dev lo  proto none  metric 0 
local fe80::213:a9ff:fe91:5bcb via :: dev lo  proto none  metric 0 
local fe80::250:b6ff:fe44:37d1 via :: dev lo  proto none  metric 0 
ff00::/8 dev eth0  metric 256 
ff00::/8 dev eth1  metric 256

$ ip -6 route show table main
fe80::/64 dev eth0  proto kernel  metric 256 
fe80::/64 dev eth1  proto kernel  metric 256 
ff15::/16 dev eth1  metric 1024
ff00::/8 dev eth1  metric 1024 

$ ip -6 rule show
0:      from all lookup local 
32766:  from all lookup main 

...Y mis paquetes de multidifusión para ff15::1 (5==site-local,>link-local) terminan en eth0, porque la tabla de enrutamiento "local" coincide primero y anula la tabla "principal", aunque el La tabla "principal" tiene una ruta más específica. Este comportamiento predominante es correcto en el esquema más amplio de enrutamiento de políticas, pero la elección de agregar automáticamente ff00::/8 a la tabla local es cuestionable para mí.

Mi solución

No tengo suficiente experiencia para saber si es una buena idea, pero:

# ip -6 route add ff15::/16 dev eth1 table local

y ahora mis paquetes ff15::1 se enrutan a través de eth1.

Esto concuerda un poco con la semántica de la tabla local, ya que se enruta directamente a través de un dispositivo. No se siente exactamente bien (considerando la administración automática y "no debería tener que mirar esta tabla"), pero es la mejor solución que he encontrado.


Linux
  1. Cómo crear un recurso compartido de red a través de Samba en Linux

  2. ¿Cómo enviar correo a través de un servidor SMTP externo usando el comando mailx en Linux?

  3. Cómo mostrar la tabla de enrutamiento en Linux

  4. ¿Cómo deshabilitar ipv6 en una interfaz específica en linux?

  5. Cómo configurar dos rutas predeterminadas en Linux

Cómo enviar correos electrónicos cifrados en Linux

Cómo monitorear una máquina Linux a través de Nagios

Cómo funciona el programa ping en Linux

Cómo SSH al servidor a través de Linux

Cómo enviar procesos a segundo plano en Linux

Cómo ver las particiones de disco de Linux (tabla de particiones)