¿Cómo limitar todo el tráfico TCP a la interfaz de red en la que se inició la sesión?

¿Cómo limitar todo el tráfico TCP a la interfaz de red en la que se inició la sesión?

Tengo un sistema Linux integrado con dos interfaces de red (lan0, wlan0) que están configuradas en la misma subred. Un servidor en este sistema acepta conexiones tcp en ambas interfaces.

¿Cómo puedo asegurar que todas las respuestas de una sesión se envíen en la misma interfaz en la que se recibió la solicitud? Es decir, ¿cómo se puede limitar todo el tráfico de una sesión TCP a una interfaz de red específica?

El socket listening() y los sockets aceptados se pueden vincular a una interfaz/dispositivo con setsockopt(fd, BIND_TO_DEVICE). El servidor hace esto para ambas interfaces. Esto ayuda a detectar en qué interfaz se creó la sesión y a limitar el tráfico saliente a la misma interfaz.

Pero cuando ocurre la aceptación (), el SYN-ACK se envía de vuelta al cliente y parece que un problema es que este paquete inicial se puede enviar a través de la otra interfaz (incorrecta) debido a la búsqueda de ARP. El arp puede encontrar la dirección IP del cliente en la otra interfaz/"incorrecta" porque el cliente también es visible allí.

Respuesta1

Puede limitar la conexión tcp para la interfaz usando iptables.

#iptables -A INPUT -p tcp -i eth0 --syn -m limit --limit 1/s --limit-burst 3 -j RETURN

--limit 1/s: Maximum average matching rate in seconds
--limit-burst 3: Maximum initial number of packets to match

información relacionada