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 e 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
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).
Post previamente publicado em meu blog:
http://marciojose.blogspot.com/2011/03/roteamento-de-dois-links-com-
marcacao.html