claude мне такое запилил после многократных попыток, у меня работает так, если проверять ip на ppp0, а перезапускать wan
#!/opt/bin/sh
# Конфигурация
ConnInterface="eth3"
PPPInterface="ppp0"
counter="/opt/tmp/CountReconnectWan.txt"
previp="/opt/tmp/previp.txt"
log="/opt/tmp/log.txt"
max_tries=9
# Берём IP напрямую с ppp0, не полагаясь на переменные NDM
address=$(ifconfig "$PPPInterface" 2>/dev/null | awk '/inet addr/{print $2}' | cut -d: -f2)
# Нет адреса на ppp0 — интерфейс ещё не поднялся, выходим
if [ -z "$address" ]; then
exit 0
fi
# Логи и сначала очистка
echo "" > "$log"
echo "Интерфейс PPPoE: $PPPInterface, WAN для перезапуска: $ConnInterface" >> "$log"
echo "ip: $address" >> "$log"
echo "Попыток:" $(cat "$counter" 2>/dev/null || echo 0) >> "$log"
# Проверка на серый 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"
# Перезапуск подключения: дёргаем физический WAN, pppd сам переподключится
ifconfig "$ConnInterface" down
sleep 1
ifconfig "$ConnInterface" up
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" >> "$log"
echo "$address" > "$previp"
echo "Сохранение нового ip" >> "$log"
fi
fi