Cenário Real: 2 Firewalls, 1 Servidor, 2 Placas de Rede
Você tem um servidor Linux com duas interfaces de rede, cada uma conectada a um firewall diferente, cada um com uma rota independente para a internet. Um cenário comum em ambientes de DMZ redundante ou links paralelos.
Exemplo de IPs:
- eno1:
192.168.1.50
, com gateway192.168.1.1
(Firewall 1) - eno2:
172.16.3.2
, com gateway172.16.3.1
(Firewall 2)
O objetivo: permitir que o tráfego originado de cada IP saia pelo respectivo gateway, sem afetar a rota principal do sistema.
O Problema
Ao adicionar uma segunda interface com outro gateway, você não pode simplesmente adicionar outra default route, pois o kernel só usa uma por vez.
Você também não pode deixar sem rota, porque o pacote sai por um link e volta pelo outro — o que gera bloqueios, NAT quebrado e sessões TCP falhando.
A Solução: Roteamento com Tabelas e Regras (Policy Routing)
O Linux permite usar múltiplas tabelas de roteamento.
A regra é simples:
- Pacote vindo de 192.168.1.50 → usar tabela rt1 → sair pelo Firewall 1
- Pacote vindo de 172.16.3.2 → usar tabela rt2 → sair pelo Firewall 2
Passo a Passo
1. Adicione tabelas customizadas
Abra o arquivo /etc/iproute2/rt_tables
:
nano /etc/iproute2/rt_tables
E adicione ao final (ou use os comandos abaixo):
100 rt1
200 rt2
Ou via terminal:
grep -q 'rt1' /etc/iproute2/rt_tables || echo "100 rt1" >> /etc/iproute2/rt_tables
grep -q 'rt2' /etc/iproute2/rt_tables || echo "200 rt2" >> /etc/iproute2/rt_tables
2. Adicione rotas separadas por tabela
# Rotas da eno1 → rt1
ip route add 192.168.1.0/24 dev eno1 src 192.168.1.50 table rt1
ip route add default via 192.168.1.1 dev eno1 table rt1
# Rotas da eno2 → rt2
ip route add 172.16.3.0/24 dev eno2 src 172.16.3.2 table rt2
ip route add default via 172.16.3.1 dev eno2 table rt2
3. Regras baseadas no IP de origem
ip rule add from 192.168.1.50 table rt1
ip rule add from 172.16.3.2 table rt2
4. (Opcional, mas recomendado) Desabilite verificação de rota reversa
Em sistemas com múltiplos gateways, o Reverse Path Filtering pode bloquear tráfego legítimo:
sysctl -w net.ipv4.conf.eno1.rp_filter=2
sysctl -w net.ipv4.conf.eno2.rp_filter=2
Para tornar permanente, edite o /etc/sysctl.conf
:
net.ipv4.conf.eno1.rp_filter = 2
net.ipv4.conf.eno2.rp_filter = 2
O Que Aparece no route -n
?
Nada muda. O route -n
só mostra a tabela principal (main):
Destination Gateway Genmask Iface
0.0.0.0 192.168.1.1 0.0.0.0 eno1
192.168.1.0 0.0.0.0 255.255.255.0 eno1
172.16.3.0 0.0.0.0 255.255.255.0 eno2
As outras tabelas são acessadas por:
ip route show table rt1
ip route show table rt2
ip rule
Teste Prático
Após aplicar, teste com:
curl --interface eno2 http://ipinfo.io
Você deve ver o IP público da DMZ 2 (Firewall 2).
Script para Automação (rc.local
)
Se quiser aplicar tudo no boot, edite /etc/rc.local
com:
#!/bin/bash
# Tabelas de roteamento (caso não existam)
grep -q 'rt1' /etc/iproute2/rt_tables || echo "100 rt1" >> /etc/iproute2/rt_tables
grep -q 'rt2' /etc/iproute2/rt_tables || echo "200 rt2" >> /etc/iproute2/rt_tables
# Rotas separadas
ip route add 192.168.1.0/24 dev eno1 src 192.168.1.50 table rt1
ip route add default via 192.168.1.1 dev eno1 table rt1
ip route add 172.16.3.0/24 dev eno2 src 172.16.3.2 table rt2
ip route add default via 172.16.3.1 dev eno2 table rt2
# Regras de origem
ip rule add from 192.168.1.50 table rt1
ip rule add from 172.16.3.2 table rt2
# Ajustes de reverse path filter
sysctl -w net.ipv4.conf.eno1.rp_filter=2
sysctl -w net.ipv4.conf.eno2.rp_filter=2
exit 0
Não esqueça:
chmod +x /etc/rc.local
Conclusão
Usar múltiplos gateways com roteamento baseado em IP de origem é a forma correta e elegante de lidar com servidores multihomed em Linux. Essa abordagem mantém a rota principal intacta, evita loops de retorno e resolve o tráfego assimétrico de forma profissional.