#!/bin/sh # Скрипт для Keenetic (Entware cron, каждые 2 мин). # Определяет внешний WAN IP и сообщает wan-guard если он изменился. # # Установка: # 1. Скопировать в /opt/etc/wan-notify.sh, chmod +x # 2. В /opt/etc/cron.d/wan-notify: # */2 * * * * root /opt/etc/wan-notify.sh # 3. Задать переменные ниже или вынести в /opt/etc/wan-notify.env WAN_GUARD_URL="http://85.198.84.96:8099/notify" WAN_GUARD_TOKEN="REPLACE_WITH_STRONG_SECRET" ROUTER_ID="$(uname -n)" # или задать вручную: ROUTER_ID="vesovaya" CACHE_FILE="/tmp/wan_guard_last_ip" IFACE="${WAN_IFACE:-eth0}" # WAN-интерфейс: eth0, ppp0 и т.д. # Определяем внешний IP (пробуем несколько методов) get_wan_ip() { # Метод 1: через ifconfig.me (нужен интернет) IP=$(curl -s --max-time 5 --interface "$IFACE" https://ifconfig.me 2>/dev/null) [ -n "$IP" ] && echo "$IP" && return # Метод 2: через ip route source IP=$(ip route get 1.1.1.1 2>/dev/null | grep -oP 'src \K[\d.]+') [ -n "$IP" ] && echo "$IP" && return } CUR=$(get_wan_ip) [ -z "$CUR" ] && exit 0 PREV=$(cat "$CACHE_FILE" 2>/dev/null) [ "$CUR" = "$PREV" ] && exit 0 echo "$CUR" > "$CACHE_FILE" curl -s --max-time 10 -X POST "$WAN_GUARD_URL" \ --data-urlencode "token=$WAN_GUARD_TOKEN" \ --data-urlencode "router=$ROUTER_ID" \ --data-urlencode "ip=$CUR" \ -o /dev/null -w "%{http_code}" | grep -q "200" \ && logger -t wan-guard "IP обновлён: $PREV → $CUR" \ || logger -t wan-guard "Ошибка отправки IP: $CUR"