Roteamento estático no Linux

Animacao Router

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:

roteamento-um-router-duas-redes

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.

Roteamento entre redes

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.

VPN

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 procura 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ó sabe 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.