O que é uma rota IP do Linux sem interface de rede de saída (resposta RTLINK sem 'RTA_OIF') e como criar uma para teste?

1

Ao usar RTLINK para consultar a rota IP disponível a partir de um kernel Linux (namespace de rede), notei que em um sistema de teste RTLINK retorna uma rota sem o atributo RTA_OIF , ou seja, sem especificar uma interface de rede de saída .

Infelizmente, não tenho idéia de como reproduzir essa situação (para testes) usando o comando ip route add e até agora nenhuma pessoa ao meu alcance conseguiu explicar "o que" originalmente criou essa rota sem nenhuma indicação de uma rede de saída interface. De uma olhada nas fontes do kernel do Linux, notei que o atributo da interface de rede de saída, na verdade, é opcional. No entanto, minhas tentativas em ip route add sempre acabam com uma interface de rede de saída adicionada automaticamente pelo kernel ou não alcançável:

ip route add 1.1.1.1/32 via 1.1.1.2RTNETLINK answers: Network is unreachable .

Próxima tentativa (com falha):

ip addr add 1.1.1.2/32 dev ens33
ip route add 1.1.1.1/32 via 1.1.1.2
ip route show

... então dá 1.1.1.1 via 1.1.1.2 dev ens33 , onde o kernel inseriu automaticamente uma interface de rede de saída adequada (e, portanto, RTA_OIF está presente, mesmo que eu não tenha especificado no começo).

A pesquisa por coisas como "rota ip do linux sem interface de saída" ou similar não me dá nenhum resultado útil - a menos que eu esteja negligenciando algo importante aqui.

Então, como posso criar um caso (teste) em que tenho uma rota IP sem uma interface de rede de saída? O que eu estou negligenciando aqui?

    
por TheDiveO 27.11.2018 / 15:17

1 resposta

0

Acontece que as rotas sem interfaces de rede de saída (não: regras, que estão relacionadas ao roteamento) são usadas pelo menos para esses três casos de uso:

  1. as rotas blackhole , nas quais a pilha IP silenciosamente elimina todo o tráfego que corresponde à rota.
  2. Rotas inacessíveis , em que a pilha IP descarta todo o tráfego destinado a essas rotas e, além disso, aciona uma resposta inacessível de ICMP (v6).
  3. proibir rotas, onde novamente a pilha IP descarta todo o tráfego, também envia uma resposta ICMP (v6), mas isso é uma vez "proibido" em vez de "inacessível".

Estas rotas podem ser facilmente criadas da seguinte forma:

# ip route add blackhole 1.2.3.4
# ip route add unreachable 1.2.3.5
# ip route add prohibit 1.2.3.6

Um ip route show confirma que essas rotas não têm interfaces de rede de saída:

$ ip route show
...
blackhole 1.2.3.4
unreachable 1.2.3.5
prohibit 1.2.3.6
    
por 28.11.2018 / 13:01