A parte de balanceamento de carga do seu script diz:
- Se eu já conheço essa conexão, deixe-a seguir da mesma maneira que anteriormente
- Se eu não enviar, metade do tempo em uma interface, metade do tempo no outro
Então você tem um número igual de conexões em cada interface.
Mas algumas conexões têm apenas 3 pacotes, quando outras têm 1000, a contagem de pacotes não será igual. Além disso, se você verificar o número de conexões abertas, pode ser desigual, porque algumas conexões duram mais.
Para carregar pacotes de saldo, você teria que excluir essas linhas:
$IPT -A PREROUTING -t mangle -j CONNMARK --restore-mark
$IPT -A PREROUTING -t mangle -m mark ! --mark 0 -j ACCEPT
$IPT -A PREROUTING -t mangle -j CONNMARK --save-mark
Seria uma idéia terrível, já que suas conexões teriam uma fonte ip diferente e metade do pacote não atingiria os serviços de destino por causa do roteamento assimétrico. E balanceamento de pacotes não equilibra bits enviados desde então. Mesmo os bits balanceados enviados não equilibram os bits recebidos.
Na minha opinião, você deve deixar seu script como está agora, e quanto mais tráfego houver, mais equilibrados serão seus links.