Infra - Linux

Implementando rotas estáticas no Linux

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.

por José Cleydson Ferreira da Silva



Conceitos de algoritmos Roteamento

Uma grande conquista que à informática da longo o tempo é o melhoramento no conhecimento de rotas. Se analisarmos o contexto histórico veremos que essa evolução contribuiu para o que chamamos de grande rede, à internet.

O rotamento tem por objetivo determinar caminhos a serem seguidos, em posse disso há uma necessidade de conhecimento da topologia da rede e como estão definidos os dispositivos que possam interliga-los, portanto é importante lembrar que o conceito roteamento é diferente de roteador que é um nome que se da um equipamento responsável por dar acesso a redes diferentes. Com a auxilio da teoria dos grafos os roteamentos são capazes de solucionar alguns problemas relacionados a conhecimento da topologia da rede, que por sua vez consiste em encontrar o melhor caminho a se percorrer.

As rotas usam um critério intuitivo de buscar a rota com menor numero de nós, embora nem sempre o menor caminho possui melhor desempenho ou velocidade ou de menor custo. Então surge um conceito de menor custo, esse é o valor numérico associado a um enlace que demarca velocidade de atraso, portanto, se os custos de todos os nós de uma rede tivessem o mesmo valor, prevaleceria a rotas com menor numero de nós. Para saber esse valor cada o custo é preciso criar uma tabela de roteamento, pois ela é fundamental no procedimento de escolhas de rotas. Essa tabela é fundamental pois na hora de receber um datagrama o nó verifica para quem é destinado consultando na tabela criada.

O conhecimento dessa tabela se da por meio de algorítimos de roteamento, cabe a eles definirem a entre vários caminhos o menor custo. Esses algorítimos ao logo do tempo foram sendo aprimorados para suprirem necessidades que foram surgindo, basicamente podemos citar dois tipos de algorítimo.

Algorítimos de roteamento

Link state (LS)

Determina o melhor caminho entre a fonte e o destino a partir do conhecimento completo da topologia da rede.

Distance Vector (DV)

Conhecimento parcial da topologia da rede, que consiste em conhecer somente os vizinhos da rede.

Naturalmente percebe-se que o algorítimo (DV) antecede o algorítimo (LS), que por sua vez, foi criado para solucionar problemas falhas de limitação do diâmetro da rede, consumo de banda feito pela inundação de pacotes e contagem para o infinito que era um dos problemas mais graves. Através da construção de uma matriz conectividade, todos os nós de uma rede é capaz de conhecer a topologia da rede como um todo e o custo associado a todos os enlaces, onde cada nó é responsável por conhecer o custo de enlace até seus vizinhos e divulga-los par a rede como um todo. Em posse dessas informações cada nó processa um algorítimo de menos caminho.

A identificação dos vizinhos é feita por meio de um envio de pacote “Hello” para acada enlace no momento em que um nó é iniciado, eme resposta os nós intermediários enviam uma resposta com o endereço da rede. Após descoberto os vizinhos é necessário estimar o custo do enlace, no qual um pacote “echo” é enviado para os mesmos nós que foram identificados, que respondem eventualmente. Neste processo é medido o tempo de ida e volta (Round Trip Time - RTT) e calculado tempo médio, sendo somado os tempos e divido por dois, isso é basicamente uma combinação de atraso e a capacidade de transmissão do enlace. Após esse processo a tabela contendo os vizinhos e o custo para cada nó são enviados para toda a rede por inundação ou mecanismos de difusão (brodcast) ou multidifusão (multcast).

Esses pacotes são numerados sequencialmente para a evitar a duplicidade, onde a cada nova divulgação, o nó receptor compara o numero de sequencia, se for superior o descarta o antigo. A cada inicialização de cada nó essa sequencia é zerada, o que causa problemas de transmissão, para solucionar-lo foi criado o tempo de vida de cada pacote. Um protocolo que utiliza o Link State é o OSPF (Open Shortest Path Firt), que atualmente tem sido preferencialmente utilizado em redes baseadas em TCP/IP, ele oferece como métricas de custo, bem como, distância, custo, banda e se preocupa com a segurança garantindo que os pacotes não sejam forjados ou adulterados. Outras preocupações do LS é o controle do crescimentos de nós na rede, por esse fato, classifica-se os roteamentos hierárquicos que são divididos em áreas de juridição ou região, um bom exemplo desse no Brasil é o tráfego internacional que entra e sai em São Paulo e Rio de Janeiro, e todos os nós intermediários detém esse conhecimento.

