Roteamento com marcação de pacotes

Publicado por Marcio Jose em 07/04/2011

[ Hits: 11.996 ]

Blog: http://br.linkedin.com/in/marciojose

 


Roteamento com marcação de pacotes



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

Outras dicas deste autor

CentOS + Qmail-Toaster = SpamHaus/SpamCop com Score

Leitura recomendada

Livro: Migrando de Windows para Linux

Trabalhando com transações com PHP e MySQL

Como trocar chave de segurança entre servidores

Resolvendo o problema do VMware Player no Ubuntu 15.04 Vivid Vervet

Horário de verão automatizado

  

Comentários
[1] Comentário enviado por dfsantos em 08/04/2011 - 10:28h

Ótima dica amigo, realmente muito útil. Parabéns

[2] Comentário enviado por DouglasMenger em 03/12/2013 - 16:49h

Marcio,

Segui os passos do seu artigo mas não tive sucesso, fiz um monitoramento pelo log do firewall e observei que a saída dos pacotes estão indo para a interface do meu gateway secundário porem não e possível navegar ou acessar qualquer outra porta. Ate o momento não consegui entender o porque.

Meu firewall e simples não tem nenhum restrição de entrada ou saída.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts