diff --git a/10-white_ip b/10-white_ip new file mode 100644 index 0000000..1aac614 --- /dev/null +++ b/10-white_ip @@ -0,0 +1,9 @@ +#!/bin/sh + +WHITE=/opt/white_ip.sh +[ "$INTERFACE" = "wan" ] && { + [ "$ACTION" = "ifup" ] && { + $WHITE >> /opt/white.log + } +} + diff --git a/README.md b/README.md index 1aff24c..f1b6dbf 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,10 @@ # rt-white-ip -Small bash script to reconnet when getting grey ip on Rostelecom +Небольшой скрипт для переподключения при получении серого IP у Ростелекома. + +##Использование (на OpenWRT) + +1. Скопируйте файлы 10-white_ip и white_ip.sh в директорию /opt на роутере +2. Сделайте их исполняемыми + ```chmod +x /opt/10-white_ip /opt/white_ip.sh``` +3. Создайте ссылку на 10-white_ip в /etc/hotplug.d/iface/ + ```ln -s /opt/10-white_ip /etc/hotplug.d/iface/``` diff --git a/white_ip.sh b/white_ip.sh new file mode 100644 index 0000000..477f114 --- /dev/null +++ b/white_ip.sh @@ -0,0 +1,34 @@ +#!/bin/bash +net_addr="100.64.0.0" +net_mask="10" + +ip2int () +{ + local IFS=. ip num e + ip=($1) + for e in 3 2 1 0 + do + (( num += ip[3-e] * 256 ** e )) + done + echo $num +} + +start_int=`ip2int $net_addr` +(( end_int = start_int + 2 ** ( 32 - net_mask ) )) + +#echo IP range is $start_int - $end_int + +ip=$(ip -f inet -o addr show pppoe-wan|cut -d\ -f 7 | cut -d/ -f 1) + +ip_int=`ip2int $ip` +echo `date` Current IP is $ip "("$ip_int")" + +if [[ $ip_int -ge $start_int && $ip_int -le $end_int ]]; +then + echo `date` Grey IP received, restarting wan... + sleep 30 + ifdown wan + sleep 30 + ifup wan +fi +