Definindo rotas estáticas no Linux com Route

Para implementar rotas no Linux existem diversos Softwares Livres e de Código Aberto, que possibilita a manipulação de tabelas de roteamento IP do kernel, seu principal oficio é 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, elas 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 podem ser iniciadas pelo comando route seguido de parâmetros que validam os conceitos de rotas que foram descritas no inicio deste documento. Abaixo segue uma tabela 1 contendo todos os parâmetros.

Tabela 1: Parâmetros do route

Parâmetro

Especificação

-v

Lista detalhada.

--Version

Mostra a versão e outras informações.

-n

Mostra as rotas definidas, sem resolver nomes.

-e

Mostra a tabela de roteamento no formato Netstat.

-ee

Mostra uma imensa linha contendo todos os parâmetros da tabela de roteamento.

-net

Refere-se ao endereço de uma rede, encontrado no arquivo /etc/networks.

-host

Refere-se ao endereço de uma maquina.

del

Remove uma rotas.

add

Adiciona uma rota.

netmask Nm

Opção para adicionar mascara de rede da rota da rota a ser adicionada.

gw

Adiciona o gateway, onde qualquer pacote destino serão roteadas através do gateway especifico.

metric M

Configura o campo métrica da tabela de roteamento, porém não é usada por kernels mais recentes, somente daemons de roteamento a utilizam.

mss M

Especifica o Tamanho Máximo do Segmento TCP em Bytes (MSS) para conexões TCP através desta rota.

window W

Especifica 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 I

Tempo de ida e volta de conexões TCP desta rota.

reject

Bloqueia rota antes do uso da rota default

mod, dyn, reinstate

Instala rotas modificadas ou dinâmica, são usadas por daemons de roteamento.

dev

Refere-se ao dispositivo – eth0, eth1.

dev If

Força o uso do dispositivo indicado, pois o kernel pode determinar o dispositivo por conta própria.


A utilização do comando route pode ser usada de diversas formas, pode-se encontrar diversos documentos pela internet com exemplos de configuração diferente, portanto, abordaremos uma forma não convencionada 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 mascara 255.0.0.0 e associa-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 trafego 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 a primeira dispositivo.

route add default gw 192.168.0.1 dev eth0

Pode-se configurar o arquivo /etc/hosts para usar nomes de maquinas, para que não seja necessário colocar numero 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 maquina ou o dispositivo de rede.

Exemplo 1: Arquivo 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 maquina da rede através de uma interface e assumir que a maquina é a própria interface. Com isso podemos permitir que uma rede possa ser alcançada através dessa maquina ou definir rota para toda uma classe de rede. Nos comandos seguintes podemos validar essa afirmação.

Adicionar rota para maquina:

#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á 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 está 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 observado com a opção -n, onde será exibido 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á instalado por um daemon ou sendo rejeitada e entre outros. As possíveis situações referentes ao status das rotas podem ser apresentadas na tabela 2 abaixo.

Tabela 2: Opções

Opção

Especificação

U

Está habilitada

H

Refere-se que o alvo é uma maquina

G

Usa o roteador

R

Está apontando para um roteamento dinâmico

D

Rota instalada dinamicamente por redirecionamento

M

Modificada por redirecionamento

!

Rejeitada

Exemplo:

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.

Sobre o autor


José Cleydson Ferreira da Silva, graduando em Sistemas de Informação - Faculdade de Viçosa-MG. Usuário do Linux por filosofia, acredita que o Software Livre e de Código Aberto podem mudar a forma e o modelo de mercado atual.

Contatos

Email, gtalk: cleysinhonv@gmail.com

Twitter: @cleysinhonv

Web site: www.cleysinho.blogspot.com

Web site: www.gnu-lia.org

Outros artigos: http://www.vivaolinux.com.br/artigos/userview.php?login=cleysinhonv

Originalmente postado no www.vivaolinux.com.br

José Cleydson Ferreira da Silva

José Cleydson Ferreira da Silva - Técnico em Tecnologia da Informação formado pela Escola Técnica de Viçosa-MG (ETEV), Bacharelando em Sistemas de Informação - FDV Viçosa-MG, usuário do Linux por filosofia, acredito que os padrões abertos podem mudar os rumos do mercado de TI.