Eu tenho dois ISPs diferentes. Eu quero definir algum tipo de configuração de balanceamento de carga que irá distribuir pacotes para esses provedores. Eu sei que isso pode ser feito usando tabelas de roteamento diferentes, mas eu queria usar algo chamado "gateway multipath".
Eu configurei as duas interfaces no arquivo /etc/network/interfaces
. Ambas as conexões funcionam separadamente. Eu substituí os gateways padrão pelo seguinte:
# ip route add default \
nexthop via 192.168.1.1 dev bond0 weight 1 \
nexthop via 10.143.105.17 dev wwan0 weight 1
Eu adicionei os alvos de mascaramento em iptables
em ambas as interfaces:
iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o bond0 -j MASQUERADE
Também ativei (parcialmente) a filtragem de caminho reverso via sysctl
:
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
Esta configuração funciona. Pacotes (conexões) são enviados através de ambas as interfaces. Há apenas um problema que não consigo.
Quando quero verificar meu endereço IP usando os seguintes comandos:
$ curl text.whatisyourip.org
$ curl eko.one.pl/host.php
O endereço IP é diferente nos dois casos, o que significa que o mecanismo funciona bem. Também posso ver isso funcionando em wireshark
. Mas quando estou tentando enviar, por exemplo, várias solicitações para o primeiro dos domínios acima, sempre recebo o mesmo endereço IP em resposta. Portanto, parece que os pacotes destinados ao endereço IP específico sempre passam pela mesma interface. Eu só estou me perguntando por quê. Existe algum mecanismo que lembre os endereços IP de destino das solicitações anteriores e faça com que as próximas solicitações aos mesmos endereços passem pela mesma interface?