Correção: falha de nenhuma rota para o host no Ubuntu com várias redes



Experimente Nosso Instrumento Para Eliminar Problemas

Quando você tem uma configuração de rede complexa, é frustrante ter o “ Sem rota para o host ”Começa a aparecer depois de criar uma nova interface. Freqüentemente, isso ocorre devido à rota padrão ser alterada ou eliminada.



Para verificar sua rota padrão, digite



show de rota ip



nenhuma rota para o host-1

Como mostrado acima, tenho três interfaces físicas, uma voltada para o exterior e duas para redes internas. A rota padrão caiu na rede quando uma conexão foi redefinida, fazendo com que o resto da minha rede operasse normalmente, com apenas esta máquina não sabendo onde acessar a Internet.

Para que a máquina consiga acessar a Internet ela precisa ter uma rota padrão que pode ser adicionada com o seguinte comando



sudo ip route add default via 136.63.176.1

Se você tiver esse problema surgindo mais de uma ou duas vezes, pode se tornar um incômodo, então escrevi alguns scripts de shell para corrigir rapidamente a situação.

O primeiro script irá buscar seu ip atual para você. Eu tenho $ INTF definido como STDIN, você pode alterá-lo para sua interface específica se não quiser inserir o nome da interface.

Usando seu editor de texto favorito, gosto do vim e tenho uma pasta de origem no meu diretório inicial

mkdir ~ / src && cd ~ / src

vim getip.sh

#! / bin / bash

#fetch endereço IP definido para determinado dispositivo

INTF = $ {1}

PTH = (~ / src /)

declarar TMP_IP2

TMP_IP2 = $ (ip a | grep $ {INTF} | grep inet | cut -d ”” -f6 | cut -d “/” -f1> $ {PTH} atual _ $ {INTF} .ip)

ip a | grep $ {INTF} | grep inet | cut -d ”” -f6 | cut -d “/” -f1 | cut -d ”.” -f1-3 | awk ‘{print $ 0 ″ .0 / 24 ″}’> $ {PTH} net _ $ {INTF} .ip

ip a | grep $ {INTF} | grep inet | cut -d ”” -f6 | cut -d “/” -f1 | cut -d ”.” -f1-3 | awk ‘{print $ 0 ″ .1 ″}’> $ {PTH} gw _ $ {INTF} .ip

declarar TMP_IP

TMP_IP = $ (cat $ {PTH} atual _ $ {INTF} .ip)

eco “ip wan atual $ TMP_IP”

Salve e saia, torne-o executável e teste-o.

sudo chmod a + x getip.sh

bash getip.sh eth0.2

nenhuma rota para o host-2

Assumindo que funcionou corretamente para você, vá em frente e copie-o em / usr / local / bin / para torná-lo executável globalmente.

sudo cp getip.sh / usr / local / bin / getip

Agora posso simplesmente digitar getip eth0.2 e o ip será retornado.

O segundo script atribuirá a rota padrão, bem como executará o primeiro script.

vim setip.sh

#! / bin / bash

getip $ {1}

#fetch endereço IP definido para determinado dispositivo

PTH = (~ / src /)

declarar RT_IP

RT_IP = $ (cat $ {PTH} gw _ $ {1} .ip)

mudança de rota IP padrão via $ RT_IP

rota ip adicionar padrão via $ RT_IP

echo “ip route - padrão via $ RT_IP”

Salve e saia. Você deve ter notado que eu mudei e adicionei a rota padrão, isto é para ocasiões em que você configurou o gateway errado.

sudo chmod a + x setip.sh

sudo setip.sh eth0.2

nenhuma rota para host-3

Você pode verificar a tabela de roteamento novamente para verificar se tudo está bem.

sudo ip route show

Você pode copiar os scripts em / usr / local / bin / se desejar que eles sejam executáveis ​​globalmente. Ele ainda exigirá sudo, pois você está modificando e fazendo a interface.

sudo cp setip.sh / usr / local / bin / setip

2 minutos lidos