O seu portal de estudos

Roteamento estático no Linux

Posted by Vagner Fonseca em 29 de setembro de 2011


Tenho recebido muitos email e comentários em posts, principalmente no post sobre OpenVPN, onde a grande dúvida é sobre roteamento, neste artigo vou falar sobre como o roteamento estático funciona no Linux e também como e onde vamos utilizá-lo.

Assim agora poderemos dividir nossas redes em redes menores a fim de isolar sua comunicação, como também podemos rotear entre VPN.

Pra começar vamos entender alguns conceitos básicos sobre redes:
– As redes são compostas de máquinas (hosts) que possuem um endereço IP que pertença a mesma faixa de endereços, ou seja, a máscara de rede define quantas máquinas pertencem a uma mesma rede, por exemplo:
– Uma rede de IP 192.168.1.0 com máscara 255.255.255.192 ou (/26 em notação CIDR) é compostas por 64 máquinas que possuem endereços que vão de 192.168.1.1 até 192.168.1.62 (o endereço 192.168.1.0 é usado para referenciar a rede inteira e o endereço 192.168.1.63 é usado para o broadcast da rede). Esta rede só se comunica com as máquinas que estejam nesta faixa de IP e para isso não precisam de nenhum equipamento para auxiliá-las a encontrar essas máquinas, ou seja não precisam de roteador, apenas de um switch para conectá-las.

Apesar de não precisar de ajuda para se conectar a máquinas que pertençam a mesma faixa de IP que ele, um host não se comunica com nenhum outro host de uma outra rede, não sem ajuda. Aí entra o roteador, ele é o equipamento que interliga redes que não se comunicam, ele permite que redes diferentes (sejam diferentes por máscara ou pela estrutura do IP) possam enviar dados umas para as outras. Ele é um equipamento que pertence às redes, ou seja, ele possui configurado nele IP de todas as redes que ele interliga.

E toda máquina precisa de um caminho para as redes que ela não sabe a faixa de IP, a rede desconhecida é geralmente a internet. O Default Gateway é a máquina que um host (cliente ou outro roteador) procura quando não sabe entregar um pacote de dados. Assim quando um host da sua rede interna tem um pacote para 8.8.8.8 por exemplo, e como ele não faz parte dessa rede ele entrega o pacote para seu Default Gateway e assim espera que esse roteador saiba o caminha para entregar o pacote.

Vejamos um exemplo simples de duas redes que precisa se falar através de um roteador e acessar à internet:

Neste caso temos duas redes ligadas a um roteador que será um servidor Linux, cada cliente independente do sistema operacional irá ter como Rotedor Padrão (Default Gateway) a máquina de IP final 254( 192.168.1.254 e 192.168.2.254 respectivamente) da sua rede. O roteador além de habilitar o serviço de roteamento irá ter um Default Gateway configurado para um endereço fornecido pelo ser provedor de internet. Nesse cenário simples todo mundo já se fala e o Roteador com o NAT habilitado permite comunicação com a internet.

De um forma simples os passos para esse roteador funcionar, usando como IP externo 200.1.2.3 seriam:
1 – Configurar o Gateway no arquivo de configuração das interfaces de rede
2 – Escrever no arquivo /etc/rc.local a regra de NAT que seria algo como: iptables -t nat -A POSTROUTING -s 192.168.0.0/16 ! -d 192.168.0.0/16 -j SNAT 200.1.2.3
3 – Habilitar o roteamento no arquivo /etc/sysctl.conf com a seguinte linha: net.ipv4.ip_forward = 1

Com isso ao iniciar o Roteador todo o serviço para a comunicação entre as redes e para internet estaria funcionando.

Veremos agora um cenário onde uma empresa possui várias redes, como andares diferentes ou prédios diferentes, mas quer que todas se comuniquem através de roteamento e também com a internet.

Como está o nosso cenário:
– O R1 (Roteador 1) está ligado à internet com o IP 200.1.2.3 e tem como Default Gateway o Roteador 200.1.2.1, o R1 que é membro da Rede 192.168.1.0/24 tem IP 192.168.1.254;
– O R2 é membro da rede 192.168.1.0/24 com o IP 192.168.1.253 e membro da rede 192.168.2.0/24 com o IP 192.168.2.254;
– O R3 é membro da rede 192.168.2.0/24 com o IP 192.168.2.253 e membro da rede 192.168.3.0/24 com o IP 192.168.3.254;

