Исправлено: ошибка при отсутствии маршрута к хосту в Ubuntu с несколькими сетями —

Когда у вас есть сложные настройки сети, расстраиваетНет маршрута к хостуНачать появляться после поднятия нового интерфейса. Это часто происходит из-за того, что маршрут по умолчанию либо изменен, либо удален.

Для проверки маршрута по умолчанию введите

ip route show

нет маршрута к хосту-1

Как показано выше, у меня есть три физических интерфейса, один наружу и два к внутренним сетям. Маршрут по умолчанию был сброшен в сети при сбросе соединения, в результате чего остальная часть моей сети работала нормально, и только этот компьютер не знал, где можно получить доступ к Интернету.

Чтобы машина могла выходить в Интернет, ей необходим маршрут по умолчанию, который можно добавить с помощью следующей команды

sudo ip route добавить значение по умолчанию через 136.63.176.1

Если у вас эта проблема возникает более одного или двух раз, это может стать неприятностью, поэтому я написал пару сценариев оболочки, чтобы быстро исправить ситуацию.

Первый скрипт получит ваш текущий IP для вас. У меня $ INTF, установленный как STDIN, вы меняете его на свой конкретный интерфейс, если не хотите вводить имя интерфейса.

Используя ваш любимый текстовый редактор, я люблю vim и имею исходную папку в моем домашнем каталоге

mkdir ~ / src CD ~ / SRC

vim getip.sh

#! / Bin / Баш

#fetch IP-адрес установлен для данного устройства

НИЖДТ = $ {1}

РТН = (~ / SRC /)

объявить 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 / 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 = $ (cat $ {PTH} current _ $ {INTF} .ip)

echo «current 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 будет возвращен.

Второй скрипт назначит маршрут по умолчанию, а также запустит первый скрипт.

vim setip.sh

#! / Bin / Баш

getip $ {1}

#fetch IP-адрес установлен для данного устройства

РТН = (~ / SRC /)

объявить RT_IP

RT_IP = $ (cat $ {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

Ссылка на основную публикацию
Adblock
detector