Não é possível excluir uma rota com o gateway 0.0.0.0

8

Estou tentando configurar minhas rotas de uma maneira que permita a conexão com a caixa do Vagrant na demonstração Solum .

Minha tabela de roteamento contém, sem limitação, as seguintes rotas:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     9      0        0 wlan0
192.168.76.0    192.168.76.2    255.255.255.0   UG    0      0        0 vboxnet0
192.168.76.0    0.0.0.0         255.255.255.0   U     0      0        0 vboxnet0

Suspeito que a terceira rota (gerada automaticamente na inicialização da caixa do Vagrant) esteja interferindo na segunda rota (criada manualmente), por isso estou tentando excluí-la.

No entanto, usando um dos seguintes comandos

$ sudo route del 192.168.76.0 gw 0.0.0.0
$ sudo route del 192.168.76.0

retorna:

SIOCDELRT: No such process

que geralmente aparece quando routenão é possível encontrar a rota.

Por outro lado, usando

$ sudo route del 192.168.76.0/24 gw 0.0.0.0
$ sudo route del 192.168.76.0/24

rendimentos:

route: netmask 000000ff doesn't make sense with host route
Usage: route [-nNvee] [-FC] [<AF>]           List kernel routing tables
(rest of usage)

O que estou fazendo errado? Existe algum motivo para não remover essa rota? Estou errado ao supor que isso interfere com o que eu montei?

(Estou usando o Ubuntu 14.04+).

Dragomok
fonte
2
Em cima da minha cabeça: tente route del -net 192.168.76.0. Caso contrário, ele pensará que você está tentando excluir uma rota para um único host.
23715 Jos
Como você adicionou a rota? Parece que você está usando o vbox, então o roteamento pode fazer parte da configuração do vobx, não sei pelo que você postou.
Panther,
Só por curiosidade, mas por que você definiu esse caminho? Para mim, parece que a rede 192.168.76.0/24 está no link - nenhum gateway é necessário. Mas quando você der uma olhada nas instruções de configuração vinculadas, encontrará a rota route add -net 192.168.78.0/24 192.168.76.2que faz muito mais sentido.
Nephente 23/09/15
2
Btw. Se duas ou mais rotas corresponderem a um host, a mais específica terá precedência, ou seja, a que tiver o prefixo mais longo. Uma rota de host estática tem prefixo / 32 e será preferida. O próximo critério (geralmente) depende de como a rota foi aprendida, por exemplo, estática ou através de um protocolo de roteamento, onde as rotas no link têm maior precedência, seguidas pelas estáticas, seguidas pelas rotas dinâmicas aprendidas via, por exemplo, OSPF.
Nephente 23/09/15
@Jos sua resposta acabou sendo quase correta - se eu apenas adicionar /24ao final do comando, ele funcionará. Obrigado. Se você postar uma resposta, talvez com alguma elaboração no interesse das pessoas que pesquisarão esta questão no futuro, eu a aceitarei.
Dragomok 23/09

Respostas:

11

Para excluir uma única rota de uma tabela de rotas, é necessário especificar parâmetros suficientes para que uma correspondência exclusiva com uma das rotas possa ser feita.

Se você deseja excluir uma sub-rede inteira (ao contrário de um único host), use o -netsinalizador e algumas indicações do escopo do endereço de rede, ou seja, o netmaskparâmetro (por exemplo, 255.255.255.0) ou um número como / 24 (o que significa que os primeiros 24 bits são o número da rede e os 8 restantes são usados ​​para hosts). No seu caso, ambos

sudo route del -net 192.168.76.0/24

e

sudo route del -net 192.168.76.0 netmask 255.255.255.0

teria funcionado.

(obrigado a @nephente por adições úteis)

Jos
fonte
ou seguido especificando a interface, por exemplo dev vboxnet0->sudo route del -net 192.168.76.0 netmask 255.255.255.0 dev vboxnet0
adadion
0

O comentário de Jos está quase correto:

$ sudo route del -net 192.168.76.0/24 remove a rota.

Dragomok
fonte