Felizmente a resolução deste problema é simples! Basta marcar através do iptables os pacotes da porta 443 (https) para que eles passem sempre pelo mesmo link, adicionando eles na nova tabela de roteamento criada anteriormente para tornar possível o load balance. Vamos usar apenas uma regra de iptables e outra de iproute, assumindo que seus clientes já estão navegando e as regras de FORWARD e NAT já estão corretas.
OBS1: Estou utilizando o exemplo do HTTPS, contudo caso tenha problemas com outros serviços, as mesmas regras se aplicam a outros protocolos.
Mão na massa!
Em primeiro lugar precisamos escolher por qual dos links todo o tráfego SSL vai passar, faça isso escolhendo uma das tabelas de roteamento criadas no arquivo rt_tables.
cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
10 LINK_A
20 LINK_B
No meu caso eu criei as tabelas LINK_A e LINK_B onde escolhi a segunda opção para trafegar os pacotes criptografados do https. Sabendo qual tabela vamos usar, vamos criar a regra de firewall que vai marcar os pacotes para que possamos manipulá-los livremente.
iptables -A PREROUTING -t mangle -p tcp -m tcp --dport 443 -j MARK --set-mark 0x1
Com esta regra, estamos dizendo que todos os pacotes TCP com destino a porta 443 vão ser marcados com o valor 0x1.
OBS: A única tabela que permite este tipo de marcação é a mangle, não vamos abordar aqui as tabelas do iptables mas asseguro que existe muita documentação sobre o assunto.
Vamos agora dizer que todos os pacotes marcados com o valor 0x1 vão ser direcionados para tabela escolhida, para isto basta digitar uma linha de comando:
ip rule add prio 11 fwmark 0x1 table LINK_B
Pronto! Basta limpar o cache das rotas e aproveitar.
ip route flush cache
;)
0sem comentários ainda