A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Linux

Dicionário do iproute2

Sab

14

Abr

2007


08:35

(19 votos, média 4.37 de 5) 


ip route

ABREVIAÇÕES: route, ro, r

Objeto

Entradas de rotas (route) nas tabelas de roteamento do kernel contêm informações sobre caminhos (path) para outros nós da rede. Cada registro de rota possui uma chave constituída por um prefixo (isto é, um par contendo um endereço de rede a o comprimento da sua máscara) e, opcionalmente, o valor TOS (Type of Service). Um pacote IP combina com uma rota se os bits mais altos do seu endereço de destino forem iguais ao prefixo da rota, pelo menos até o comprimento do prefixo, e se o TOS da rota for zero ou igual ao TOS do pacote.

Se várias rotas combinam com o pacote, as seguintes regras são usadas para selecionar a melhor:

  1. O prefixo mais longo é escolhido. Todos os outros são descartados.
  2. Se o TOS de alguma rota com o prefixo mais longo for igual ao TOS do pacote, as rotas com TOS diferentes são descartadas.
    Se não for encontrado um TOS que combine e existirem rotas com TOS=0, o restante das rotas são eliminadas.
    Caso contrário, a procura da rota falha.
  3. Se diversas rotas ficarem disponíveis depois das etapas anteriores, então as rotas com os melhores valores de preferência são selecionadas.
  4. Se ainda existirem diversas rotas, então a primeira delas é selecionada.
    info Observe a ambiguidade da última etapa. Historicamente e infelizmente o Linux permite esta situação bizarra. O sentido da palavra "primeira" depende da ordem em que as rotas foram adicionadas e é praticamente impossível manter uma porção de tais rotas nesta ordem.
    Para simplificar vamos nos limitar ao caso onde uma situação deste tipo seja impossível e onde as rotas são identificadas pelo trio (prefixo, tos, preferência). No momento não é possível criar rotas únicas com comandos ip descritos nesta seção.
    Uma honrosa exceção a esta regra é a rota default em hosts que não fazem encaminhamento (non-forwarding). É "oficialmente" permitido ter diversas rotas de escape (fallback) quando houver vários roteadores em redes diretamente conectadas. Neste caso, o Linux 2.2 faz uma "detecção de gateway morto" (dead gateway detection) controlada por uma detecção de vizinhos que não podem ser alcançados e por avisos de protocolos de transporte para selecionar um roteador operante. Deste modo, a ordem dos roteadores não é essencial. Neste caso, no entanto, brincar com rotas default manualmente não é recomendável - use o protocolo Router Discovery.

Os passos descritos, com certeza, não são executados na sequência indicada. O que acontece é que a tabela de roteamento do kernel é mantida em alguma estrutura de dados para obter o resultado final a um custo mínimo. Entretanto, se não dependermos de um determinado algoritmo de roteamento implementado no kernel, podemos resumir as declarações acima em: uma rota é identificada pelo trio prefixo-tos-preferência e esta chave nos permite localizar a rota na tabela de roteamento.

Atributos

Cada uma das chaves de rota se refere a um registro de informação de rota que contém os dados necessários para entregar pacotes IP (por exemplo, dispositivo de saída e roteador do próximo salto) e alguns atributos opcionais (por exemplo, o caminho MTU ou o endereço de origem preferido para se comunicar com este destino). Estes atributos são descritos a seguir.

Tipos de rota

É importante saber que o conjunto de atributos requeridos e opcionais dependem do tipo da rota. O tipo mais importante de é a unicast. Ela descreve caminhos reais para outros hosts. Como regra, tabelas de roteamento comuns contêm apenas este tipo de rota. Existem, no entanto, outros tipos de rota com uma semântica diferente. A lista completa dos tipos aceitos pelo Linux 2.2 é:

  • unicast -- a entrada desta rota descreve caminhos reais para os destinos cobertos pelo prefixo da rota.
  • unreachable -- estes destinos não podem ser alcançados. Os pacotes são descartados e a mensagem ICMP de host unreachable (host não alcançável) é gerada. Os remetentes locais recebem o erro EHOSTUNREACH.
  • blackhole -- estes destinos não podem ser alcançados. Os pacotes são descartados em silêncio. Os remetentes locais recebem o erro EINVAL.
  • prohibit -- estes destinos não podem ser alcançados. Os pacotes são descartados e a mensagem ICMP communication administratively prohibited (comunicação administrativamente proibida) é gerada. Os remetentes locais recebem o erro EACCES.
  • local -- os destinos são atribuídos a este host. Os pacotes são devolvido e entregues localmente.
  • broadcast -- os destinos são endereços de broadcast. Os pacotes são enviados como broadcasts de link.
  • throw -- uma rota de controle especial usada conjuntamente com regras da política de regras. Se uma destas rotas for selecionada, a verificação desta tabela é interrompida dando a entender que nenhuma rota foi encontrada. A falta de uma política de roteament equivale à ausência da rota na tabela de roteamento. Os pacotes são descartados e uma mensagem ICMP net unreachable (rede não alcançável) é gerada. Os remetentes locais recebem o erro ENETUNREACH.
  • nat -- uma rota NAT especial. Os destinos cobertos pelo prefixo não são considerados endereços fictícios (dummy) ou externos que exigem uma tradução para endereços reais (ou internos) antes do re-envio. Os endereços que devem ser traduzidos são selecionados com o atributo via.
  • anycast -- (não implementado) os destinos são endereços anycast designados para este host. A grosso modo são equivalentes aos locais, com uma diferença: estes endereços são inválidos quando usados como endereços de origem de qualquer pacote.
  • multicast -- um tipo especial usado para roteamento multicast. Não está presente em tabelas de roteamento normais.

Tabelas de roteamento

O Linux 2.2 pode colocar rotas em diversas tabelas de roteamento identificadas por um número que vai de 1 a 255 ou por um nome que conste no arquivo /etc/iproute2/rt_tables. Como default, todas as rotas normais são colocadas na tabela principal (ID 254) e o kernel usa esta tabela apenas quando estiver calculando rotas.

No momento existe uma outra tabela, invisível mas mais importante. É a tabela local (ID 255). Esta tabela contém rotas para endereços locais e de broadcast. O kernel mantém esta tabela automaticamente e o administrador geralmente não precisa modificá-la ou tomar conhecimento de que ela existe.

As múltiplas tabelas de roteamento são acionadas quando a política de roteamento é utilizada. Neste caso, o identificador de tabela torna-se mais um parâmetro que precisa ser adicionado ao trio prefixo-tos-preferência para que identifique unicamente a rota.

Informações adicionais