Implementación de equilibrio de carga en cualquier distribución de Linux

Implementación de equilibrio de carga en cualquier distribución de Linux

Estoy pensando en implementar una solución de equilibrio de carga para uso personal.

Lo que quiero hacer es maximizar el rendimiento de datos a través de conexiones a Internet de teléfonos móviles. Déjame ser claro:

Tengo un plan de datos en mi teléfono móvil y mi familia también tiene sus respectivos planes de datos en sus teléfonos. Si puedo conectar hasta 4 teléfonos en una PC (de escritorio) (preferiblemente a través de USB), entonces lograré (teóricamente) una conexión a Internet más rápida que la que cualquiera de los 4 teléfonos puede lograr (si los conecto a una PC).

Esa computadora de escritorio actuará como enrutador para una intranet.

Si lo anterior tiene una base sólida (podría estar equivocado, no conozco con gran detalle las tecnologías involucradas), necesito saber cómo implementarlo.

He visto que la herramienta para el trabajo es ipvs(¿verdad?), pero no sé cómo hacerlo.

En cuanto a la distribución, el trabajo se puede realizar en cualquier distribución, pero sé que conectar un teléfono Android con Ubuntu funciona plug and play. Entonces, si puedo hacerlo en Ubuntu, probablemente será más rápido que compilar todo desde Strach.

¿Hay algún pariente cómo hacerlo? ¿Existe quizás una distribución que equilibre la carga e identifique las conexiones USB a Internet sobre la marcha?

Respuesta1

Para equilibrar las conexiones salientes, todo lo que necesita es un iptablesenrutamiento estándar y alguna política. Esto se vuelve un poco complejo con 4 conexiones, ya que necesitarás reconfigurar y reequilibrar los enlaces a medida que las conexiones van y vienen.

La iptablesconfiguración cruda es

  • Crear una tabla de enrutamiento para cada conexión

    ip rule add fwmark 10 table PHONE0 prio 33000
    ip rule add fwmark 11 table PHONE1 prio 33000
    ip rule add fwmark 12 table PHONE2 prio 33000
    ip rule add fwmark 13 table PHONE3 prio 33000
    
  • Agregue la puerta de enlace predeterminada para cada conexión a cada tabla (la IP de la puerta de enlace variará dependiendo de cada proveedor/configuración de teléfono)

    ip route add default via 192.168.1.2 table PHONE0 
    ip route add default via 192.168.9.1 table PHONE1 
    ip route add default via 192.168.13.2 table PHONE2 
    ip route add default via 192.168.7.9 table PHONE3 
    
  • Marque aleatoriamente cualquier flujo no marcado, que enrutará el flujo a través de una conexión específica. OUTPUTse utiliza para procesos locales. Úselo PREROUTINGsi está reenviando tráfico para otros clientes)

    iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark
    iptables -t mangle -A OUTPUT -m mark ! --mark 0 -j ACCEPT
    iptables -t mangle -A OUTPUT -j MARK --set-mark 10
    iptables -t mangle -A OUTPUT -m statistic --mode random --probability 0.25 -j MARK --set-mark 11
    iptables -t mangle -A OUTPUT -m statistic --mode random --probability 0.25 -j MARK --set-mark 12
    iptables -t mangle -A OUTPUT -m statistic --mode random --probability 0.25 -j MARK --set-mark 13
    iptables -t mangle -A OUTPUT -j CONNMARK --save-mark
    
  • NAT para cada una de las conexiones (la interfaz deberá ser la que la conexión de su teléfono muestre al sistema)

    iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
    iptables -t nat -A POSTROUTING -o ppp1 -j MASQUERADE
    iptables -t nat -A POSTROUTING -o ppp2 -j MASQUERADE
    iptables -t nat -A POSTROUTING -o ppp3 -j MASQUERADE
    

Tenga en cuenta que una única conexión TCP o UDP no verá ninguna aceleración ya que seguirá pasando por un único enlace. Debe utilizar varias conexiones simultáneas (al menos 4) para aprovechar el ancho de banda adicional. La mayoría de los navegadores hacen esto de forma oculta cuando solicitan varios objetos. Algunos administradores de descargas te permiten utilizar múltiples conexiones para un solo archivo.

Como sugiere garethTheRed, ispunityagrega algo de "pegamento" encima de esta iptablesconfiguración para recorrer una lista de conexiones, verificar que la puerta de enlace esté respondiendo, reequilibrar si algo anda mal, etc. Su administración de "sesión fija" parece ser una configuración adicional por puerto encima de su equilibrio de carga de conexiones base "round robin". Otra solución esSaldo Net-ISP, una biblioteca y script Perl que automatiza la configuración de iptables y la tabla de enrutamiento, monitorea el estado del ISP, le alerta sobre problemas y reconfigura el enrutamiento en caso de que uno o más ISP se vuelvan inaccesibles.

También tenga en cuenta que el hecho de que las solicitudes provengan de múltiples IP puede interrumpir algunos servicios que se basan en búsquedas de IP consistentes y es posible que deba agregar reglas adicionales para esos servicios para vincularlos a una conexión. No verá ninguna aceleración en conexiones individuales, sólo cuando esté haciendo 4 cosas a la vez, lo que la mayoría de los navegadores intentarán hacer de todos modos.

ipvses más para crear direcciones de servicio virtuales para las cosas que aloja, de modo que el servicio pueda conmutarse por error entre varios hosts.

Respuesta2

Podría ser posible: ispunityes un proyecto que equilibra la carga de tu conexión a Internet. Está escrito en Ruby. Lo tienen funcionando en una Raspberry Pi, por lo que debería ejecutarse en cualquier distribución razonable.

La única diferencia entre el escenario de ellos y el suyo es que ellos usaron Ethernet mientras que usted propone usar 3G. Supongo que gran parte de su éxito (o fracaso) depende de cómo sus 4 teléfonos móviles presenten Internet en USB.

Como Rasberry Pi generalmente ejecuta una variante de Debian, entonces tal vez comience con esa o con Ubuntu.

Respuesta3

proxy de despacho
Al utilizar el proxy de despacho, se pueden combinar muchas redes Wi-Fi/conexiones Ethernet/3G/4G y tener acceso a ellas como una conexión grande, de alto ancho de banda y carga equilibrada. Tenga en cuenta que para utilizar una velocidad de conexión más alta, el usuario debe usar un administrador de descargas por subprocesos que abrirá múltiples conexiones al proxy de despacho y las recuperará de manera efectiva utilizando múltiples interfaces, lo que dará como resultado velocidades de descarga combinadas y más rápidas.
instrucciones para instalarpara mac, también funciona para linux.

unidad de ISP
ISPUnity es un equilibrador de carga de Internet múltiple y conmutación por error de código abierto basado en rubygem/software.

Para Internet móvil lo recomiendo, dispatch-proxyya que no configura ningún ajuste como en ISP unity. esteenlace comentario sobre un kernel de Linux parcheado para equilibrio de carga incorporado, puede echarle un vistazo.

información relacionada