Linux: Dois Gateways em um sistema

Descrição do Problema
Você possui um servidor ou computador Linux que possui duas ou mais placas de redes, então você tenta adicionar o seguinte fragmento de configuração no seu script de configuração de rede:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface

auto lo
iface lo inet loopback

# The primary network interface

allow-hotplug eth0
iface eth0 inet static
address 192.168.0.10
netmask 255.255.255.0
gateway 192.168.0.1

# The secondary network interface
allow-hotplug eth1
iface eth1 inet static
address 10.10.0.10
netmask 255.255.255.0
gateway 10.10.0.1

Caso você faça isso encontrará um grande problema na comunicação de rede, este caso é chamado de asynchronous routing onde o roteador rejeitará os pacotes pois não saberá em qual interface ele deve enviar os pacotes.

Solução
Todas as distribuições atuai possuem incluídas e instalado o pacote iproute2, que pode ser utilizado para solução deste problema. Em sua grande maioria, um sistema Linux possui apenas um tabela de rota, na qual apenas um gateway default existe. Com iproute2, você possui a possibilidade de configurar rotas adicionais, a nesta tabela permitir que o sistema possa rotear através de regras específicas.

Posição inicial:
Vamos assumir que você possui duas interfaces, eth0 e eth1. Estas duas interfaces usarão as seguintes subnets: 192.168.0.0/24 (Classe C) e 10.10.0.0/24 (Classe C), onde o primeiro IP válido será o gateway(seu roteador). Vamos assumir que você esteja utilizando um sistema Debian ou Ubuntu:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface

auto lo
iface lo inet loopback

# The primary network interface

allow-hotplug eth0
iface eth0 inet static
address 192.168.0.10
netmask 255.255.255.0
gateway 192.168.0.1

# The secondary network interface
allow-hotplug eth1
iface eth1 inet static
address 10.10.0.10
netmask 255.255.255.0

Para adicionar uma nova tabela de roteamento, edite o arquivo /etc/iproute2/rt_tables. Vamos apelidar esta tabela de rt2, um acrônimo para “Routing Table 2”, vamos também adicionar como a rota de maior preferência, utilizando o numero 1:

#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
1 rt2

Configurando a nova tabela de roteamento
A partir de agora possuímos já uma nova tabela de roteamento, vamos então popular esta tabela adicionando as rotas na respectiva tabela manualmente:

#/bin/bash
ip route add 10.10.0.0/24 dev eth1 src 10.10.0.10 table rt2
ip route add default via 10.10.0.1 dev eth1 table rt2

O primeiro comando configura que a rede 10.10.0.0/24 pode ser alcançada através da interface eth1, já o segundo configura a rota padrão através do IP 10.10.0.1.

Agora vamos aplicar as regras de roteamento relacionando a tabela criada:

#/bin/bash
ip rule add from 10.10.0.10/32 table rt2
ip rule add to 10.10.0.10/32 table rt2

As regras acima criadas instruem que todo o tráfego gerado do ip 10.10.0.10 bem como o trafego direcionado para, ou através deste endereço utilize a tabela rt2.

Porém reiniciando o sistema você perderá todas as configurações efetuadas.

Tornando as configurações permanentes
Temos algumas formas de tornar estas configurações permanentes, uma delas é adicionando-as em /etc/rc.local que executado após os processos de inicialização. Para sistemas Debian ou baseados, podemos adicionar parâmetros no próprio arquivo de configuração da interface:

iface eth1 inet static
address 10.10.0.10
netmask 255.255.255.0
post-up ip route add 10.10.0.0/24 dev eth1 src 10.10.0.10 table rt2
post-up ip route add default via 10.10.0.1 dev eth1 table rt2
post-up ip rule add from 10.10.0.10/32 table rt2
post-up ip rule add to 10.10.0.10/32 table rt2

Possui mais interfaces?
Aplique este mesmo conceito para as placas adicionais, quantas forem.

Verificando a configuração
Reinicie seu sistema e execute os seguintes comandos:

ip route list table rte

Este comando trará as rotas configuradas.

ip rule show

Este comando retornará as regras configuradas anteriormente.

Para a documentação completa do pacote iproute2 visite o site http://lartc.org ou consulte o manpages.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.