sexta-feira, 6 de dezembro de 2013

Laboratório de Roteamento Estático no Linux

Olá Pessoal.

No Lab02 do livro "Laboratórios de Tecnologias Cisco em Infraestrutura de Redes" (figura abaixo) o leitor aprende, através da prática, a configurar roteamento estático no ambiente de uma inter-rede utilizando roteadores da Cisco. 


A proposta desse artigo em formato de laboratório é reproduzir esse mesmo cenário utilizando o Emulador CORE (Common Open Research Emulator), um projeto da marinha norte-americana que é totalmente baseado em Linux. Ao fazê-lo é possível trazer ao leitor do blog um paralelo de como configurar o roteamento estático através de roteadores Linux.

Para tanto, primeiro é necessário reproduzir a topologia da rede que iremos configurar,  um processo bastante simples através da interface gráfica do CORE - tão simples quanto montar topologias no Simulador Cisco Packet Tracer ou no Emulador GNS3. A figura abaixo traz o resultado da reprodução da topologia no CORE, destacando que temos duas unidades remotas conectadas por uma rede de longa distância (WAN 192.168.0.248/30), uma com 3 sub-redes locais e outra com 2 sub-redes locais.


O mais importante para configurar roteamento estático é a organização das informações que serão posteriormente utilizadas na interface de linha de comando. A sintaxe da linha de comando para inserção de rotas é bastante simples, desde que o administrador saiba exatamente quais redes precisam ser adicionadas em quais roteadores e através de qual interface (ou endereço de próximo salto) é possível alcançá-las. 

Cabe destacar que toda interface de rede configurada com um endereço IP implica na inserção automática de uma rota referente àquela rede diretamente conectada, o que é natural porque a interface passa a ser membro da rede. Por isso é importante identificar quais redes estão diretamente conectadas através de quais interfaces para que, posteriormente, fique fácil visualizar quais redes precisam ser adicionadas em cada um dos roteadores. 

Seguindo a mesma lógica de raciocínio apresentada no livro, abaixo trago duas tabelas organizando essas informações. A primeira tabela apresenta o mapeamento das redes diretamente conectadas nas interfaces dos roteadores, enquanto que a segunda tabela traz uma relação das rotas que precisamos incrementar através da configuração de roteamento estático.


Preenchidas essas tabelas fica fácil enxergar que no roteador n1-LinuxRouter1 é necessário adicionar as redes 192.168.8.0/24 e 192.168.9.0/24; e que no roteador n2-LinuxRouter2 é necessário adicionar as redes 192.168.1.0/24, 192.168.2.0/24 e 192.168.3.0/24. Mas antes de fazer qualquer configuração de roteamento estático no Linux é importante lembrar que o Linux não se comporta como roteador por padrão, negando todo o encaminhamento de pacotes entre redes distintas.

Por isso até esse momento nem mesmo as redes diretamente conectadas em cada unidade remota conseguem se comunicar, mesmo com informações automáticas nas tabelas de roteamento. O comando para instruir o kernel do Linux a fazer roteamento e permitir o tráfego inter-rede deve ser realizado em ambos os roteadores:

nX-LinuxRouterX# echo "1" > /proc/sys/net/ipv4/ip_forward

Com esse comando as redes diretamente conectadas em cada unidade já passam a se comunicar, no entanto ainda não há comunicação entre as redes das unidades remotas porque cada roteador somente conhece suas redes. Para viabilizar essa comunicação iremos configurar roteamento estático em ambos roteadores, alimentando suas tabelas de roteamento para que seja possível fazer o encaminhamento. Os comandos necessários para configurar o roteamento estático são trazidos abaixo, reparem que estamos nos balizando na tabela de incremento de rotas anteriormente preenchida para organizar as informações:

n1-LinuxRouter1# route add -net 192.168.8.0/24 gateway 192.168.0.250
n1-LinuxRouter1# route add -net 192.168.9.0/24 gateway 192.168.0.250

