БЕЗОПАСНО НАСТРАИВАЕМ /ETC/NETWORK/INTERFACES
ПРОБЛЕМА
При настройке сети, в том же proxmox может возникнуть ситуация, когда теряется доступность сервера и это может быть большой головной болью, если у вас нет возможности подойти физически к серверу и исправить.
ИДЕЯ
Обойтись небольшим скриптом, который бы проверял через какое-то время изменения в конфигурации интерфейсов сети и в случае изменения пробовал проверить доступность сети. В случае если сеть после изменений оставалась работоспособной, то создавал бэкап конфига, в случае если сеть падала, ресторил бы из последнего удачного конфига.
РЕШЕНЕНИЕ
Создадим файл и сделаем исполняемым
cd $HOME && touch ./check_network.sh && chmod +x ./check_network.sh
И добавим следующий код, в котором нам необходимо изменить SERVER_IP на свой публичный внешний адрес, по нему будет проверяться работоспособность сети и OLDTIME который отвечает сколько секунд после изменения файла конфига мы ничего не проверяем. Так как мы будем это вешать на планировщик, на каждую минуту, то есть смысла выставлять значения только наверное больше 2 минут — то-есть значения 120
check_network.sh#/bin/bash SERVER_IP=127.0.0.1 FILE=/etc/network/interfaces BACKUP_FILE=$HOME/interfaces.backup LAST_GOOD_UPDATE=0 OLDTIME=10 CURTIME=$(date +%s) FILETIME=$(stat $FILE -c %Y) TIMEDIFF=$(expr $CURTIME - $FILETIME) if [ $FILETIME -gt $LAST_GOOD_UPDATE ]; then if [ $TIMEDIFF -gt $OLDTIME ]; then ping $SERVER_IP -c 5 2>&1 > /dev/null && RESULT=1 || RESULT=0 if [ $RESULT -eq 1 ]; then echo -e '\033[1;32m' echo "The interface has been changed and after a while it works. We backup it" echo -e '\033[0m' sed -i "6s/LAST_GOOD_UPDATE=.*/LAST_GOOD_UPDATE=${FILETIME}/" ./check_network.sh cp $FILE $BACKUP_FILE else echo -e '\033[1;31m' echo "The interface has been changed and after a while it NOT works. We restore it" echo -e '\033[0m' cp $BACKUP_FILE $FILE FILETIME=$(stat $FILE -c %Y) sed -i "6s/LAST_GOOD_UPDATE=.*/LAST_GOOD_UPDATE=${FILETIME}/" ./check_network.sh systemctl restart networking.service fi fi fi
Разберем по порядку:
:4 — путь до нашего конфига
:5 — путь до бэкапа конфига
:6 — таймштамп изменения конфига
:13 — проверяем есть ли изменения
:14 — выдержали ли мы паузу (задается в секундах строка :7)
:15 — пингуем сами себя через внешний публичный ip
:20-21 — сеть есть, обновляем время изменения конфига в 6 строке и БЭКАПИМ сам конфиг
:26-28 — сети нет, обновляем время изменения файла в 6 строке и РЕСТОРИМ конфиг
На этом все, теперь можно протестировать и закинуть в крон с повторениями на каждую минуту