Por que não existe uma rota para localhost no Ubuntu?

12
$ sudo docker run --rm ubuntu:14.04 route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.17.42.1     0.0.0.0         UG    0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0

Isso não significa que 127.0.0.0/8 é roteado para o gateway 172.17.42.1 e não o dispositivo de loopback?

Balazs Rau
fonte
Eu quis dizer: Por que não existe uma rota para loopback no Ubuntu?
precisa saber é o seguinte
Suponho que rotas explícitas para a rede de loopback sejam do passado. Vendo sua pergunta, dou uma olhada em alguns de nossos servidores e não há rotas na tabela de roteamento para loopback. Isso também é válido para o Solaris 10, não para o Solaris 8 (sim, ainda temos algumas caixas com o Solaris 8).
alphamikevictor

Respostas:

25

O routecomando foi descontinuado e não deve mais ser usado.

A nova maneira é usar o conjunto de comandos iproute, todos invocados e ipseguidos por um objeto. Por exemplo:

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

Agora, eu ouvi você dizer, esta é basicamente a mesma informação! Sim, mas essa não é a história toda. Antes das tabelas de roteamento (sim, plural), vem a tabela de regras:

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

A tabela de roteamento que estávamos examinando antes é a maintabela de roteamento. Sua pergunta diz respeito à localtabela de roteamento, que contém todas as rotas relacionadas às conexões locais. Esta tabela pode ser mostrada da seguinte maneira:

$ ip ro sh 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

(Você pode abreviar ipopções / parâmetros, desde que eles ainda sejam únicos, portanto ip ro shé o mesmo que ip route show).

Aqui você pode ver as rotas de loopback.

Você pode fazer todo tipo de coisa maravilhosa com esse roteamento baseado em políticas ; recomendo que você leia o Roteamento de Políticas com Linux, de Matthew G. Marsh, para obter todas as informações que você precisará.

Wurtel
fonte
1
Apenas uma preocupação com sua redação: a pergunta dele era sobre roteamento para endereços locais (127.0.0.0/8). table localé a resposta, mas não a pergunta. É a resposta porque o tráfego para qualquer endereço 127. * é convertido em um endereço de origem 127.0.0.1, e acho que também é forçado a usar dev lo.
Peter Cordes
1
Portanto, a resposta real para a pergunta é "porque o loopback é especial e não precisa de um", é a resposta real. Nenhuma dessas entradas da tabela de roteamento diz algo sobre como rotear para 127.1.1.1, por exemplo, mas ainda funciona (como você pode ver nos horários de ping). Presumivelmente, o código de rede especiais casos de endereços locais por motivos de desempenho, uma vez que ip addrnão mostra loter mais do que apenas 127.0.0.1como seu próprio endereço, mas ele vai realmente receber o tráfego para qualquer ip em 127 ... / 8
Peter Cordes
4
@PeterCordes Na verdade, a linha local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1cobre a rota para 127.1.1.1; significa que qualquer coisa que comece com 127. é local.
wurtel
Ah, ok, eu não tinha entendido tudo o que uma localentrada na localtabela implicava. Obrigado.
Peter Cordes
2

O routecomando era antigo desde 10 anos atrás e você deveria ir com os iproute2pacotes.

Quando você estiver usando ip route showa maintabela é exibida. Para exibir a localtabela, use ip route show table local.

Espero que tenha ajudado.

Iulian
fonte