Skip to content

Instantly share code, notes, and snippets.

@dartraiden
Last active February 12, 2025 23:11
Show Gist options
  • Save dartraiden/283c36bcee72a2e16d93672af13d58b0 to your computer and use it in GitHub Desktop.
Save dartraiden/283c36bcee72a2e16d93672af13d58b0 to your computer and use it in GitHub Desktop.
Все действия выполняются в консоли Entware
- ставим требуемые пакеты:
opkg update && opkg install cron flock
- создаём файл /opt/etc/cron.1min/antizapret-restart (см. ниже)
OpenVPN0 - имя интерфейса АнтиЗапрета, можно посмотреть командой ndmc -c show interface
- перезапускаем крон:
/opt/etc/init.d/S10cron restart
#!/bin/sh
PIDFILE="/tmp/antizapret.pid"
INTERFACE="OpenVPN0"
DOMAIN1="google.com"
DOMAIN2="vk.com"
DOMAIN3="wikipedia.org"
DOMAIN4="yandex.ru"
# проверям, не запущен ли уже скрипт, чтобы не запускать его, если предыдущая копия ещё не закончила работу
exec 200>$PIDFILE
flock -n 200 || exit 1
PID=$$
echo $PID 1>&200
while true; do
# проверяем, актвно ли подключение АнтиЗапрета (например, если пользователь специально его отключил, то не стоит его переподключать)
if ! (ndmc -c show interface $INTERFACE | grep "state: up") > /dev/null 2>&1; then
exit 1
fi
# пингуем домены, если хоть один пинг успешен, то DNS-сервер резолвит, следовательно, не висит и нет необходимости что-то делать
if ping -c 1 $DOMAIN1 > /dev/null 2>&1; then
exit 0
fi
if ping -c 1 $DOMAIN2 > /dev/null 2>&1; then
exit 0
fi
if ping -c 1 $DOMAIN3 > /dev/null 2>&1; then
exit 0
fi
if ping -c 1 $DOMAIN4 > /dev/null 2>&1; then
exit 0
fi
# все домены недоступны - переподключаем АнтиЗапрет
logger "AntiZapret DNS is down. Restarting interface..."
ndmc -c interface $INTERFACE down
sleep 5
ndmc -c interface $INTERFACE up
# немного ждём и повторяем всё с начала
sleep 5
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment