Nesse cenário existem dois problemas.
1. Utilização da banda nos dois links
O firewall por ter apenas um default gateway, o acesso externo chegará pelo link da operadora B, porém sairá pela operadora A. Situação muito ruim, pois o serviço ainda dependerá do link principal.
2. Antispoofing
Caso o antisoofing esteja ativado no roteador de borda, apenas os IPs que são entregues por ele poderão sair, ou seja, o acesso realizado pelo segundo link saindo pelo link principal não funcionará de jeito nenhum. Essa situação é mais difícil de acontecer, pois poucas operadoras se preocupam em ativar esse recurso.
Demonstração do problema:
Pacote entrando pela interface eth2 (Operadora B), origem rede do cliente IP 200.7.7.2.
Pacote passando pela eth0 (LAN) ao servidor de aplicação 172.16.10.100 porta 3333 e servidor respondendo a requisição.
Pacote saindo pela eth1 (Operadora A), IP de saída 187.8.8.5 para o cliente 200.7.7.2.
Solução
A solução é bem simples, basta marcar os pacotes que entram pelo segundo link e configurar outra tabela de roteamento contendo um default gateway para os pacotes marcados.
1. Editar o script do iptables do servidor D8-FW01, adicionando no final do arquivo.
# vim /usr/local/bin/fwregras.sh
#Setar a marca 10 nos pacotes com o destino ao 187.8.8.5 (IPOBP) e porta 3333.
iptables -t mangle -A PREROUTING -i eth2 -p tcp -d $IPOPB --dport 3333 -j MARK --set-mark 10
#Salva a marcação dos pacotes.
iptables -t mangle -A PREROUTING -i eth2 -p tcp -d $IPOPB --dport 3333 -j CONNMARK --save-mark
#Quando o servidor estiver devolvendo o pacote a marcação será restaurada.
iptables -t mangle -A PREROUTING -i eth0 -p tcp -s $SERVER --sport 3333 -m state --state ESTABLISHED,RELATED -j CONNMARK --restore-mark
2. Criar uma tabela de roteamento com número 200 com nome rotasmark10.
# echo "200 rotasmark10" >> /etc/iproute2/rt_tables
3. Configurar o arquivo interfaces, adicionando no final do arquivo.
# vim /etc/network/interface
#Cria a regra fwmark10 dizendo que os pacotes marcados com 10 utilizas a tabela rotasmark10.
up ip rule add fwmark 10 table rotasmark10 || /bin/true
#Adicionar a rede LAN 172.16.10.0/24 na tabela rotasmask10.
up ip route add 172.16.10.0/24 dev eth0 table rotasmark10 || /bin/true
#Configura o default gateway da tabela rotasmask10.
up ip route add default via 187.8.8.1 dev eth2 table rotasmark10 || /bin/true
4. Subir rotas manualmente, para não precisar reiniciar o firewall, executando os comandos.
# ip rule add fwmark 10 table rotasmark10
# ip route add 172.16.10.0/24 dev eth0 table rotasmark10
# ip route add default via 187.8.8.1 dev eth2 table rotasmark10
5. Testar o acesso.
Pacote entrando pela interface eth2 (Operadora B), origem rede do cliente IP 200.7.7.2 e já mostrando o retorno, ou seja, configuração realizada com sucesso!
6. Caso ainda não esteja funcionando existe alguns comandos para auxiliar no troubleshooting.
Validar se a regra fwmark foi criada.
# ip rule list
Validar se as rotas estão ativas na tabela de roteamento 200.
# ip route list table 200
Validar se as regras de marcação foram carregadas e estão corretas.
# iptables -t mangle -nvL | grep 3333
Validar se os pacotes para a porta 3333 estão sendo marcados.
# watch 'iptables -t mangle -nvL | grep 3333'
Considerações
Configurei a marcação de pacotes apenas para o segundo link, todavia é interessante fazer a marcação para ambos os links, pois caso seja necessário alterar a rota default para a operadora B não ocorrera a mesmo problema.
Referências