Страница 1 из 1

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

Добавлено: 2011-04-22 23:48:34
kpp
Имеется 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

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

Добавлено: 2011-04-23 9:39:12
kpp
Модем может быть любой, версия FreeBSD любая, однако с 8.х есть возможность программно передернуть USB модем, если подвис.

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

Добавлено: 2011-04-23 12:28:02
kpp
Пример конфигурационного файла 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

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

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

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

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

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

Добавлено: 2011-04-24 20:28:59
kpp
Готова новая версия скрипта.
Отвязался от жесткой привязки к сетевому интерфейсу.
Осталось придумать как реализовать проверку на использование устройства (/dev/cuaU0.0 например) кем-то и кем.
Приглашаю добровольцев-комсомольцев потестить на разных версиях Фри и на разных модемах.

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

Добавлено: 2011-04-25 21:11:57
kpp
Протестировал на
FreeBSD 8.2,
модемах:
Novatel U760
Huawei EC168
Sierra Wireless Compass 597
Полет нормальный.

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

Добавлено: 2011-04-26 10:01:22
skeletor
У меня 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: типа программно погасить можно, а потом включить нельзя.

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

Добавлено: 2011-04-26 10:27:36
kpp
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:

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

Добавлено: 2011-04-26 10:58:37
skeletor
А где вы нашли эти опции set_config ? В мане нету. Видимо ман собрали с версии 8.0

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

Добавлено: 2011-04-26 11:09:37
kpp

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

Добавлено: 2011-04-26 11:42:27
skeletor
Что-то у меня не хочет работать :( 8.1 Пробую пока делать всё вручную, отключаю, подключаю, потом запускаю ppp.

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

Добавлено: 2011-04-26 11:47:51
skeletor
Ссори, всё заработало. Просто вместо root-huba я передёргивал порт модема :)

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

Добавлено: 2011-04-26 13:27:37
kpp
2 skeletor
:smile: я наступил на теже грабли
Просьба потестить скрипт из первого поста :oops:
Особенно на 8.1, если есть.
На 8.1 тоже работает set_config ??

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

Добавлено: 2011-04-26 13:36:04
kpp
Я исходил из того, чтобы передернуть ЮСБ
в 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

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

Добавлено: 2011-04-26 13:53:17
skeletor
kpp писал(а):2 skeletor
На 8.1 тоже работает set_config ??
Вручную работает вот так:

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

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

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

Добавлено: 2011-04-26 14:59:57
kpp
2 skeletor
И какой эффект, если не делать перед этим power_off ? :smile:

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

Добавлено: 2011-04-26 15:16:52
skeletor
Никакого, а что должно быть?

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

Добавлено: 2011-04-26 15:18:53
kpp
Если перед этим сделать

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

power_off
Устройство должно включиться

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

Добавлено: 2011-04-27 9:50:59
skeletor
Чуть позже попробую протестировать скрипт.

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

Добавлено: 2011-05-05 9:50:20
skeletor
Дошли руки до тестирования. Можно краткую инструкцию по настройке :) ?

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

Добавлено: 2011-05-05 14:18:46
skeletor

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

#/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

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

Добавлено: 2011-05-05 14:32:39
skeletor
Изменил в конфиге строки:

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

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

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

Добавлено: 2011-05-05 17:30:35
kpp
Все можно, просто я сечас в отпуске, типа, могу не сразу ответить ;)