Når du har en kompleks netværksopsætning, er det frustrerende at have “ Ingen rute til vært ”Begynder at blive vist, når du har hævet en ny grænseflade. Dette skyldes ofte, at standardruten enten ændres eller droppes.
For at kontrollere din standardrute skal du indtaste
IP-ruteshow
Som vist ovenfor har jeg tre fysiske grænseflader, en udadvendt og to til interne netværk. Standardruten faldt på netværket, da en forbindelse blev nulstillet, hvilket fik resten af mit netværk til at fungere normalt, idet kun denne maskine ikke vidste, hvor jeg skulle nå Internettet.
For at maskinen skal kunne nå Internettet, skal den have en standardrute, der kan tilføjes med følgende kommando
sudo ip-rute tilføj standard via 136.63.176.1
Hvis du har dette problem opstår mere end en eller to gange, kan det blive en gener, så jeg har skrevet et par shell-scripts til hurtigt at rette op på situationen.
Det første script henter din nuværende ip til dig. Jeg har $ INTF indstillet som STDIN, du skifter det til din specifikke grænseflade, hvis du ikke vil indtaste grænsefladenavnet.
Ved hjælp af din yndlings teksteditor kan jeg lide vim og har en kildemappe i min hjemmekatalog
mkdir ~ / src && cd ~ / src
Jeg kom getip.sh
#! / bin / bash
#fetch ip-adresse indstillet til en given enhed
INTF = $ {1}
PTH = (~ / src /)
erklære TMP_IP2
TMP_IP2 = $ (ip a | grep $ {INTF} | grep inet | cut -d ”” -f6 | cut -d “/” -f1> $ {PTH} nuværende _ $ {INTF} .ip)
ip a | grep $ {INTF} | grep inet | klip -d ”” -f6 | klippe -d “/” -f1 | skære -d ”.” -f1-3 | awk '{print $ 0 ″ .0 / 24 ″}'> $ {PTH} netto _ $ {INTF} .ip
ip a | grep $ {INTF} | grep inet | klip -d ”” -f6 | klippe -d “/” -f1 | skære -d ”.” -f1-3 | awk '{print $ 0 ″ .1 ″}'> $ {PTH} gw _ $ {INTF} .ip
erklære TMP_IP
TMP_IP = $ (kat $ {PTH} nuværende _ $ {INTF} .ip)
ekko “nuværende wan ip $ TMP_IP”
Gem og afslut, gør det eksekverbart, og test det derefter.
sudo chmod a + x getip.sh
bash getip.sh eth0.2
Forudsat at det fungerede ordentligt for dig, skal du gå videre og kopiere det til / usr / local / bin / for at gøre det globalt eksekverbart.
sudo cp getip.sh / usr / local / bin / getip
Nu kan jeg bare skrive getip eth0.2 og ip returneres.
Det andet script tildeler standardruten samt det første script.
Jeg kom fra setip.sh
#! / bin / bash
getip $ {1}
#fetch ip-adresse indstillet til en given enhed
PTH = (~ / src /)
erklære RT_IP
RT_IP = $ (kat $ {PTH} gw _ $ {1} .ip)
ip ruteændring standard via $ RT_IP
IP-rute tilføjer standard via $ RT_IP
ekko “ip-rute - standard via $ RT_IP”
Gem og afslut. Du har måske bemærket, at jeg både har ændret og tilføjet standardrute, dette er til lejligheder, hvor du har det forkerte gateway-sæt.
sudo chmod a + x setip.sh
sudo setip.sh eth0.2
Du kan kontrollere rutetabellen igen for at dobbelttjekke, om alt er godt.
sudo ip ruteshow
Du kan kopiere scripts til / usr / local / bin /, hvis du ønsker, at de skal være globalt eksekverbare. Det kræver stadig sudo, da du ændrer og bruger interface.
2 minutter læstsudo cp setip.sh / usr / local / bin / setip