Когда у вас сложная сетевая настройка, неприятно иметь « Нет пути к хосту »Начинают появляться после создания нового интерфейса. Часто это происходит из-за того, что маршрут по умолчанию изменяется или отбрасывается.
Чтобы проверить маршрут по умолчанию, введите
ip route show
Как показано выше, у меня есть три физических интерфейса: один наружу и два - во внутренние сети. Маршрут по умолчанию был сброшен в сети при сбросе соединения, в результате чего остальная часть моей сети работала нормально, и только этот компьютер не знал, где выйти в Интернет.
Чтобы машина могла подключиться к Интернету, ей необходим маршрут по умолчанию, который можно добавить с помощью следующей команды
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
Предполагая, что это сработало, вы копируете его в / 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
Вы можете еще раз проверить таблицу маршрутизации, чтобы еще раз убедиться, что все в порядке.
sudo ip route show
Вы можете скопировать сценарии в / usr / local / bin /, если хотите, чтобы они выполнялись глобально. По-прежнему потребуется sudo, поскольку вы изменяете интерфейс и.
2 минуты на чтениеsudo cp setip.sh / usr / local / bin / setip