Os objetivos desse artigo são:
- Apresentar o cenário onde existe a necessidade de publicar um serviço em dois links de internet.
- Detalhar os problemas que podem ocorrer e como identificá-los.
- Aplicar a solução e assim fazer dois default gateway funcionar de forma plena.
Cenário
A empresa ACME possui um servidor Debian 8 (D8-SRV01) que executa uma aplicação na porta 3333, o servidor tem o seguinte IP de Lan 172.16.10.100 e esta conectando diretamente a um firewall
Linux executando Iptables puro (D8-FW01) IP de Lan 172.16.10.254, existe um link de internet dedicado com a operadora A conectado diretamente ao firewall, o IP válido fornecido é 200.2.2.5, assim o firewall faz o redirect desse IP na porta 3333 para o IP interno do servidor (D8-SRV01) e tudo funciona adequadamente.
Devido a importância desse serviço e as constantes instabilidades da operadora A a empresa ACME decide contratar um segundo link de internet com a operadora B, recebendo o IP válido 187.8.8.5, como o serviço da porta 3333 é muito conhecido por todos os funcionários e o software que utiliza é bem complexo de configurar o gerente pede para que não troque a porta acessada externamente, ou seja, a porta de acesso deve ser a mesma tanto na operadora A quanto na operadora B. O administrador de rede muito feliz pela possibilidade de aumentar a disponibilidade do serviço com a contratação de mais um link de internet, acaba percebendo que fazer os acessos do servidor funcionar simultaneamente pelas duas operadoras não vai ser uma tarefa tão fácil quanto pensava.
De formar resumida, o cenário da empresa ACME é esse:
Configurações do Firewall (D8-FW01)
Localização e conteúdo do script iptables:
cat /usr/local/bin/fwregras.sh
#Limpando regras
iptables -F
iptables -F -t nat
iptables -F -t mangle
#Definindo politica padrão
iptables -P INPUTS DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#Declarando variáveis
SERVER=172.16.10.100
IPOPA=200.2.2.5
IPOPB=187.8.8.5
#Liberando FORWARD
echo 1 > /proc/sys/net/ipv4/ip_forward
#Liberando ICMP INPUT
iptables -A INPUT -p icmp -j ACCEPT
#Liberando SSH INPUT na porta 22 (apenas para ambiente de teste)
iptables -A INPUT -p tcp -s 0/0 --dport 22 -j ACCEPT
#Mascarando o ICMP
iptables -t nat -A POSTROUTING -p ICMP -o eth0 -j MASQUERADE
#Redirect para os IPs válidos
iptables -t nat -A PREROUTING -p TCP -d $IPOPA --dport 3333 -i eth1 -j DNAT --to $SERVER:3333
iptables -t nat -A PREROUTING -p TCP -d $IPOPB --dport 3333 -i eth2 -j DNAT --to $SERVER:3333
#Forward para o servidor D8-SRV01
iptables -A FORWARD -p TCP -d $SERVER --dport 3333 -j ACCEPT
#NATs para o servidor D8-SRV01
iptables -t nat -A POSTROUTING -s 172.16.10.100 -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 172.16.10.100 -o eth2 -j MASQUERADE
#Tornando o firewall STATEFUL
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Arquivo de configuração das interfaces de rede:
cat /etc/network/interface
allow-hotplug eth0
iface eth0 inet static
address 172.16.10.254
netmask 255.255.255.0
allow-hotplug eth1
iface eth1 inet static
address 200.2.2.2
netmask 255.255.255.252
gateway 200.2.2.1
allow-hotplug eth2
iface eth2 inet static
address 187.8.8.2
netmask 255.255.255.252