Poprawka: brak trasy do hosta w systemie Ubuntu z wieloma sieciami



Wypróbuj Nasz Instrument Do Eliminowania Problemów

Gdy masz złożoną konfigurację sieci, frustrujące jest posiadanie „ Brak trasy do hosta ”Zaczną się pojawiać po podniesieniu nowego interfejsu. Jest to często spowodowane zmianą lub porzuceniem domyślnej trasy.



Aby sprawdzić domyślną trasę, wpisz



Pokaż trasę IP



brak trasy do hosta-1

Jak pokazano powyżej, mam trzy fizyczne interfejsy, jeden skierowany na zewnątrz i dwa do sieci wewnętrznych. Trasa domyślna została usunięta z sieci po zresetowaniu połączenia, co spowodowało, że reszta mojej sieci działała normalnie, a tylko ta maszyna nie wie, gdzie połączyć się z Internetem.

Aby maszyna mogła połączyć się z Internetem, musi mieć domyślną trasę, którą można dodać za pomocą następującego polecenia



sudo ip route dodaj domyślne przez 136.63.176.1

Jeśli ten problem pojawia się więcej niż raz lub dwa razy, może stać się uciążliwy, dlatego napisałem kilka skryptów powłoki, aby szybko naprawić sytuację.

Pierwszy skrypt pobierze dla Ciebie aktualny adres IP. Ustawiłem $ INTF jako STDIN, zmieniasz go na swój specyficzny interfejs, jeśli nie chcesz wpisywać nazwy interfejsu.

Używając twojego ulubionego edytora tekstu, lubię vima i mam folder źródłowy w moim katalogu domowym

mkdir ~ / src && cd ~ / src

Przyszedłem getip.sh

#! / bin / bash

#fetch adres IP ustawiony dla danego urządzenia

INTF = {1} USD

PTH = (~ / src /)

zadeklaruj TMP_IP2

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

ip a | grep $ {INTF} | grep inet | cut -d ”” -f6 | cut -d “/” -f1 | cut -d ”.” -f1-3 | awk „{print $ 0 ″ 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

zadeklaruj TMP_IP

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

echo „current wan ip $ TMP_IP”

Zapisz i zamknij, nadaj mu plik wykonywalny, a następnie przetestuj go.

sudo chmod a + x getip.sh

bash getip.sh eth0.2

brak trasy do hosta-2

Zakładając, że zadziałało to poprawnie, idź dalej i skopiuj go do / usr / local / bin /, aby był globalnie wykonywalny.

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

Teraz mogę po prostu wpisać getip eth0.2, a adres IP zostanie zwrócony.

Drugi skrypt przypisze trasę domyślną, a także uruchomi pierwszy skrypt.

Pochodzę z setip.sh

#! / bin / bash

getip $ {1}

#fetch adres IP ustawiony dla danego urządzenia

PTH = (~ / src /)

zadeklaruj RT_IP

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

ip route change default via $ RT_IP

ip route add default via $ RT_IP

echo „ip route - default via $ RT_IP”

Zapisz i wyjdź. Być może zauważyłeś, że mam zarówno zmianę, jak i dodanie trasy domyślnej, dzieje się tak w przypadkach, gdy masz ustawioną nieprawidłową bramę.

sudo chmod a + x setip.sh

sudo setip.sh eth0.2

brak trasy do hosta-3

Możesz ponownie sprawdzić tablicę routingu, aby dokładnie sprawdzić, czy wszystko jest w porządku.

sudo ip route show

Możesz skopiować skrypty do / usr / local / bin /, jeśli chcesz, aby były wykonywalne globalnie. Będzie to nadal wymagało sudo, ponieważ modyfikujesz i interfejs.

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

2 minuty czytania