Observando a figura como faremos nosso roteamento? Aqui vão algumas dicas simples para facilitar isso:
– Primeiro: Comece sempre pela ponta mais próxima à internet, assim se ela conseguir acessar externamente o resto das redes poderá fazê-lo também;
– Segundo: Comece sempre o roteamento pelas redes que você não tem o controle sobre a variação de IP delas, ou seja as redes desconhecidas, comece pela rota padrão (Default Gateway);
– Terceiro: Lembre-se que não precisa de rotas para as redes que um host faça parte delas.

Agora faremos as rotas no R1:
– Rota para Internet: route add default gw 200.1.2.1
Não preciso de rota para a rede 192.168.1.0/24 pois ele é membro dessa rede;
– Rota para a rede 192.168.2.0/24: route add -net 192.168.2.0/24 gw 192.168.1.253 . Isto é adicionar uma rota para a rede 192.168.2.0/24 através do gateway 192.168.1.253( que é a única máquina que o R1 tem contato direto que pode de alguma forma se conectar a rede 192.168.2.0/24);
– Rota para a rede 192.168.3.0/24: route add -net 192.168.3.0/24 gw 192.168.1.253 . Isto é adicionar uma rota para a rede 192.168.3.0/24 através do gateway 192.168.1.253( que é a única máquina que o R1 tem contato direto que pode de alguma forma se conectar a rede 192.168.3.0/24);

Agora faremos as rotas no R2:
– Rota para Internet: route add default gw 192.168.1.254 . Isso porque a única máquina que o R2 conhece que tem alguma forma de se conectar com a internet é o R1;
Não preciso de rota para a rede 192.168.1.0/24 pois ele é membro dessa rede;
Não preciso de rota para a rede 192.168.2.0/24 pois ele é membro dessa rede;
– Rota para a rede 192.168.3.0/24: route add -net 192.168.3.0/24 gw 192.168.2.253 . Isto é adicionar uma rota para a rede 192.168.3.0/24 através do gateway 192.168.2.253( que é a única máquina que o R2 tem contato direto que pode de alguma forma se conectar a rede 192.168.3.0/24);

Agora faremos as rotas no R3:
– Rota para Internet: route add default gw 192.168.2.254 . Isso porque a única máquina que o R3 conhece que tem alguma forma de se conectar com a internet é o R2, e ao utilizar o R2 para chegar a internet ele já consegue se comunicar com a rede 192.168.1.0/24 pois ela está no mesmo caminho usado para a rede default.
Não preciso de rota para a rede 192.168.2.0/24 pois ele é membro dessa rede;
Não preciso de rota para a rede 192.168.3.0/24 pois ele é membro dessa rede;

Em cada roteador esses comandos, além de habilitar o roteamento como explicado anteriormente, devem ser colocados no arquivo /etc/rc.local (para simplificar as configurações). Assim ao iniciar o servidor todas as rotas serão carregadas. No R1 devemos também criar uma regra de NAT para que as redes internas acessem a internet como havíamos feito antes.

Nos clientes de cada uma dessas redes basta que o Default Gateway seja o Roteador da Rede ou seja a máquina com IP final .254 de cada rede.

No caso de o Roteamento ser feito para clientes de OpenVPN vamos utilizar o modelo da figura abaixo que ilustra a maioria dos casos que tenho visto nas perguntas enviadas.

De acordo com a figura nós temos uma rede na Matriz que é 192.168.1.0/24 e uma na Filial que é 192.168.2.0/24, os IP de tunelamento usados pelo OpenVPN na matriz e na Filial são respectivamente 10.1.1.1 e 10.1.1.2.

O roteamento que deve ser feito nos servidores de VPN são:
– Matriz: route add -net 192.168.2.0/24 gw 10.1.1.2 (o Gateway para chegar em uma rede através da VPN é sempre a ponta remota do túnel)
– Filial: route add -net 192.168.1.0/24 gw 10.1.1.1

