Когато имате сложна мрежова настройка, разочароващо е да имате „ Няма път до хоста ”Започват да се появяват след издигане на нов интерфейс. Това често се дължи на маршрута по подразбиране, който се променя или отпада.
За да проверите маршрута си по подразбиране, въведете
ip маршрут шоу
Както е показано по-горе, имам три физически интерфейса, един обърнат навън и два към вътрешни мрежи. Маршрутът по подразбиране падна в мрежата, когато връзката беше нулирана, в резултат на което останалата част от мрежата ми работеше нормално, като само тази машина не знаеше къде да достигне до Интернет.
За да може машината да достигне до Интернет, трябва да има маршрут по подразбиране, който може да бъде добавен със следната команда
sudo ip route добавяне по подразбиране чрез 136.63.176.1
Ако този проблем възникне повече от веднъж или два пъти, той може да се превърне в неприятност, затова написах няколко скрипта за черупки, за да поправя бързо ситуацията.
Първият скрипт ще изтегли текущия ви ip за вас. Имам $ INTF, зададен като STDIN, можете да го промените на вашия специфичен интерфейс, ако не искате да въвеждате името на интерфейса.
Използвайки вашия любим текстов редактор, харесвам vim и имам папка източник в домашната си директория
mkdir ~ / src && cd ~ / src
Дойдох getip.sh
#! / bin / bash
#fetch ip адрес е зададен за дадено устройство
INTF = $ {1}
PTH = (~ / src /)
декларирайте TMP_IP2
TMP_IP2 = $ (ip a | grep $ {INTF} | grep inet | cut -d ”” -f6 | cut -d “/” -f1> $ {PTH} текущ _ $ {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
декларирайте TMP_IP
TMP_IP = $ (котка $ {PTH} текуща _ $ {INTF} .ip)
ехо “текущ wan ip $ TMP_IP”
Запазете и излезте, направете го изпълним и след това го тествайте.
sudo chmod a + x getip.sh
bash getip.sh eth0.2
Ако приемем, че това е работило правилно, продължете и го копирайте в / usr / local / bin /, за да го направите глобално изпълним.
sudo cp getip.sh / usr / local / bin / getip
Сега мога просто да напиша getip eth0.2 и ip ще бъде върнат.
Вторият скрипт ще присвои маршрута по подразбиране, както и изпълнението на първия скрипт.
Дойдох от setip.sh
#! / bin / bash
getip $ {1}
#fetch ip адрес е зададен за дадено устройство
PTH = (~ / src /)
декларирайте RT_IP
RT_IP = $ (котка $ {PTH} gw _ $ {1} .ip)
ip промяна на маршрута по подразбиране чрез $ RT_IP
ip route добавяне по подразбиране чрез $ RT_IP
echo “ip route - по подразбиране чрез $ RT_IP”
Запазете и излезте. Може да сте забелязали, че имам както промяна, така и добавяне на маршрут по подразбиране, това е за случаи, когато сте задали грешен шлюз.
sudo chmod a + x setip.sh
sudo setip.sh eth0.2
Можете да проверите таблицата за маршрутизиране отново, за да проверите отново дали всичко е наред.
sudo ip route show
Можете да копирате скриптовете в / usr / local / bin /, ако искате да бъдат глобално изпълними. Той все още ще изисква sudo, тъй като модифицирате и интерфейс.
2 минути четенеsudo cp setip.sh / usr / local / bin / setip