Implementando rotas estáticas no Linux com route

Após uma série de estudos a respeito de roteamento estático e dinâmico, resolvi documentá-los e submetê-los a publicação com intuito de colaborativo. Neste documento abordo um rápido apanhado de conceitos de algoritmos de roteamento e o uso do software route para implementar rotas. Sendo assim esse é o primeiro artigo de uma série de publicações.

[ Hits: 214.899 ]

Por: José Cleydson Ferreira da Silva em 05/02/2010


Definindo rotas estáticas no Linux com route



Para implementar rotas no Linux existem diversos softwares livres e de código aberto que possibilitam a manipulação de tabelas de roteamento IP do kernel. Seu principal ofício é configurar rotas estáticas para os hosts que compõem determinada faixa de rede, por intermédio de uma interface propriamente configurada. O software route é padrão nos sistemas Linux, foi originalmente desenvolvido por Fred N. Van Kempen e posteriormente modificado por Johannes Stille e Linus Torvalds. O suporte a irtt (compartilhamento com netstat) foi adicionado por Bernd Eckenfels.

Outras funções importantes que foram adicionadas são mss e windows, implementadas por Alan Cox. O brasileiro Arnaldo Carvalho de Melo contribuiu na tradução do manual para a língua portuguesa.

A inserção de rotas pode ser iniciada pelo comando "route" seguido de parâmetros que validam os conceitos de rotas que foram descritas no início deste documento. Abaixo segue a tabela 1 contendo todos os parâmetros.

Tabela 1: Parâmetros do route

ParâmetroEspecificação
-vLista detalhada
--versionMostra a versão e outras informações.
-nMostra as rotas definidas, sem resolver nomes
-eMostra a tabela de roteamento no formato Netstat
-eeMostra uma imensa linha contendo todos os parâmetros da tabela de roteamento
-netRefere-se ao endereço de uma rede, encontrado no arquivo /etc/networks
-hostRefere-se ao endereço de uma máquina
delRemove uma rota
addAdiciona uma rota
netmaskOpção para adicionar máscara de rede da rota a ser adicionada
gwAdiciona o gateway, onde qualquer pacote destino será roteado através do gateway específico
metricConfigura o campo métrico da tabela de roteamento, porém não é usado por kernels mais recentes, somente daemons de roteamento a utilizam
mssEspecifica o tamanho máximo do segmento TCP em bytes (MSS) para conexões TCP através desta rota
windowEspecifica o tamanho da janela TCP para conexões TCP através desta rota. Tipicamente somente usado para redes AX.25 e em drivers incapazes de de tratar frames back to back
irtt Tempo de ida e volta de conexões TCP desta rota
rejectBloqueia rota antes do uso da rota default
mod, dyn, reinstateInstala rotas modificadas ou dinâmicas, são usadas por daemons de roteamento
devRefere-se ao dispositivo - eth0, eth1
dev IfForça o uso do dispositivo indicado, pois o kernel pode determinar o dispositivo por conta própria
Linux: Implementando rotas estáticas no Linux com route
O comando route pode ser usado de diversas formas, pode-se encontrar diversos documentos pela internet com exemplos de configuração diferentes, portanto abordaremos uma forma não convencional para fazer a inserção de rotas no sistema, esse sendo um padrão sugerido pelos desenvolvedores desse software. É importante ressaltar que para se usar o route é necessário que, ao menos uma interface esteja configurada. Podemos adicionar entradas na interface loopback usando a máscara 255.0.0.0 e associá-la ao dispositivo lo (local).

# route add -net 127.0.0.0 netmask 255.0.0.0 dev lo

Para adicionar uma rota padrão que permita a saída do tráfego da rede é necessário indicar na sintaxe do comando default e indicar em qual interface os pacotes serão roteados. Caso não defina a interface no comando, o kernel irá definir uma interface para adicionar o gateway, naturalmente poderá vir a ser o primeiro dispositivo.

# route add default gw 192.168.0.1 dev eth0

Pode-se configurar o arquivo /etc/hosts para usar nomes de máquinas, para que não seja necessário colocar número de IP sempre que for adicionar uma rota ou rejeitar uma rota para determinada faixa de rede. Por esse motivo é importante que o arquivo fique legível, usando-se comentários indicando se é nome atribuído a máquina ou o dispositivo de rede.

Exemplo 1: Arquivo /etc/hosts

## Local
127.0.0.1                localhost
## device eth0
192.168.0.1             androide-gw
## device eth1
192.168.1.1             curupira-gw
## maquina
192.168.2.1             javali-gw
## maquina
192.168.3.1             torresmo-gw

É possível adicionar uma rota para uma máquina da rede através de uma interface e assumir que a máquina é a própria interface. Com isso podemos permitir que uma rede possa ser alcançada através dessa máquina ou definir rota para toda uma classe de rede. Nos comandos seguintes podemos validar essa afirmação.

Adicionar rota para máquina:

# route add curupira-gw eth0

Adicionar rota para uma rede:

# route add -net 192.168.2.0 netmask 255.255.255.0 gw curupira-gw

Adicionar rota para toda uma classe de rede (multcast):

# route add -net 192.168.0.0 netmask 255.255.0.0 dev eth0

Bloquear rota para rede privada:

# route add 10.0.0.0 netmask 255.0.0.0 reject

Outros comandos podem ser aplicados para a verificação do estado da tabela de roteamento, bem como informações de versões de software e exibição da tabela de roteamento. O comando route seguido da opção -V retornará como saída padrão a versão do software e módulos suportados pelo programa, já a opção -v mostra na saída padrão a tabela de roteamento de forma simplificada, porém se esta opção vier seguida de outros comandos terá a responsabilidade de jogar na saída padrão o processo sendo executado de forma detalhada.

