Configurando o segundo default gateway para um link de entrada específico

Por padrão um host tem apenas um default gateway, no entanto o que aconteceria se um firewall tiver dois links de internet conectados e necessitar publicar um serviço no IP válido do link que não seja a rota default?! Nesse artigo mostro o cenário em que essa situação pode ocorrer e a solução definitiva.

[ Hits: 11.712 ]

Por: Sergei Martao em 07/12/2015


Problemas e soluções



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


Página anterior    

Páginas do artigo
   1. Introdução
   2. Problemas e soluções
Outros artigos deste autor

Simulando redes com o GNS

Openswan - Configurando uma conexão VPN Site-to-Site e simulando com GNS3

Utilizando o script vpnautomatica

Criando um template customizado para o CACTI

Planejando e migrando softwares do Windows para o Linux

Leitura recomendada

Instalando DNS Server (BIND) no CentOS 7

My Traceroute (MTR) , uma ferramenta de diagnóstico de rede

Problemas encontrados na adoção do IPv6

Configuração do ZERO de um Servidor DHCP

VLAN Tagging nos sistemas GNU/Linux derivados do Red Hat

  
Comentários
[1] Comentário enviado por fabio_cirino em 08/12/2015 - 12:48h


Muito bom... parabens

[2] Comentário enviado por sergeimartao em 09/12/2015 - 08:31h

Obrigado Cirino!

[3] Comentário enviado por Icone em 21/12/2015 - 11:55h

Bom dia, estava lendo esse seu post e acho que vc pode me ajudar.
Nos trocamos o sistema da associação comercial aqui de onde eu moro para que os associados possam emitir seus boletos on line.
A Empresa do software pede que eu libere portas de acesso para que eles possam liberar um link ou regra para eu colocar no site da associação para os associados acessarem suas constas.
E preciso criar as regras para que eles criem dentro do sistema deles um script de acesso pra eu colocar no nosso site para os usuarios utilizarem para emitir os boletos.
O IP wan do nosso link é 131.121.xxx.xxx e o ip do servidor é 192.168.xxx.xxx preciso liberar as portas:
TCP 1433 e UPD 1434. vcs poderiam me orientar em como fazer isso por favor.
Não conheço nada do Endian, alias, e a primeira vez que estou instalando, so atraves de posts de configuração, se vc puder me ajudar te agradeço e muito, ótimo dia pra vc.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts