Tengo un sistema con dos interfaces. Ambas interfaces están conectadas a internet. Uno de ellos está configurado como la ruta predeterminada; Un efecto secundario de esto es que si un paquete entra en la interfaz de ruta no predeterminada, la respuesta se envía de vuelta a través de la interfaz de ruta predeterminada. ¿Hay alguna manera de usar iptables (u otra cosa) para rastrear la conexión y enviar la respuesta a través de la interfaz de la que proviene?
51
dev
parámetro en elip rule
comando, así que ejecutándoseip rule add from <interface_IP> table isp2
up ip rule add from <interface_IP> table isp2
yup ip route add default via <gateway_IP> dev ppp0 table isp2
a su / etc / network / interfaces debajo de la interfaz relevante.dev <interface>
deip rule
para que funcione en mi caja. Si entiendo bien,dev <interface>
estaba filtrando los paquetes que de alguna manera se configuraron en la interfaz incorrecta, que debían ser transferidos a la interfaz correcta por la ruta anulada, pero el filtrado de reglas por interfaz impedía que eso sucediera.dev <interface>
delip rule
comando para que esto funcione. Por favor actualice la respuesta! Excepto por ese detalle, funcionó a las mil maravillas. Muchas gracias, @Peter!Los siguientes comandos crean una tabla de enrutamiento alternativa
eth1
para los paquetes que tienen la marca 1 (excepto los paquetes a localhost). Elip
comando es de la suite iproute2 (Ubuntu: iproute Install iproute http://bit.ly/software-small , iproute-doc Install iproute-doc http://bit.ly/software-small ).La otra mitad del trabajo es reconocer los paquetes que deben obtener la marca 1; luego use
iptables -t mangle -A OUTPUT … -j MARK --set-mark 1
en estos paquetes para enrutarlos a través de la tabla de enrutamiento 1. Creo que lo siguiente debería hacerlo (reemplace 1.2.3.4 por la dirección de la interfaz de ruta no predeterminada):No estoy seguro de si eso es suficiente, tal vez se necesite otra regla en los paquetes entrantes para indicarle al módulo conntrack que los rastree.
fuente
Tuve problemas con los paquetes generados localmente con la solución sugerida por Peter, descubrí que lo siguiente corrige eso:
NOTA: Puede encontrar problemas de sintaxis con la cuarta línea anterior. En tales casos, la sintaxis para el 4to comando puede ser esta ahora:
fuente
Supongo que está ejecutando Linux y, además, que está utilizando una distribución basada en RedHat / CentOS. Otros Unix y distribuciones requerirán pasos similares, pero los detalles serán diferentes.
Comience probando (tenga en cuenta que esto es muy similar a la respuesta de @ Peter. Asumo lo siguiente:
Los comandos son los siguientes:
El firewall no está involucrado de ninguna manera. Los paquetes de respuesta siempre se habrían enviado desde la IP correcta, pero anteriormente se enviaban a través de la interfaz incorrecta. Ahora estos paquetes de la IP correcta se enviarán a través de la interfaz correcta.
Suponiendo que lo anterior funcionó, ahora puede hacer que la regla y los cambios de ruta sean permanentes. Esto depende de la versión de Unix que esté utilizando. Como antes, estoy asumiendo una distribución de Linux basada en RH / CentOS.
Probar que el cambio de red es permanente:
Si eso no funcionó, en las versiones posteriores de RH / CentOS también debe ir con una de dos opciones:
Personalmente, prefiero instalar el paquete de reglas, ya que es el enfoque más simple y compatible:
Otra recomendación importante es habilitar el filtrado de arp, ya que esto evita otros problemas relacionados con las configuraciones de red dual. Con RH / CentOS, agregue el siguiente contenido al archivo /etc/sysctl.conf:
fuente