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
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
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
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.
2 minuty czytaniasudo cp setip.sh / usr / local / bin / setip