Balanceamento de carga de caixa NAT com iptables e 4 uplinks DHCP

3

Estou tentando configurar um roteador que forneça Internet para algumas centenas de usuários. Este roteador tem 4 uplinks de cabo básicos à sua disposição, que usam DHCP e têm uma capacidade de cerca de 10/1 Mbps.

O roteador tem 3 interfaces:

  • eth0 conectado à rede administrativa, 192.168.A.0 / 24 (pode ser ignorado)
  • eth1 conectado à rede de usuários, 192.168.B.0 / 23
  • eth2 conectado a um switch de VLAN, com os modems em 4 VLANs diferentes.

ip route, regra ip e detalhes iptables podem ser encontrados aqui : link

Os números de VLAN são de 24 a 27 e as tabelas de roteamento correspondentes têm os mesmos números. Cada uma dessas tabelas de roteamento contém entradas no nível do link para eth0, eth1 e eth2.X, bem como a rota padrão fornecida pelo servidor DHCP. Note que é possível que 2 dos modems acabem na mesma sub-rede ...

Eu uso o CONNMARK e a regra ip para marcar conexões e redirecioná-las para tabelas de roteamento específicas do modem. Eu também tenho um dhclient-hook que cuida da atualização dessas tabelas de roteamento secundárias sempre que a concessão do DHCP for atualizada.

A política padrão do iptables é DROP para INPUT e FORWARD e ACCEPT para OUTPUT. Observe que a seção de regra de IP redireciona fwmarks 3 & 4 de volta aos modems 1 & 2, mas isso é temporário, pois os outros 2 modems ainda estão passando o tráfego dos usuários (não podemos desconectá-los totalmente ...)

Agora, com tudo isso dito, essa solução funciona bem, mas exibe cerca de 50% de perda de pacotes, qualquer que seja o uplink escolhido: Alguém poderia me dizer o que estou fazendo de errado? Eu tenho cutucado esse problema por várias horas agora e está ficando extremamente frustrante ...

Obrigado antecipadamente, - Thomas

    
por Thomas 04.04.2012 / 20:25

1 resposta

0

Acho que encontrei o problema: CONNMARK . Em mangle-PREROUTING , parece que o --restore-mark apenas define a marca para a próxima tabela, então as regras subsequentes correspondem a --mark=0 e definem uma nova marca para cada pacote.

A solução seria marcar apenas os pacotes que correspondem a --state NEW . No entanto, também decidimos que os clientes devem ter IPs consistentes ao acessar sites, caso contrário, alguns aplicativos, especialmente o e-banking, falham.

Então, finalmente, a marcação foi feita em uma base de IP, com nosso pool de fontes dividido em várias sub-redes / 25.

HTH!

Thomas

    
por 22.04.2012 / 20:14