Скрипт проверки и восстановления канала через PPP

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение kpp » 2011-04-22 23:48:34

Имеется FreeBSD 8.2 и резервный канал через USB модем Novatel U760.
Задача: контроллировать PPP-соединение. Если упало что - восстановить.
Написал скрипт.
Работает под 8.2, под 8.0, 8.1 тоже должно работать (нужно проверять).
Если кому нужно, или есть желание потестировать, поучаствовать в допиливании\шлифовании - буду рад.
https://hi.dp.ua/svn/sh_check_net/
Это библиотеки ф-ций, расположить в /etc/libs
https://hi.dp.ua/svn/sh_libfunc/
Логин: tat , пароль: 123
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение kpp » 2011-04-23 9:39:12

Модем может быть любой, версия FreeBSD любая, однако с 8.х есть возможность программно передернуть USB модем, если подвис.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение kpp » 2011-04-23 12:28:02

Пример конфигурационного файла check_ppp.conf.sampl

Код: Выделить всё

#
# check_ppp.conf
#
# пример конфигурационного файла для check_dial_ppp.sh
#

# полный путь к файлу ppp.conf
FILE_PPP_CONF="/etc/ppp/ppp.conf"
# имя секции дозвона PPP (по файлу /etc/ppp/ppp.conf)
namedial="peoplenet"
# название USB модема для версий FreeBSD более 8 (определить командой usbconfig)
# если не указано, наличие модема не проверяется
modem_name="Novatel Wireless CDMA Novatel Wireless Inc."
# дополнительное действие для получения необходимого файла-устройства
ADDITIONAL_ACT="camcontrol eject cd0"
# модуль, необходимый для опознания модема
# если не указано, модуль не проверяется
modules="u3g"
#
execdial="ppp"
# режим запуска PPP
modedial="-ddial"
# имя сетевого интерфейса
interface_name="tun0"
# лог файл
logfile="/var/log/check_ppp.log"

# код возврата, если действий не производилось
cNoAct="255"

# перечень номеров таблиц маршрутизации (см. команду setfib)
setfib_list="1 2 3 4"

# перечень хостов для пингования
ping_list="ex.ua lenta.ru sdk"
# порог определения наличия канала в процентах
# например если в ping_list указано 3 хоста
# - все пингуются потери - 0% - канал отличный
# - из них 1 не пингуется - 33% "плохости" канала
# - ни один не пигуется - потери 100% канала нет
ping_vol_need="35"
Запускаемый скрипт check_dial_ppp.sh

Код: Выделить всё

# допустимые параметры запуска
# check  [state|start] (default: state)
# linkup [state|start|stop|restart] (default: state)
# online [state|online] (default: state)

# без параметров = check state
# stop  = linkup stop
# start = linkup start
# alive = online online

# check проверить(и\или подготовить) наличие достаточных условий для работы PPP
# check [state] (или без параметров) - только проверка
# check start   - проверка и по возможности устранение проблем

# linkup контроль работы PPP: процесса PPP, сетевого интерфейса PPP(interface_name)
# linkup [state] - определяется запущен процесс\сетевой интерфейс PPP(interface_name)
# linkup start (или просто start) - запускается PPP процесс, если не запущен,
#  если запущен, проверяется наличие достаточных условий для работы PPP
# linkup stop  (или просто stop)  - прервать выполнения PPP
# linkup restart - перезапуск PPP или просто запуск(если PPP не был запущен)

# online контроль работы PPP: процесса PPP, сетевого интерфейса PPP(interface_name),
#  пингование своего IP, своего шлюза и списка хостов(ping_list)
# online [state] - определяется запущен процесс\сетевой интерфейс PPP(interface_name), пингование
# online online (или просто alive) - определяется запущен процесс\сетевой интерфейс PPP(interface_name),
#  пингование,
#  если PPP не запущен - запустить,
#  если "канал хуже" заданного порога(ping_vol_need) - перезапустить PPP
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение kpp » 2011-04-23 12:45:16

Итак:
1.Настроить PPP, так чтобы при поднятии его руками работало.
2.Настроить check_ppp.conf
3.Запускать кроном скрипт check_dial_ppp.sh с параметром alive, скажем, раз в 5 минут.

Теперь, по идее, канал должен быть всегда "жив".

Осталось, правда, несколько непоняток:
- если одновременно PPP соединений несколько: как жестко привязаться к имени сетевого интерфейса (tun0 например);
- проверить не используется необходимое устройство (/dev/cuaU0.0 например) кем-то и кем.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение kpp » 2011-04-24 20:28:59

Готова новая версия скрипта.
Отвязался от жесткой привязки к сетевому интерфейсу.
Осталось придумать как реализовать проверку на использование устройства (/dev/cuaU0.0 например) кем-то и кем.
Приглашаю добровольцев-комсомольцев потестить на разных версиях Фри и на разных модемах.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение kpp » 2011-04-25 21:11:57

Протестировал на
FreeBSD 8.2,
модемах:
Novatel U760
Huawei EC168
Sierra Wireless Compass 597
Полет нормальный.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение skeletor » 2011-04-26 10:01:22

У меня Novatel U720, проблема актуальная для меня. Сейчас пока использую такой скрипт:

Код: Выделить всё

/usr/bin/killall -9 ppp ; /sbin/ifconfig tun0 destroy ; /usr/sbin/usbconfig -d ugen0.2 power_off ; /bin/sleep 40 ; /usr/sbin/usbconfig -d ugen0.2 power_on ; /etc/rc.d/ppp start
Я читал, что на FreeBSD 8.2 есть проблемы с USB: типа программно погасить можно, а потом включить нельзя.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение kpp » 2011-04-26 10:27:36

2 skeletor
В 8.2 включение USB-устройства усложнили(не знаю зачем), но возможность есть:

Код: Выделить всё

usbconfig -d 0.1 set_config 255
usbconfig -d 0.1 set_config 0
Где 0.1 - это корневой юсб-концентратор, на котором висит интересующий нас порт.
В принципе, можно было обойтись и

Код: Выделить всё

killall -9 ppp
, но при этом прерывается выполненеие всех процессов, в названии которых встречается "ppp", ну и такой вариант совсем не подходит при одновременном использовании нескольких PPP-сессий.
Скрипт рабочий(не так много тестированный, правда ;) ), можно брать использовать.

Следующий шаг - контроль траффика(канал тарифицируется по траффику) съем статистики, учет за период, получение балланса на счету.
Ну и супер игра - прием\отсылка СМСок :smile:
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение skeletor » 2011-04-26 10:58:37

А где вы нашли эти опции set_config ? В мане нету. Видимо ман собрали с версии 8.0

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение kpp » 2011-04-26 11:09:37

Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение skeletor » 2011-04-26 11:42:27

Что-то у меня не хочет работать :( 8.1 Пробую пока делать всё вручную, отключаю, подключаю, потом запускаю ppp.

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение skeletor » 2011-04-26 11:47:51

Ссори, всё заработало. Просто вместо root-huba я передёргивал порт модема :)

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение kpp » 2011-04-26 13:27:37

2 skeletor
:smile: я наступил на теже грабли
Просьба потестить скрипт из первого поста :oops:
Особенно на 8.1, если есть.
На 8.1 тоже работает set_config ??
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение kpp » 2011-04-26 13:36:04

Я исходил из того, чтобы передернуть ЮСБ
в 8.0,8.1 -

Код: Выделить всё

usbconfig -d a.d power_off; usbconfig -d a.d power_on
в 8.2 -

Код: Выделить всё

usbconfig -d a.d power_off; usbconfig -d a.1 set_config 255; usbconfig -d a.1 set_config 0
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение skeletor » 2011-04-26 13:53:17

kpp писал(а):2 skeletor
На 8.1 тоже работает set_config ??
Вручную работает вот так:

Код: Выделить всё

usbconfig -d 0.1 set_config 255
usbconfig -d 0.1 set_config 0
даже не надо делать poweroff

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение kpp » 2011-04-26 14:59:57

2 skeletor
И какой эффект, если не делать перед этим power_off ? :smile:
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.


kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение kpp » 2011-04-26 15:18:53

Если перед этим сделать

Код: Выделить всё

power_off
Устройство должно включиться
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение skeletor » 2011-04-27 9:50:59

Чуть позже попробую протестировать скрипт.

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение skeletor » 2011-05-05 9:50:20

Дошли руки до тестирования. Можно краткую инструкцию по настройке :) ?

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение skeletor » 2011-05-05 14:18:46

Код: Выделить всё

#/scripts/check_ppp/check_dial_ppp.sh alive
setfib: 1: invalid FIB (max 0)
setfib: 2: invalid FIB (max 0)
setfib: 3: invalid FIB (max 0)
setfib: 4: invalid FIB (max 0)
20110505_141721 State: Module u3g no load.
20110505_141721 Check ready(state) PPP(itc):Fatal ERROR(10)!
20110505_141721 Check ready(state) PPP(itc):Fatal ERROR(10)(device "/dev/cuaU0.0", modem "Novatel Wireless CDMA Novatel Wireless Inc.[0.2(0.1)]ON")!
20110505_141721 WPD:(state)[tun0:26752] WARN_DEV(10!)
Process ID="26752" success killed.
kldload: can't load u3g: File exists
20110505_141721 Load module u3g...ERROR(1)!
20110505_141721 Check ready(start) PPP(itc):Fatal ERROR(11)!
20110505_141721 Check ready(start) PPP(itc):Fatal ERROR(10)(device "/dev/cuaU0.0", modem "Novatel Wireless CDMA Novatel Wireless Inc.[0.2(0.1)]ON")!
20110505_141721 PPPSS:DialUP "itc" start...ERROR(10) Device not ready!
setfib: 1: invalid FIB (max 0)
setfib: 2: invalid FIB (max 0)
setfib: 3: invalid FIB (max 0)
setfib: 4: invalid FIB (max 0)
20110505_141721 ONLINE ERR 0 80

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение skeletor » 2011-05-05 14:32:39

Изменил в конфиге строки:

Код: Выделить всё

ADDITIONAL_ACT=""
modules=""
вроде бы пока работает. Буду наблюдать. FreeBSD 8.1 i386

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Скрипт проверки и восстановления канала через PPP

Непрочитанное сообщение kpp » 2011-05-05 17:30:35

Все можно, просто я сечас в отпуске, типа, могу не сразу ответить ;)
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.