Потребность возникает, когда у Вас на сервере несколько сетевых интерфейсов (network interfaces). В моём случае, это виртуальная машина (virtual machine) VMWare, у которой есть сетевые интерфейсы (network interfaces) как локальной (local), так и глобальной (global) сетей (networks). Если ничего дополнительно не настраивать, то я подозреваю, что выбор маршрута по умолчанию (default route) происходит исходя из того, какой сетевой интерфейс (network interface) быстрее инициализировался. Например, у меня глобальный интерфейс (global interface): iface ens192 inet dhcp
, а локальный интерфейс (local interface): iface ens224 inet static
, и каждый раз при загрузке интерфейс (interface) со статическим (static) IP-адресом (IP address), очевидно, инициализируется быстрее.
Для того, чтобы не терять наш сервер (server) в глобальной сети (global network), мы напишем bash-скрипт (bash script) автозапуска (startup), чтобы вручную определить на каком сетевом интерфейсе (network interface) будет маршрут по умолчанию (default gateway).
На наше счастье, что в Linux, а в частности в Debian, уже давно всё продумано и реализовано — нам только необходимо подёргать за нужные ниточки. В данном случае, HOOK SCRIPTS для сетевых интерфейсов (network interfaces).
Итак, идём в папку /etc/network/if-up.d
и создаём там файл ens192-default-interface
— наш будущий bash-скрипт (bash script) автозапуска (startup) для сетевых интерфейсов (network interfaces). Делаем его сразу исполняемым, чтобы потом не забыть sudo chmod +x /etc/network/if-up.d/ens192-default-interface
. Если у Вас нет команды sudo
— это Ваши проблемы, можете просто её проигнорировать и не использовать. 😉
Открываем наш файл и пишем следующее:
#!/bin/sh
# Restart the global interface
ifdown ens192
ifup ens192
sleep 1# Check the default route is exist
if ! ip route show default | grep -q ‘default via’; then# Add a new default route via global interface
ip route add default via xxx.xxx.xxx.xxxexit 0
fi
# Get the current default route record
default_route=$(ip route show default | awk ‘{print $3}’)# Check if the defualt route via the local interface
if ! [ «$default_route» = «xxx.xxx.xxx.xxx» ]; then# Remove the default route
ip route delete default# Add a new default route on ens192, via the global interface
ip route add default via xxx.xxx.xxx.xxxfi
xxx.xxx.xxx.xxx — это внешний (external) IP-адрес (IP address) нашего глобального интерфейса (global interface).
Ну всё, перезагружаемся (restart) и проверяем, что маршрут по умолчанию (default gateway) навешен на глобальный интерфейс (global interface).
Обсуждение закрыто.