Como faço para excluir uma rota da tabela de roteamento do Linux

42

Isso acaba sendo mais difícil do que eu pensava. As rotas que desejo excluir são as "!" rotas rejeitadas, mas não consigo formular o comando "route del" correto para executá-lo.

Aqui está a tabela de roteamento ...

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
67.40.227.206   *               255.255.255.255 UH    0      0        0 ppp0
192.168.46.79   *               255.255.255.255 UH    0      0        0 ipsec0
192.168.46.79   -               255.255.255.255 !H    2      -        0 -
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
10.1.0.0        *               255.255.0.0     U     0      0        0 ipsec0
10.1.0.0        -               255.255.0.0     !     2      -        0 -
default         *               0.0.0.0         U     3      0        0 ppp0
default         *               0.0.0.0         U     4      0        0 ppp0

Eu tenho duas entradas para 192.168.46.79 e 10.1.0.0. Estes são gerados automaticamente pelo pequeno roteador baseado em Linux que estou usando. Posso executar ping nos túneis IPSEC a partir do próprio shell, mas o tráfego da LAN segue a segunda rota (a rota "!" Ou "! H" rejeitada) por motivos que simplesmente não entendo.

Zoredache
fonte
Você pode ser mais específico quando diz que o tráfego segue a 'segunda rota'?
Zoredache
Observe as duas entradas da tabela para 192.168.46.79? No shell do roteador, se eu fizer ping no lado do túnel, ele funcionará. Do lado da LAN, o tráfego vai para a "segunda 192.168.46.79" entrada e é rejeitado / descartado.
Também não entendo por que o SG560 gera duas (2) entradas de tabela para destinos "padrão" e IPSEC. Estou perplexo.

Respostas:

53

com o route -ncomando você obterá

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.178.1   0.0.0.0         UG    0      0        0 eth0
0.0.0.0         160.98.123.1    0.0.0.0         UG    600    0        0 wlan0

sudo route del -net 0.0.0.0 gw 192.168.178.1 netmask 0.0.0.0 dev eth0

você obterá todos os parâmetros respectivamente acima

Philippe Gachoud
fonte
1
Após a reinicialização, ele vem novamente. Como posso excluir permanentemente?
Shyamkkhadka 14/01
1
@shyamkkhadka depende de qual processo foi criado ... recomendamos que você envie uma pergunta com seu caso específico para analisá-lo. Dê detalhes sobre a rota que você obteve e deseja remover. Principalmente, o servidor e o cliente dhcp criarão as rotas
Philippe Gachoud 14/01
15

Os tipos de rotas com a !bandeira são inacessíveis ou proibidos. route, sendo um utilitário antigo do net-tools, não diferencia entre os dois. Use iproute2.

A maneira da net-tools de excluir essas rotas seria usá route del-la. No entanto, o net-tools não oferece nenhuma maneira de diferenciar entre a rota rejeitada e a outra (porque o argumento dev é opcional, embora não seja provável que a especificação de um dispositivo remova a rota inacessível).

O iproute2 permite que você faça assim:

ip route del unreachable 10.1.0.0/24
ip route del unreachable 192.168.46.79/32

Pode não ser inacessível, mas proibir. Use ip routesem argumentos para determinar qual.

Falcon Momot
fonte
8

Eu acho que é isso: route del -net 10.1.0.0 netmask 255.255.0.0 metric 2

Não tenho 100% de certeza. Mas acho que você tem algo mais pateta, já que possui 2 rotas padrão.

Baumgart
fonte
2
As rotas padrão +1: 2 são sempre um sinal de que algo está sendo configurado incorretamente (a menos que aponte para gateways diferentes e possua métricas diferentes).
wolfgangsz
-1

Por favor, veja se existe um "arquivo de configuração do dispositivo" em /etc/network/interfaces.d/ -> eu tinha eht0 !! Realmente, era eht0 e não eth0 lá!

Andreas Brandts
fonte
Você pode expandir um pouco sua resposta, pois atualmente não é óbvio como isso se relaciona com a pergunta que está sendo feita.
womble