Так как роутер установлен в не очень удобном месте и работает в паре с 3G модемом Novatel MC760, сделал небольшой скрипт для автоматизации перезагрузки роутера (watchdog). Принцип данного скрипта можно применить в любом роутере где установлен Linux и можно добраться до файловой системы. Для того чтобы скрипт заработал на Asus RT-N10U нужно проделать следующее:
1. Необходимо прошить роутер на альтернативную прошивку AsusWRT- Merlin ftp://82.207.89.70/pub/ASUS/ASUSWRT_MODDED/mod8/RT-N10U_3.0.0.4_378_4129-gecc8142-m8.trx
2. Подключаемся по SSH на IP роутера и создаем скрипт проверки состояния соединения с именем checkinet, сохраняем его в /jffs/scripts/ и даем права на выполнение командой chmod +x checkinet:
3. Выбрать себе сценарий который будет использоваться или создать свой.
Вариант №1. Скрипт делает элементарные вещи. Сначала пытается скачать страничку google.com, проверяя есть ли интернет и работает ли DNS, если не получается, то отправляет роутер в перезагрузку.
#!/bin/sh
wget -q --spider http://google.com
if [ $? -eq 0 ]; then
logger "WAN is UP"
else
reboot
fi
Вариант №2. Если есть доступ к PPTP VPN серверу, который может выдать внешний IP за который Интертелеком хочет за это денег. Подходит если за роутером установлен, например, видеорегистратор. Сценарий делает тоже самое что и первый скрипт но, дополнительно, проверяет наличие на интерфейсе внешнего IP выданного VPN сервером. Если IP нет, то рестартует VPN клиента.
#!/bin/sh
wget -q --spider http://google.com
if [ $? -eq 0 ]; then
logger "WAN is UP"
ifconfig | grep XXX.XXX.XXX.XXX
if [ $? -eq 0 ]; then
logger "VPN is UP"
else
logger "VPN is DOWN"
service restart_vpncall
fi
else
reboot
fi
Вариант №3. Отключение автоматической перезагрузки роутера при отсутствии модема в USB. Для реализации данной функции потребуется знать VID/PID модема. Узнается командой lsusb в консоли.
#!/bin/sh
modem=`lsusb | grep "XXXX:XXXX"`
if [ -n "$modem" ]; then
logger "USB modem is connected"
wget -q --spider http://google.com
if [ $? -eq 0 ]; then
logger "WAN is UP"
else
reboot
fi
else
logger "USB modem is not connected"
fi
Вариант №3.1. Отмена презагрузки если отсутствует модем с проверкой VPN
#!/bin/sh
modem=`lsusb | grep "XXXX:XXXX"`
if [ -n "$modem" ]; then
logger "USB modem is connected"
wget -q --spider http://google.com
if [ $? -eq 0 ]; then
logger "WAN is UP"
ifconfig | grep XXX.XXX.XXX.XXX
if [ $? -eq 0 ]; then
logger "VPN is UP"
else
logger "VPN is DOWN"
service restart_vpncall
fi
else
reboot
fi
else
logger "USB modem is not connected"
fi
4. Необходимо добавить задачу в планировщик по пути /jffs/crontab/admin Я сделал интервал 5 минут
*/5 * * * * /jffs/scripts/checkinet