Basta habilitar o roteamento, por ser um gateway de internet creio que o roteamento já está habilitado.

Então para facilitar nossa vida lembremos que:
– Para chegar a algum IP que esteja na mesma faixa de rede que um host, ele não procurar ajuda de nenhuma outra máquina, ele tenta sozinho chegar ao destino da comunicação, assim sendo não usa de roteador nenhum para isso;
– Quando criar suas redes procure sempre colocar faixas de IP diferentes, afinal de contas todo o ip 10.0.0.0/8, 172.16.0.0/12 e 192.168.0.0/16 foram excluídos de serem IP válidos para serem usados nas redes internas e você só saber usar 192.168.1.0/24 em tudo?
– Se for preciso rotear entre Matriz e Filial com Redes iguais (192.168.1.0/24) faça o seguinte:
Rede Matriz adicionar a seguinte rota: route add -net 192.168.10.0/24 gw 10.1.1.2 (fazendo tudo que vai para a rede 192.168.10.0/24 ir pelo túnel de VPN)
Rede Matriz adicionar a seguinte Regra: iptables -t nat -A PREROUTING -d 192.168.20.0/24 -j NETMAP –to 192.168.1.0/24

Rede Filial adicionar a seguinte rota: route add -net 192.168.20.0/24 gw 10.1.1.1 (fazendo tudo que vai para a rede 192.168.20.0/24 ir pelo túnel de VPN)
Rede Filial adicionar a seguinte Regra: iptables -t nat -A PREROUTING -d 192.168.10.0/24 -j NETMAP –to 192.168.1.0/24
OBS: São dois sinais de menos (-) antes da palavra to.

Assim quando a Matriz precisar falar com 192.168.10.0/24 irá enviar para o túnel de VPN e quando o pacote chegar na Filial será remapeado para IP 192.168.1.0/24, e quando a Filial precisar falar com a 192.168.20.0/24 irá enviar para o túnel de VPN e quando o pacote chegar na Matriz será remapeado para 192.168.1.0/24. Não é uma solução simples, afinal estamos enganando nossas redes, mas é necessária para aqueles que não planejaram suas redes antes de implementá-las ;-).

Espero que este artigo seja útil a todos e que venha melhorar o entendimento de rotas e fazer suas VPN funcionar corretamente.

Não esqueça de assinar nosso portal e votar no TopBlog para que possamos continuar nossa meta em divulgar conhecimentos e melhorar a qualidade do profissional de TI.

Anúncios

