em que ordem a tabela de rotas é analisada?

19

No meu pc eu tenho a seguinte tabela de roteamento:

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 wlan0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan0

Não entendo como é analisado, quero dizer de cima para baixo ou de baixo para cima?

Se for analisado de cima para baixo, tudo será sempre enviado ao roteador em minha casa, mesmo que o destino IP seja 192.168.1.15; mas o que eu sabia (errado?) era que, se um PC estiver dentro da minha mesma rede local, depois que eu recuperar o destino MAC através de uma mensagem de difusão, meu PC poderá enviar diretamente a mensagem ao destino.

zer0uno
fonte

Respostas:

19

A tabela de roteamento é usada na ordem do mais específico ao menos específico.

No entanto, no Linux, é um pouco mais complicado do que você imagina. Em primeiro lugar, há mais de uma tabela de roteamento e quando a tabela de roteamento é usada depende de várias regras.

Para obter uma imagem completa:

$ ip rule show
0:  from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default

$ ip route show table local
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1 
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1 
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1 
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1 
broadcast 192.168.0.0 dev eth0  proto kernel  scope link  src 192.168.1.27 
local 192.168.1.27 dev eth0  proto kernel  scope host  src 192.168.1.27 
broadcast 192.168.1.255 dev eth0  proto kernel  scope link  src 192.168.1.27 

$ ip route show table main
default via 192.168.1.254 dev eth0 
192.168.0.0/23 dev eth0  proto kernel  scope link  src 192.168.1.27 

$ ip route show table default

$

A localtabela é a tabela de roteamento especial que contém rotas de controle de alta prioridade para endereços locais e de broadcast.

A maintabela é a tabela de roteamento normal que contém todas as rotas que não são de política. Esta é também a tabela que você obtém para ver se você simplesmente executa ip route show(ou ip roabreviadamente). Eu recomendo não usar mais o routecomando antigo , pois ele mostra apenas a maintabela e seu formato de saída é um pouco arcaico.

A tabela defaultestá vazia e reservada para pós-processamento se as regras padrão anteriores não selecionaram o pacote.

Você pode adicionar suas próprias tabelas e adicionar regras para usá-las em casos específicos. Um exemplo é se você tiver duas conexões com a Internet, mas um host ou sub-rede sempre deve ser roteado por uma conexão à Internet específica.

O livro Policy Routing with Linux explica tudo isso em detalhes requintados.

Wurtel
fonte
existe uma maneira de mudar essa prioridade?
Mheni 30/05
4

A tabela de roteamento geralmente é aplicada na ordem de "mais específico" a "menos específico". Um destino 0.0.0.0com uma máscara de rede 0.0.0.0, ou seja, sua rota padrão , é o menos específico possível e, portanto, será sempre aplicado por último.

Se você tivesse o endereço MAC para outro PC na rede local, mas estivesse em uma sub-rede diferente, você poderia adicionar uma rota de host específica para esse PC e provavelmente obteria comunicação.

roaima
fonte
s / geralmente / sempre /. Isso é bastante fundamental para o funcionamento das tabelas de roteamento.
Celada
11
@Celada Omiti a menção de métricas para rotas "mesmas específicas". E depois há o roteamento de políticas. Por um momento, pelo menos, eu permaneço normalmente .
roaima