Als u een complexe netwerkconfiguratie heeft, is het frustrerend om de ' Geen route naar host ”Verschijnen na het openen van een nieuwe interface. Dit komt vaak doordat de standaardroute wordt gewijzigd of verwijderd.
Om uw standaardroute te controleren, voert u in
ip route show
Zoals hierboven getoond, heb ik drie fysieke interfaces, één naar buiten gericht en twee naar interne netwerken. De standaardroute viel op het netwerk toen een verbinding werd gereset, waardoor de rest van mijn netwerk normaal werkte, terwijl alleen deze machine niet wist waar hij het internet kon bereiken.
Om ervoor te zorgen dat de machine het internet kan bereiken, moet deze een standaardroute hebben die kan worden toegevoegd met de volgende opdracht
sudo ip route standaard toevoegen via 136.63.176.1
Als dit probleem zich meer dan een of twee keer voordoet, kan het vervelend worden, dus ik heb een paar shellscripts geschreven om de situatie snel recht te zetten.
Het eerste script haalt je huidige ip voor je op. Ik heb $ INTF ingesteld als STDIN, u wijzigt dit naar uw specifieke interface als u de interfacenaam niet wilt invoeren.
Met je favoriete teksteditor vind ik vim leuk en heb ik een bronmap in mijn homedirectory
mkdir ~ / src && cd ~ / src
Ik kwam getip.sh
#! / bin / bash
#fetch IP-adres ingesteld voor een bepaald apparaat
INTF = $ {1}
PTH = (~ / src /)
declareer TMP_IP2
TMP_IP2 = $ (ip a | grep $ {INTF} | grep inet | cut -d '' -f6 | cut -d '/' -f1> $ {PTH} huidige _ $ {INTF} .ip)
ip een | grep $ {INTF} | grep inet | cut -d ”” -f6 | cut -d '/' -f1 | cut -d '.' -f1-3 | awk ‘{print $ 0 ″ .0 / 24 ″}’> $ {PTH} net _ $ {INTF} .ip
ip een | grep $ {INTF} | grep inet | cut -d ”” -f6 | cut -d '/' -f1 | cut -d '.' -f1-3 | awk ‘{print $ 0 ″ .1 ″}’> $ {PTH} gw _ $ {INTF} .ip
declareer TMP_IP
TMP_IP = $ (cat $ {PTH} huidige _ $ {INTF} .ip)
echo 'huidige wan ip $ TMP_IP'
Sla op en sluit af, maak het uitvoerbaar en test het vervolgens.
sudo chmod a + x getip.sh
bash getip.sh eth0.2
Ervan uitgaande dat dit goed werkte, ga je gang en kopieer het naar / usr / local / bin / om het wereldwijd uitvoerbaar te maken.
sudo cp getip.sh / usr / local / bin / getip
Nu kan ik eenvoudig getip eth0.2 typen en de ip wordt geretourneerd.
Het tweede script wijst de standaardroute toe en voert het eerste script uit.
Ik kwam van setip.sh
#! / bin / bash
ontvang $ {1}
#fetch IP-adres ingesteld voor een bepaald apparaat
PTH = (~ / src /)
declareer RT_IP
RT_IP = $ (cat $ {PTH} gw _ $ {1} .ip)
ip routeverandering standaard via $ RT_IP
ip route standaard toevoegen via $ RT_IP
echo 'ip route - standaard via $ RT_IP'
Opslaan en afsluiten. Het is je misschien opgevallen dat ik zowel de standaardroute heb gewijzigd als toegevoegd, dit is voor gevallen waarin je de verkeerde gateway hebt ingesteld.
sudo chmod a + x setip.sh
sudo setip.sh eth0.2
U kunt de routeringstabel nogmaals controleren om te controleren of alles goed is.
sudo ip route show
U kunt de scripts naar / usr / local / bin / kopiëren als u wilt dat ze globaal uitvoerbaar zijn. Het zal nog steeds sudo nodig hebben, aangezien je de interface aanpast.
2 minuten gelezensudo cp setip.sh / usr / local / bin / setip