2011/03/18

Roteamento de Dois links com marcação de pacote

Objetivo:
- Através de marcação de pacotes determinar as solicitações de internet da rede interna para provedores diferentes.

Considerando a seguinte estrutura:
- Dois provedores com modens configurados com os IPs internos 172.0.0.104/24 e 192.168.1.1/24;
- Rede interna 10.1.0.0/24.

Tratamento da estrutura para com o objetivo:
- O modem do provedor que tem o modem 172.0.0.104/24 se chamará vm e o do 192.168.1.1/24 se chamará comp;
- Para a rede interna sair para a internet pelo provedor vm (172.0.0.104/24) deveremos marcar os pacotes como 2 e
para a internet pelo provedor comp (192.168.1.1/24) deveremos marcar os pacotes como 1;

Mão na massa
1 - Criar uma tabela de roteamento para cada provedor:
Editar o arquivo /etc/iproute2/rt_tables
Inserir as tabelas:
200 comp
201 vm

Para verificar se as tabelas estão criadas, digite:
# ip route list table comp
Não deve retornar nenhum valor ou erro. Repita o passo para a tabela vm.

2 - Agora precisamos criar o default gateway para cada tabela que criamos no item 1:
# ip route add default via 172.0.0.104 table vm
# ip route add default via 192.168.1.1 table comp

Para verificar a configuração, digite:
# ip route list table vm
# ip route list table comp
Deve retornar somente uma linha com a rota padrão de cada tabela.

3 - Determinar qual marcação será encaminhada para cada tabela de roteamento criada no item 1:
Como mencionado acima, a internet para o provedor do modem 172.0.0.104/24 (vm) tem a marcação dos pacotes como 2 e para o provedor do modem 192.168.1.1/24 (comp) terá a marcação dos pacotes como 1. Sendo assim, vamos criar as regras para o roteamento.
# ip rule add fwmark 1 table comp
# ip rule add fwmark 2 table vm

Para verificar a configuração, digite:
# ip rule list

4 - Determinar o que será marcado para cada link de internet com base na regras criadas no item 3:
Vamos agora determinar através do iptables, na tabela nat, na chain PREROUTING (Antes do roteamento) qual a condição para que o pacote seja marcado como 1 (comp - 192.168.1.1/24) ou 2 (vm - 172.0.0.104/24). No meu caso, determinei assim:
a) Que a navegação (80 e 443) seja pela tabela comp para sair pelo gateway 192.168.1.1/24 (configurado no item 2) que tem que ser marcado como 1 (configurado no item 3)
b) Que para email (25,110) para a tabela vm para sair pelo gateway 172.0.0.104/24 (configurado no item 2) que tem que ser marcado como 2 (configurado no item 3).
# iptables -t nat -t mangle -A PREROUTING -p tcp -m multiport --dport 80,443 -j MARK --set-mark 1
# iptables -t nat -t mangle -A PREROUTING -p tcp -m multiport --dport 25,110 -j MARK --set-mark 2

Considerações finais
Caso o pacote não seja marcado, ele irá para a tabela main do ip route, ou seja, para o gateway default que está configurado. Tendo a marcação no iptables e não diretamente no ip route lhe dá maior facilidade e flexibilidade para determinar a regra em que o pacote é marcado (ip origem, ip destino, porta origem, porta destino, interface, protocolo, etc).

Nenhum comentário: