
Tengo una máquina servidor Linux que también uso como puerta de enlace de red / "enrutador". Tiene tres interfaces de red activas: dos interfaces de red conectadas a Internet a través de diferentes ISP y la tercera que proporciona acceso a Internet a mis máquinas locales a través de NAT. Tengo equilibrio de carga entre los enlaces WAN.
Desde el servidor, se puede acceder a la red perfectamente: todo funciona, el equilibrio de carga funciona y, en general, no se pierden paquetes. Las conexiones entre el servidor y las máquinas locales también funcionan perfectamente. Pero si accedo a Internet/WAN desde una máquina local a través del servidor, siempre veo una pérdida constante de paquetes de ~40%. Esto hace que las conexiones sean muy inestables. Investigando un poco, pude ver que recibo (y pierdo) paquetes que llegan a través de ambas interfaces más o menos por igual, por lo que esnocomo si una de las interfaces estuviera arrastrando todo lo demás al perder todos sus paquetes.
Si desactivo cualquiera de los dos enlaces WAN, esta pérdida de paquetes desaparece instantáneamente. Reaparece instantáneamente si vuelvo a habilitar ambos enlaces WAN.
Que podria causar esto? ¿Alguna sugerencia sobre cómo solucionar este problema sin tener que abandonar uno de los enlaces WAN?
mi iptables
tabla de filtros:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
mi iptables
mesa nat:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 10.42.0.0/24 !10.42.0.0/24
mi iptables
mesa de mangle:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 mark match ! 0x0
MARK all -- 0.0.0.0/0 0.0.0.0/0 state NEW MARK set 0x2
MARK all -- 0.0.0.0/0 0.0.0.0/0 state NEW statistic mode random probability 0.50000000000 MARK set 0x1
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
ip route show
producción:
default
nexthop via 10.7.0.254 dev eth0 weight 1
nexthop via 78.62.255.254 dev eth2 weight 1
10.7.0.0/16 dev eth0 proto kernel scope link src 10.7.5.102
10.42.0.0/24 dev eth1 proto kernel scope link src 10.42.0.254
78.62.192.0/18 dev eth2 proto kernel scope link src 78.62.239.10
169.254.0.0/16 dev eth1 scope link metric 1000
todo está sin editar tal como está; en este caso no me importa mucho la "privacidad"
Respuesta1
Según las tablas que ha mostrado, no está haciendo nada para asegurarse de que NAT mantenga los flujos saliendo por la misma interfaz en la que comenzaron, lo que significa que aproximadamente la mitad de sus paquetes salientes probablemente se estén traduciendo mal.
Para realizar correctamente el equilibrio de carga NAT, necesita una regla de enrutamiento previo en la tabla mangle que marque aleatoriamente los nuevos flujos con un 1 o un 2, necesita ip rule
reglas que enrutan los paquetes marcados con 1 a la interfaz WAN 1 y los paquetes marcados con 2 a la interfaz WAN 2. y necesita reglas SNAT independientes en la iptables
tabla NAT, una para cada interfaz WAN.
Para una descripción más detallada, consulte El equilibrio de carga de Iptables de Diego Lima en pocas palabras