Поправка: Неуспешен път за хостване в Ubuntu с множество мрежи



Опитайте Нашия Инструмент За Премахване На Проблемите

Когато имате сложна мрежова настройка, разочароващо е да имате „ Няма път до хоста ”Започват да се появяват след издигане на нов интерфейс. Това често се дължи на маршрута по подразбиране, който се променя или отпада.



За да проверите маршрута си по подразбиране, въведете



ip маршрут шоу



няма маршрут до хост-1

Както е показано по-горе, имам три физически интерфейса, един обърнат навън и два към вътрешни мрежи. Маршрутът по подразбиране падна в мрежата, когато връзката беше нулирана, в резултат на което останалата част от мрежата ми работеше нормално, като само тази машина не знаеше къде да достигне до Интернет.

За да може машината да достигне до Интернет, трябва да има маршрут по подразбиране, който може да бъде добавен със следната команда



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

няма маршрут до хост-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

няма маршрут до хост-3

Можете да проверите таблицата за маршрутизиране отново, за да проверите отново дали всичко е наред.

sudo ip route show

Можете да копирате скриптовете в / usr / local / bin /, ако искате да бъдат глобално изпълними. Той все още ще изисква sudo, тъй като модифицирате и интерфейс.

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

2 минути четене