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