Linux Kernel antes de 3.6 usaba el almacenamiento en caché de rutas para realizar el enrutamiento de múltiples rutas IPv4, lo que significaba que el enrutamiento entre dos líneas / ISP separadas era bastante fácil. A partir de 3.6, el algoritmo cambió a ser por paquete, lo que significa que se necesitaron algunos trucos de marcador de tabla de ruta / regla / tablas ip para lograr las dos líneas / ISP.
Sin embargo, si tuviera dos líneas con el mismo ISP que pudiera enrutar una sola IP por ambas líneas por paquete de forma equilibrada / conmutación por error, entonces desde 3.6 podría lograr fácilmente la vinculación de línea (a nivel de IP) debido a el enrutamiento por paquete en ambas direcciones.
A partir de 4.4, el kernel cambió nuevamente al equilibrio de carga basado en el flujo basado en un hash sobre las direcciones de origen y destino.
Actualmente estoy ejecutando Kernel 4.4.36, y estoy usando enrutamiento de múltiples rutas sobre conexiones PPPoE. Mi tráfico descendente desde el ISP se enruta a través de las dos líneas separadas por paquete (una IP enrutada por ambas líneas). Esto me da una velocidad de descarga más rápida que la velocidad de una línea individual. Casi la velocidad de ambas líneas sumadas. Funciona muy bien, video de Skype, VoIP (UDP), YouTube, etc. todo funciona muy bien
Debido a que tengo una experiencia tan buena en sentido descendente, quiero probarlo en sentido ascendente, pero mi tráfico ascendente se enruta de acuerdo con el algoritmo basado en flujo más nuevo en ambos dispositivos ppp (que tienen la misma dirección IP). Esto significa que no puedo lograr una velocidad de carga que sea más rápida que la velocidad de una sola línea.
¿Hay alguna forma de configurar el Kernel actual para usar el algoritmo por paquete? ¿O algún otro método para lograr el enrutamiento de múltiples rutas por paquete? ¿Tendría que volver a un kernel anterior (que no quiero hacer por otras razones)?
Mi ISP no admite ppp multienlace.
En caso de que sea relevante, actualmente estoy ejecutando Arch Linux ARMv7 en una Raspberry Pi 3.
fuente
Respuestas:
Ok, entonces después de haber tenido más tiempo para investigar esto, encontré una manera de hacerlo usando Linux TEQL (True Link Equalizer). Aquí hay un enlace que seguí libremente, pero con algunos ajustes.
http://lartc.org/howto/lartc.loadshare.html
Así es como lo conseguí trabajando en Arch Linux ARMv7 (Raspberry Pi 3)
En el arranque:
El siguiente comando debe ejecutarse en el arranque para cargar el módulo Kernel apropiado.
Los siguientes comandos también se ejecutan en el arranque, suponiendo que desea NAT desde una red local en eth0.
El tráfico de retorno FORWARD está en ppp +, y la MASCARÍA POSTROUTING en teql + porque el tráfico saliente sale en teql y el tráfico de retorno regresa en ppp.
Cuando aparecen los enlaces ppp:
Suponiendo que los enlaces para equilibrar la carga son ppp, los siguientes comandos se ejecutarán en un script en un
/etc/ppp/ip-up.d/
script.¿Dónde
1.1.1.1
está su dirección IP pública de cara al ISP? Se pueden asignar IP públicas adicionales al dispositivo teql0, pero no es necesario asignarlas a los dispositivos ppp. En mi configuración, los dos enlaces ppp comparten la misma IP (negociada por pppoe, etc.) El enlace teql se asignó manualmente como se muestra arriba. El ISP debe enviar el tráfico para la IP por igual en ambos enlaces.La ruta inversa (
rp_filter
) se establece en2
(suelta) tanto en el script anterior para que los paquetes de retorno no se descarten debido a que vuelven a las interfaces ppp en lugar de teql0.Lo configuré de esa manera y funciona perfectamente. ¡Muy fácil! Cuando los enlaces fallan, hay una conmutación por error perfecta. Cuando aparecen, comienzan a trabajar nuevamente. Parece que no hay pérdida de paquetes o retraso cuando falla, y tampoco cuando vuelve a funcionar.
Además, uno de los comentaristas sugirió el siguiente enlace que utiliza el enrutamiento de políticas, con iptables para marcar todos los demás paquetes, etc. pero intentaré en unos días ver si funciona mejor que el anterior y proporcionaré comentarios aquí en consecuencia.
http://support.aa.net.uk/Router_-_Linux_upload_bonding_using_policy_routing
fuente
sysctl -w net.ipv4.ip_forward
pero debería decirlo,sysctl -w net.ipv4.ip_forward=1
lo he corregido anteriormente. Eso ciertamente evitaría que el tráfico de la LAN descienda por el enlace enlazado.