42 lines
1.7 KiB
Bash
42 lines
1.7 KiB
Bash
#!/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"
|