Вот, потратил целый день, научился писать немного скрипты. Переписал. Работает отлично.
Закидываем так же /opt/etc/ndm/wan.d, называем, например rtk_whitener.sh
Возможно нужно дать права выполнения через
chmod +x rtk_whitener.sh
Возможно потребуется установить grep, если не будет отрабатывать busybox'овский.
opkg update opkg
install grep
В ConnInterface= прописываем нужный eth взятый при выполнении ifconfig
У меня это eth3.3086 из-за PPPoE РТК и VLAN, у вас мб eth 3 или другой, вариантов не так уж много.
Хоть ip у меня закреплен за ppp0 в ifconfig, но перезагрузка этого интерфейса приводит лишь к пропаданию интернета, так что если увидите ppp0 с ip вашим, подставите его и не будет работать - скорее всего нужно тоже eth3.3086 или подобное вписать.
в max_tries= конечно количество попыток.
Так же лог последней отработки записывается в /opt/tmp/log.txt
Если ставите на внутреннюю память роутера - лучше без логгирования. Дальше скрипт без логгирования предоставлю за этим.
С логами:
#!/opt/bin/sh
# Конфигурация
ConnInterface="eth3.3086"
counter="/opt/tmp/CountReconnectWan.txt"
previp="/opt/tmp/previp.txt"
log="/opt/tmp/log.txt"
max_tries=9
#Нет адреса, выходим
if [ "$address" = "" ]; then
exit 2
fi
#Логи и сначала очистка
echo "" > "$log"
echo "Возможный интерфейс: $interface (вместо ppp0 рекомендуется перезагружать какой-либо eth" >> "$log"
echo "ip: $address" >> "$log"
echo "Попыток:" $(cat "$counter") >> "$log"
# Проверка на наличие переданных данных
if [ -z "$interface" ] || [ -z "$address" ] || [ -z "$gateway" ]; then
echo "Чёто потеряли. Выход" >> "$log"
exit 1
fi
# Проверка на серый IP
if echo "$address" | grep -qE "^(10\.|100\.6[4-9]\.|100\.[7-9][0-9]\.|100\.1[01][0-9]\.|100\.12[0-7]\.|172\.1[6-9]\.|172\.2[0-9]\.|172\.3[01]\.)"; then
#Файл есть?
if [ ! -f "$counter" ]; then
echo "0" > "$counter"
echo "Нет файла счётчика. Создаём, вписываем 0 в него" >> "$log"
fi
# Увеличиваем счетчик попыток
echo "Увеличиваем счётчик" >> "$log"
try_nr=$(cat "$counter")
try_nr=$((try_nr + 1))
if [ "$try_nr" -gt "$max_tries" ]; then
echo "Лимит по счётчику, выходим" >> "$log"
echo "0" > "$counter"
exit
fi
echo "$try_nr" > "$counter"
echo "Переходим к перезапуску подключения." >> "$log"
# Перезапуск подключения
ifconfig $ConnInterface down
#sleep 1
ifconfig $ConnInterface up
#sleep 1
else
# Сброс счетчика и сохранение белого IP
echo "0" > "$counter"
echo "Сброс счётчика" >> "$log"
[ -f "$previp" ] || echo "0.0.0.0" > "$previp"
_previp=$(cat "$previp")
if [ "$_previp" != "$address" ]; then
echo "$_previp и $address"
echo "$address" > "$previp"
echo "Сохранение старого ip" >> "$log"
fi
fi
Без логов:
#!/opt/bin/sh
# Конфигурация
ConnInterface="eth3.3086"
counter="/opt/tmp/CountReconnectWan.txt"
previp="/opt/tmp/previp.txt"
max_tries=9
#Нет адреса, выходим
if [ "$address" = "" ]; then
exit 2
fi
# Проверка на наличие переданных данных
if [ -z "$interface" ] || [ -z "$address" ] || [ -z "$gateway" ]; then
exit 1
fi
# Проверка на серый IP
if echo "$address" | grep -qE "^(10\.|100\.6[4-9]\.|100\.[7-9][0-9]\.|100\.1[01][0-9]\.|100\.12[0-7]\.|172\.1[6-9]\.|172\.2[0-9]\.|172\.3[01]\.)"; then
#Файл есть?
if [ ! -f "$counter" ]; then
echo "0" > "$counter"
fi
# Увеличиваем счетчик попыток
try_nr=$(cat "$counter")
try_nr=$((try_nr + 1))
if [ "$try_nr" -gt "$max_tries" ]; then
echo "0" > "$counter"
exit
fi
echo "$try_nr" > "$counter"
# Перезапуск подключения
ifconfig $ConnInterface down
#sleep 1
ifconfig $ConnInterface up
#sleep 1
else
# Сброс счетчика и сохранение белого IP
echo "0" > "$counter"
[ -f "$previp" ] || echo "0.0.0.0" > "$previp"
_previp=$(cat "$previp")
if [ "$_previp" != "$address" ]; then
echo "$_previp и $address"
echo "$address" > "$previp"
fi
fi