O status da tabela de roteamento pode ser observada com a opção -n, onde serão exibidas 8 colunas (destino, roteador, MascaraGen, opções, métricas, Ref, Uso, Iface), a coluna opção relata o status de cada rota, se está habilitada, se está instalada por um daemon ou sendo rejeitada, entre outros. As possíveis situações referentes ao status das rotas podem ser apresentadas na tabela 2 abaixo.

Tabela 2: Opções

OpçãoEspecificação
UEstá habilitada
HRefere-se que o alvo é uma máquina
GUsa o roteador
REstá apontando para um roteamento dinâmico
DRota instalada dinamicamente por redirecionamento
MModificada por redirecionamento
!Rejeitada


Exemplo:

# route -n
Tabela de Roteamento IP do Kernel 
Destino       Roteador      MáscaraGen.    Opções Métrica Ref  Uso  Iface 
192.168.1.0   0.0.0.0       255.255.255.0  U      1       0    0    eth0 
192.168.2.0   0.0.0.0       255.255.0.0    U      1000    0    0    eth0 
0.0.0.0       192.168.1.1   0.0.0.0        UG     0       0    0    eth0

Outras opções podem ser aplicadas como o -e (--extend), para mostrar informações adicionais como por exemplo colunas com informações sobre tempo de ida e volta de pacotes e tamanho em máximo de segmento TCP/IP em bytes. Outra opção é usar o -F (--fib), que são informações de repasse. A opção route -C (--cache) joga na saída padrão o cache da tabela de roteamento que esteja registrada pelo kernel.

Basicamente podemos implementar rotas com esse software, embora existam formas, métricas mais eficientes, existem softwares que podem avançar mais nos conceitos de rotas, portanto no tópico seguinte há um aprofundamento na criação de rotas avançadas, que por sua vez pode restringir e controlar fluxo de tráfego e entre outros.

Página anterior    

Páginas do artigo
   1. Conceitos de algoritmos de roteamento
   2. Definindo rotas estáticas no Linux com route
Outros artigos deste autor

O comando LS de A a Z

Bing: Medindo velocidade da conexão no Linux

Conheça tudo sobre os hardwares que compõem o seu computador com um simples comando

Cairo-Dock - Seu desktop Linux com cara de MAC

Implementando servidor web Java com Tomcat no Linux

Leitura recomendada

PacmanXG, excelente frontend para o Pacman

Como instalar o CONKY-colors no Ubuntu 12.10

VirtualBox + PhpVirtualBox + Ubuntu 14.04 Server

Planejando e migrando softwares do Windows para o Linux

Programação (II) - Modularização

  
Comentários
[1] Comentário enviado por Eliab venancio em 05/02/2010 - 10:20h

Muito bom cara,interessante o artigo .

[2] Comentário enviado por shampooms em 07/02/2010 - 10:52h

Excelente artigo José Cleydson, de maneira bem direta voce enfatizou várias situações muito úteis, principalmente pra quem esta brigando pelo ganho de desempenho dos famigerados "milissegundos" da nossa rede de internet!

[]s

[3] Comentário enviado por cleysinhonv em 08/02/2010 - 14:31h

Olá Eliabe, shampooms

Esse software sem dúvida é poderoso, onde trabalho temos uma tabela de rotas enorme que chega a ter mais 150 rotas e nos usamos o route, em breve pretendo apresentar mais dois softwares.

[4] Comentário enviado por dailson em 08/02/2010 - 15:23h

Show de Bola!
Um dos mais completos artigos de roteamento que já li.
Parabéns!

[5] Comentário enviado por guilhermealano em 06/06/2013 - 08:45h

Ola, cara se poder esclarecer uma duvida, utilizo o CentOS, mas quando reinicio o SO ou então a rede as rotas voltam diferentes, ai tenho que dar add ou del nas rotas certas. Ou atraves de um script rodando no crontab, mas não sei se seria a forma mais correta.

Existem algum metodo para deixar as rotas staticas?

Obrigado.

[6] Comentário enviado por cleysinhonv em 18/07/2013 - 14:03h

Sim é possível. O que você deve fazer é deixar um script pronto incializando no init.d ou em alguma runlevel do seu sisetma. Assim todas as intruções de rotas podem ser confgiuradas sempre na inicialização.

[7] Comentário enviado por piltz em 23/12/2013 - 12:56h

Eu tenha uma duvida.

Se eu tenho mais de uma rede separadas por faixas, então eu devo usar um roteamento por rede ou por multicast?

Ex: Eu tenha a rede de fibra óptica interligando duas ou mais redes:
Rede 01: 153.69.1.0/24 com gw 153.69.1.10 (default).
Rede 02: 153.69.2.0/24 com gw 153.69.2.10

Eu teria que fazer assim;

route add -net 153.69.1.0 netmask 255.255.255.0 gw 153.69.1.10
route add -net 153.69.2.0 netmask 255.255.255.0 gw 153.69.1.10

ou somente isso resolveria?
route add -net 153.69.0.0 netmask 255.255.0.0 dev eth0 #multicast

[8] Comentário enviado por amandamata_ em 06/01/2015 - 08:14h

Excelente artigo!

[9] Comentário enviado por fabiormolina em 26/11/2018 - 09:45h

Excelente artigo. Muito bem didático, salvou o meu dia.
Muito obrigado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts