LINUX.ORG.RU

OpenWrt не работает скрипт выбора подсети при PPPoE соединении

 , , ,


0

2

Всем здравствуйте! Есть роутер, прошит в OpenWrt, провайдер Ростелеком, протокол PPPoE. При установке PPPoE соединения рендомно выдается IP-адрес из 10.20.32.0/20. Я хочу что бы роутер сам отключал и включал PPPoE соединение, пока не получит IP адрес из пула 10.20.38.0/24. При этом, если это не получилось за 10 попыток - то оставляем тот адрес, который есть сейчас.

Я полный ноль в скриптах, написал вот такое, по примерам из интернета - findpool.sh

#!/bin/sh

ipiwant="10.20.38." #я хочу получить адрес из этой подсети
myvar=0 
while [ $myvar -ne 10 ] #если за 10 попыток не удалось получить нужный ip-адрес - то оставляем тот, который есть
do
myvar=$(( $myvar + 1 ))
unset ip #обнуляем переменную ip
. /lib/functions/network.sh; network_get_ipaddr ip wan; #тут мы присваиваем переменной ip наш текущий WAN ip-адрес вида aaa.bbb.ccc.ddd
echo "$ip" >> /tmp/log/ip.log #записываем значение переменной ip в лог файл, что бы видеть что ip-адреса меняются при перезагрузке сетевого интерфейса
obrezkaWAN=$(echo $ip | grep -o -E '([0-9]+\.){3}') #обрезаем наш WAN ip-адрес до вида aaa.bbb.ccc.
# далее сравниваем желаемый ip-адрес с полученным
if [ "$obrezkaWAN" != "$ipiwant" ]; then # если ip-адреса не совпали - перезагружаем PPPoE соединение
        (ifdown wan; sleep 10; ifup wan) &
        sleep 2
else
        break # если ip-адреса совпадают или закончились 10 попыток - просто выходим из цикла и запускаем обратный ssh до моего сервера на работе
fi
done

/etc/crontabs/restartssh.sh >/dev/null 2>&1

Далее - прописываю адрес findpool.sh в файл rc.local и перезагружаю роутер.

Проблемы - не понятно, работает ли скрипт, потому что он пишет в логфайл просто 10 одинаковых ip-адресов. НО! эти адреса не совпадают с текущими в комманде ifconfig, соответственно, вроде WAN ip-адреса меняются, но никак не могу «поймать» нужный мне пул адресов и непонятно почему в логфайл пишется 10 одинаковых адресов. Помогите, пожалуйста, найти ошибку.

Это вызывает недоумени:

(ifdown wan; sleep 10; ifup wan) &
        sleep 2
Если sub-shell будет спать 10 секунд и только потом поднимать интерфейс, то почему основной цикл спит только 2 секунды, через которые проверяет ip-адрес?

mky ★★★★★ ()
Последнее исправление: mky (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.