n2-LinuxRouter2# route add -net 192.168.1.0/24 gateway 192.168.0.249
n2-LinuxRouter2# route add -net 192.168.2.0/24 gateway 192.168.0.249
n2-LinuxRouter2# route add -net 192.168.3.0/24 gateway 192.168.0.249

Apenas para constar, essa mesma configuração poderia ser feita através do comando "ip" ao invés do comando "route". Nesse caso, a configuração ficaria da segiunte forma:

n1-LinuxRouter1# ip route add 192.168.8.0/24 dev eth0
n1-LinuxRouter1# ip route add 192.168.9.0/24 dev eth0

n2-LinuxRouter2# ip route add 192.168.1.0/24 dev eth0
n2-LinuxRouter2# ip route add 192.168.2.0/24 dev eth0
n2-LinuxRouter2# ip route add 192.168.3.0/24 dev eth0

Pronto, é só isso! No caso do Cisco/IOS é comum informarmos o endereço IP da interface do roteador vizinho (próximo salto) para chegar na rede de destino, mas também é possível informar a interface de saída do roteador local. No Linux vale a mesma regra, ou seja, podemos informar a interface de saída do roteador local (por ex.: route add -net 192.168.1.0/24 dev eth0) ou o endereço da interface do roteador vizinho (por ex.: route add -net 192.168.1.0/24 gateway 192.168.0.249). Tenham em mente que uma rota é uma tupla composta por duas informações: (rede adicionada, próximo salto). Para finalizar o artigo, abaixo trago as saídas das tabelas de roteamento de ambos os roteadores:



Abraço.

Samuel.

10 comentários:

  1. Ótimo artigo Samuel, e bem um util. Parabéns pelo trabalho !!!

    É possível estabelecer um tunnel gre l2tp entre linux e cisco ?

    Abraços

    ResponderExcluir
    Respostas
    1. É possível e comum estabelecer um túnel GRE entre Cisco e Linux, uma configuraçao que pode ser tema de um novo artigo. Já o suporte a L2TP é menos comum nos roteadores convencionais...

      Excluir
  2. Ótimo artigo Samuel,

    Eu gostaria de deixar aqui uma contribuição.
    No caso echo "1" > /proc/sys/net/ipv4/ip_forward, caso o host seja reiniciado, o forward se perde e teremos que setá-lo novamente.

    Podemos fazer o seguinte:

    1) Verificando como anda a variável:

    # sysctl -a | fgrep -i ip_forward

    net.ipv4.ip_forward = 0 (saída do comando mostrando que não está habilitada)

    2) execute o comando abaixo para habilitar e deixar salvo o forward:

    # sysctl -w net.ipv4.ip_forward=1

    Abraços,

    Ricardo Tweeg

    ResponderExcluir
    Respostas
    1. Ricardo, grato pela contribuição!

      Outra opção comum é colocar todas as configurações voláteis, ou seja, aquelas que se perdem no processo de boot, inclusive as configurações de rotas, em um script vinculado ao arquivo rc.local que sempre é executado na incialização do sistema.

      Abraço.

      Excluir
  3. Ola Samuel
    Vou fazer este laboratorio em maquinas virtuais. Vou usar o VirtualBox

    ResponderExcluir
    Respostas
    1. Configurei com máquinas virtuais funcionou direitinho.
      Usei uma maquina com CentOS 6.4 e outra com Debian Wheezy.

      Excluir
    2. Ótimo Mauro,
      É sempre mais interessante quando o leitor consegue reproduzir o laboratório aqui apresentado. Grato pelo feedback.
      Abraço.

      Excluir
  4. Olá Samuel,
    É possível fazer o roteamento estático usando mais de dois roteadores? Estou tentando e não consigo.

    ResponderExcluir
    Respostas
    1. Sim, é possível confiurar roteamento estático com qualquer quantidade de roteadores. Basta você ficar atento com os endereços de próximo salto ao adicionar as rotas.

      Excluir