Implementando balanceamento de carga em qualquer distribuição Linux

4

Estou pensando em implementar uma solução de balanceamento de carga para uso pessoal.

O que eu quero fazer é maximizar a taxa de transferência de dados nas conexões de Internet do telefone celular. Deixe-me ser claro:

Eu tenho plano de dados no meu celular e minha família tem seus respectivos planos de dados em seus telefones também. Se eu puder conectar até 4 telefones em um PC (de mesa) (através de USB, de preferência), então eu alcançarei (teoricamente) uma conexão de Internet mais rápida do que qualquer um dos 4 telefones pode alcançar (se eu conectá-los a um PC). / p>

Esse computador desktop funcionará como um roteador para uma intranet.

Se o acima tem uma base sólida (eu posso estar errado - não sei as tecnologias envolvidas em grande detalhe), eu preciso de um modo de implementar isso.

Eu vi que a ferramenta para o trabalho é ipvs (certo?) mas não como.

Distro-wise o trabalho pode ser feito em qualquer distro, mas eu sei que conectar um telefone Android com o Ubuntu funciona plug and play. Então, se eu puder fazer isso no Ubuntu, provavelmente será mais rápido do que compilar tudo do strach.

Existe um parente como? Existe uma distro que talvez faça o balanceamento de carga e identifique as conexões de internet via USB instantaneamente?

    
por nass 24.06.2014 / 15:37

3 respostas

2

Para balancear as conexões de saída, tudo o que você precisa é o padrão iptables e algum roteamento de políticas. Isso fica um pouco complexo com 4 conexões, pois você precisará reconfigurar e reequilibrar os links à medida que as conexões entrarem e saírem.

A configuração iptables bruta é

  • Crie uma tabela de roteamento para cada conexão

    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
    
  • Adicione o gateway padrão para cada conexão a cada tabela (o IP do gateway variará de acordo com cada provedor / configuração de telefones)

    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 qualquer fluxo não marcado, que irá rotear o fluxo através de uma conexão específica. OUTPUT é usado para processos locais. Use PREROUTING se você estiver encaminhando tráfego para outros 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 uma das conexões (a interface precisará ser a conexão telefônica que aparecer para o 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
    

Observe que uma única conexão TCP ou UDP não terá aceleração, pois ainda estará passando por um único link. Você tem que usar várias conexões simultâneas (pelo menos 4) para fazer uso da largura de banda extra. A maioria dos navegadores faz isso sob o capô ao solicitar vários objetos. Alguns gerenciadores de download permitem que você use várias conexões para um único arquivo.

Como garethTheRed sugere, ispunity adiciona um pouco da "cola" no topo desta iptables setup para percorrer uma lista de conexões, verificar se o gateway está respondendo, reequilibrar se algo estiver errado, etc. " sessão pegajosa "gerenciamento parece ser configuração adicional por porta em cima de sua base" round robin "balanceamento de carga de conexões. Outra solução é o Net-ISP-Balance , um script Perl e uma biblioteca que automatiza o iptables e a configuração da tabela de roteamento, monitora o status do ISP, alerta sobre problemas e reconfigura o roteamento no caso de um ou mais ISPs se tornarem inacessíveis.

Observe também que as solicitações provenientes de vários IPs podem interromper alguns serviços que são baseados em pesquisas de IP consistentes e você pode precisar adicionar regras adicionais para esses serviços para vinculá-los a uma conexão. Você não verá nenhuma aceleração em conexões únicas, apenas quando estiver fazendo 4 coisas ao mesmo tempo, o que a maioria dos navegadores tentará fazer de qualquer maneira.

ipvs é mais para criar um endereço de serviço virtual para as coisas que você hospeda, para que o serviço possa ter failover entre vários hosts.

    
por 24.06.2014 / 20:40
2

Isso poderia ser possível - ispunity é um projeto que equilibra a sua conexão com a Internet. Está escrito em Ruby. Eles estão rodando em um Raspberry Pi , então ele deve rodar em qualquer distro razoável.

A única diferença entre o deles e seu cenário é que eles usaram Ethernet enquanto você está propondo o uso de 3G. Suponho que muito do seu sucesso (ou fracasso) depende de como os seus 4 telemóveis apresentam a sua Internet em USB.

Como o Rasberry Pi geralmente roda uma variante do Debian, então talvez comece com isso ou com o Ubuntu.

    
por 24.06.2014 / 16:56
0

dispatch-proxy
Usando o proxy de despacho, pode-se combinar muitas redes Wi-Fi / conexões Ethernet / 3G / 4G e ter acesso a elas como uma grande conexão de carga balanceada de alta largura de banda. Observe que para usar uma velocidade de conexão mais alta, o usuário deve usar um gerenciador de download encadeado que abrirá várias conexões com o proxy de despacho e as buscará usando várias interfaces, resultando em velocidades de download combinadas e mais rápidas. href="https://imgur.com/a/TSD5F"> instruções para instalar para mac, também funciona para linux.

Unidade do ISP
O ISPUnity é um software de balanceamento de carga e failover baseado em software open source rubygem / software.

Para a Internet móvel, eu recomendo dispatch-proxy , pois você não configura nenhuma configuração como na unidade ISP. este comentário de link sobre um kernel Linux lineado para balanceamento de carga embutido, você pode dar uma olhada.

    
por 24.06.2014 / 17:57