Uncategorized 12:14 PM
Roteamento Avançado – Forçando as rotas
Após a implementação do segundo link de internet aqui da empresa (Roteando múltiplos links de internet) descobri que alguns sites não funcionavam direito.
Os problemas começaram a ocorrer principalmente nos Internet Banking devido a mudança do IP durante a sessão do sistema.
Como sou usuário do Bradesco comecei a testar o acesso e verifiquei que durante uma sessão de Internet Banking, aproximadamente 4 hosts diferentes do Bradesco são conectados.
Como os hosts são de redes diferentes, é bem possível que cada para cada host seja utilizado um gateway diferente e é ai que ocorre a alteração do IP do cliente.
Para contornar esse problema de forma fácil e rápida é possível marcar os pacotes no firewall que atenderem a uma certa condição, como por exemplo o endereço de destino.
Uma vez que os pacotes estejam marcados é possível definir a tabela de roteamento a ser utilizada por esses pacotes.
Após inúmeros testes e muito monitoramento com tcpdump, netstat e whois, descobri as 3 redes de IP do Bradesco que eu deveria forçar a utilização por 1 dos links. Inseri 3 regras no firewall para marcar os pacotes destinados a essas redes.
# iptables -A PREROUTING -t mangle -p tcp -m tcp -d 200.173.19.0/25 -j MARK --set-mark 0x1
# iptables -A PREROUTING -t mangle -p tcp -m tcp -d 200.246.210.0/23 -j MARK --set-mark 0x1
# iptables -A PREROUTING -t mangle -p tcp -m tcp -d 200.155.80.0/20 -j MARK --set-mark 0x1
Uma vez que os pacotes estejam marcados é possível definir a tabela de roteamento a ser utilizada. Para isso utilizamos novamente o iproute2:
# ip rule add prio 11 fwmark 0x1 table isp1
# ip route flush cache
O exemplo acima assume que o nome da tabela do link 1 é isp1. Para maiores informações sobre como criar/nomear tabelas de roteamento consulte o artigo Roteando múltiplos links de internet
Após mais um tempo alguns usuários detectaram outros sites com o mesmo problema e o que percebi é que em sua grande maioria os serviços em questão rodavam sobre conexões seguras (https). Sendo assim alterei a regra no firewall para trafegar todu que for destinado a porta 443 pela link 1.
A regra abaixo cuida do serviço:
# iptables -A PREROUTING -t mangle -p tcp -m tcp --dport 443 -j MARK --set-mark 0x1
# ip route flush cache
É importante executar o comando ip route flush cache toda vez que for alterada alguma regra referente ao roteamento de pacotes.
Pronto, agora toda conexão https será direcionada para o primeiro link. Caso o link falhe é possível trocarmos a tabela de roteamento a ser utilizada:
# ip rule del prio 11 fwmark 0x1 table isp1
# ip rule add prio 11 fwmark 0x1 table isp2
# ip route flush cache
Usando o Nagios ou algum outro software de monitoramento (um simples shell script) é possível automatizar a detecção de problemas no link para alterar o link a ser utilizado por essas conexões, tornando assim o serviço praticamente ininterrupto.
Posts Relacionados:
Related posts brought to you by Yet Another Related Posts Plugin.