18 Respostas to “Roteamento estático no Linux”

  1. Bhã meu amigo!! me acendeu a luz … tinha algumas duvidas sobre o roteamento … Valeu !!

    • Douglas,

      Que bom que ajudei, se tiver algum assunto que tenha dúvida pode sugerir por email ou comentário que sempre que possível a gente atende. Eu escrevi esse artigo pois percebi muitas dúvidas sobre isso nos comentários do artigo sobre OpenVPN(que devo fazer outro em breve).

      Abraço.

  2. Bruno Cruz - Belém Pará said

    Muito interessante o assunto. infelizmente não domino Linux, mas os conceitos abordados por serem genéricos, independe de sistema operacional, ficou de fácil compreensão.

    • Bruno,

      Obrigado por ser um amigo assíduo do portal, a intenção foi realmente mostrar no Linux mas falando de forma que fosse entendido como o roteamento funciona, independente de sistema.

      Sempre que pudermos estaremos trazendo este tipo de artigo para que o funcionamento das coisas fique cada vez mais claro, sem rodeios ou exageros para supervalorizar o conhecimento, apenas falando claramente sobre assuntos técnicos e protocolos.

      Abraço.

  3. Jorge said

    Vagner muito bom cara, estava precisando disso.
    Tenho uma dúvida, meu servidor de vpn não é o gateway da rede, pois meu gateway é meu proprio roteador, dai como posso fazer esse roteamento sendo?
    Atualmente eu consigo conectar na vpn e pingar apenas o servidor de vpn, outros ips da rede não.

    vvvlwwwwwwwwwwww

    • Jorge,

      Se a VPN conecta você faz o roteamento no próprio servidor de VPN, não precisa de mais nada. Apenas indique no router (se ele for o gateway da sua rede e não o servidor de VPN) que a rota para a rede desejada irá pelo IP interno do servidor de VPN.

      Abraço.

      • Jorge said

        Então eu tenho que adicionar uma rota estatica direto no meu roteador, por exemplo: Destination Subnet Mask Gateway Interface
        Dai digo qual o destino a mascara e quem será meu gateway, é isso mesmo? Entao posso remover da configuracao dos meus clientes a linha: route add 192.168.0.0 mask 255.255.255.0 192.168.255.2, pois se eu tirar essa linha não consigo pingar nada, nem o proprio servidor de vpn.

        vlwwwwwwwwwww

      • Jorge,

        Se você roteou em seus clientes não precisa mexer no roteador, a necessidade de mexer no roteador é não ter que fazer várias rotas nos clientes. Assim todos apontam para o gateway e ele aponta para o servidor de VPN para rotear para a rede da filial.

        Abraço.

      • Jorge said

        Ah entendi Vagner.
        Valeu por toda ajuda, vcs do cooperati sao demais. E kd os cursos em DVD pra gente comprar.

        Abracosss

  4. Marcos said

    Muito bom vai me ajudar aqui no trabalho.

  5. Bacana!!!

    Eu queria saber como fazer um roteamento entre redes de seguimentos diferentes no Windows Server.

    Por exemplo, Eu sei que para ter uma rede com n subredes eu devo utilizar DHCP com superscopo. Assim, consigo utilizar endereços subsequentes ao 192.168.0.0. Por exemplo: 192.168.1.0, 192.168.2.0 e por aí vai. E isto utilizando máscara classe B (255.255.0.0).

    Mas, como faço o roteamento entre seguimentos diferentes? Eu precisaria de um roteador ou um switch de camada Layer 3. Mas, quando precisamos realizar laboratórios, como ei poderia resolver esta questão?

  6. mariorpn said

    Grande Vagner… Eu conheço o esquema daquela segunda imagem hein?!?! Tá faltando o quarto roteador que você tinha colocado em nosso Lab do curso. Hehehehe!!! Muito bom!

    Mario Ribeiro

  7. max said

    muito bom!!!
    será que vc poderia comentar algo sobre VLAN?
    no esquema de roteamento ( que me parece entre redes locais) vc usa 3 routes
    quais a principais diferenças entre esse esquema de rotas entre lans e a vlan?
    pros e contras?

    seus artigos são muito bons
    parabéns!!

    • Max,

      Em relação ao que eu fiz e VLAN a grande diferença é que a VLAN isola as redes em um mesmo switch, eu usei equipamentos diferentes como andares diferentes de um prédio. Em breve teremos artigos sobre esse assunto por aqui no CooperaTI.

      Abraço.

  8. Pajé said

    Muito bom tutorial!! Completo, didático, detalhado e ilustrado!! Parabéns!!

  9. Orvalho J Augusto said

    Muito bem! Fica demonstrado que Linux faz roteamento facilmente. So para dizer actualmente a malta LARTC (linux advanced routing and traffic control) recomenda que comecemos a substituir o comando route pelo comando ip. No caso seria ip route.

    O escrito nao esta desactualizado. Alias, quem usa o comando route de linux eh bem capaz de vira a usar sem muitas alteracoes em outro *nix.

    • Orvalho,

      O intuito do artigo é ser abrangente em termos de comando, assim o comando ip (do pacote iproute2) é recomendado mas muita gente não o conhece. A opção pelo route é que o foco do artigo não é o comando, mas sim a estrutura de roteamento. O comando ip, cuja estrutura se assemelha muito à comandos de sistemas de rotamento como o do IOS do Cisco, o torna a escolha para uso com mais complexidade. O comando route é mais simples, mas não obsoleto. Com certeza o texto é para ser abrangente em conceitos, inclusiva para outros sistemas operacionais não *nix.

      Obrigado.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

 
%d blogueiros gostam disto: