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



Попробуйте наш инструмент устранения неполадок

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



Чтобы проверить маршрут по умолчанию, введите



ip route show



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

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

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



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

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

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

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

mkdir ~ / src && cd ~ / src

Я пришел на getip.sh

#! / bin / bash

# получить набор IP-адресов для данного устройства

INTF = $ {1}

PTH = (~ / 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 | вырезать -d ”” -f6 | вырезать -d «/» -f1 | вырезать -d ”.” -f1-3 | awk ‘{print $ 0 ″ .0 / 24 ″}’> $ {PTH} net _ $ {INTF} .ip

ip a | grep $ {INTF} | grep inet | вырезать -d ”” -f6 | вырезать -d «/» -f1 | вырезать -d ”.” -f1-3 | awk ‘{print $ 0 ″ .1 ″}’> $ {PTH} gw _ $ {INTF} .ip

объявить TMP_IP

TMP_IP = $ (cat $ {PTH} текущий _ $ {INTF} .ip)

echo «текущий IP-адрес WAN $ TMP_IP»

Сохраните и выйдите, сделайте его исполняемым, а затем протестируйте.

sudo chmod a + x getip.sh

Баш 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}

# получить набор IP-адресов для данного устройства

PTH = (~ / 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

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