Страница 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 - это корневой юсб-концентратор, на котором висит интересующий нас порт.
В принципе, можно было обойтись и
, но при этом прерывается выполненеие всех процессов, в названии которых встречается "ppp", ну и такой вариант совсем не подходит при одновременном использовании нескольких PPP-сессий.
Скрипт рабочий(не так много тестированный, правда

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

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

я наступил на теже грабли
Просьба потестить скрипт из первого поста

Особенно на 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 ?

Re: Скрипт проверки и восстановления канала через PPP
Добавлено: 2011-04-26 15:16:52
skeletor
Никакого, а что должно быть?
Re: Скрипт проверки и восстановления канала через PPP
Добавлено: 2011-04-26 15:18:53
kpp
Если перед этим сделать
Устройство должно включиться
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
Изменил в конфиге строки:
вроде бы пока работает. Буду наблюдать. FreeBSD 8.1 i386
Re: Скрипт проверки и восстановления канала через PPP
Добавлено: 2011-05-05 17:30:35
kpp
Все можно, просто я сечас в отпуске, типа, могу не сразу ответить
