adsl club

Справочник

Форум

Программы

Фильмы

Ресурсы

Файлообмен

Хостинг

Ростелеком
FreeBSD 9.3 Автоматическое восстановление PPPoE сессии
На страницу 1 2
Ответить на тему    Форум АДСЛ КлубаЦИФРОВОЙ ФЛЕЙМ :)*NIX OS
Автор Сообщение
Plaguer
Эксперт
СообщениеДобавлено: Ср 1-03-17 : 14-42    Заголовок сообщения: FreeBSD 9.3 Автоматическое восстановление PPPoE сессии Ответить с цитатой

Привет всем.
Есть шлюз, FreeBSD 9.3-RELEASE. На него заведён патчкорд из оптического терминала Ростелекома, терминал настроен бриджем (переводить в роутер - не вариант, это отдельная больная тема), ppp-соединение поднимается фряхой:
/etc/ppp/ppp.conf:
Нажмите сюда, чтобы просмотреть текст

Код:
#################################################################
# PPP  Sample Configuration File
# Originally written by Toshiharu OHNO
# Simplified 5/14/1999 by wself@cdrom.com
#
# See /usr/share/examples/ppp/ for some examples
#
# $FreeBSD: releng/9.3/etc/ppp/ppp.conf 203943 2010-02-16 01:07:06Z jkim $
#################################################################


default:
    set device PPPoE:em1
    set speed sync
    set mru 1492
    set mtu 1492
    enable lqr
    set ctsrts off
    set timeout 0
    set redial 5 10000
    set reconnect 10 10000

rtc:
    set authname login
    set authkey password
    add default HISADDR


Проблема в том, что возможны разрывы ppp-сессии, на этот случай предусмотрен скрипт pppchk.sh, выполняемый каждую минуту и призванный восстановить ppp-коннект в случае разрыва.
pppchk.sh:
Нажмите сюда, чтобы просмотреть текст

Код:
#!/bin/sh

a=5;
d=`/usr/bin/env TZ=UTC-7 /bin/date "+%b %d %T"`;

#пингуем 8.8.8.8
pings=`/sbin/ping -c $a 8.8.8.8 | /usr/bin/grep -c "ttl"`

#если получаем ответ >= 2 пингам, то ничего не делаем
if [ "$pings" -ge "2" ]; then
echo "$d ppp is OK!" >> /dev/null

#иначе убиваем процессы ppp, убиваем его интерфейс tun0, ждём 5 сек и поднимаем сессию заного
else

/usr/bin/killall ppp
/bin/kill -9 `cat /var/run/tun0.pid`
/sbin/ifconfig tun0 destroy

sleep 5

/usr/sbin/ppp -ddial rtc
/bin/echo "$d ppp connection has been reset" >> /var/log/messages

fi


Суть проблемы в том, в скрипте отрабатывает всё, кроме получения маршрута по умолчанию. Почему так происходит до меня не доходит.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
Evarist
Форумчанин
СообщениеДобавлено: Ср 1-03-17 : 15-10    Заголовок сообщения: Ответить с цитатой

Зачем ты моего друга пилишь ?! Ему же больно ! (c)фильм "Апрель"

В области BSD-шного ppp периодически возникают баги.
История этого бага описана здесь - надо патчить route.c и пересобирать ядро и мир:
http://forum.lissyara.su/viewtopic.php?t=40166

Ну и по мелочи - если это единственный процесс ppp на узле, то можно многое упростить -
1) killall -9 ppp (без поиска pida)
2) гарантированно привязать ppp к tun0 можно на запуске - добавить флажок ppp -ddial -unit0 rtc
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
Plaguer
Эксперт
СообщениеДобавлено: Ср 1-03-17 : 15-34    Заголовок сообщения: Ответить с цитатой

Evarist писал(а):
гарантированно привязать ppp к tun0 можно на запуске - добавить флажок ppp -ddial -unit0 rtc

Хорошая идея. А как это в rc.conf запилить? Сейчас там есть только:
ppp_mode="ddial"
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
Evarist
Форумчанин
СообщениеДобавлено: Ср 1-03-17 : 15-56    Заголовок сообщения: Ответить с цитатой

Не нашел такого.
Похоже что для этого надо править /etc/rc.d/ppp следующим образом:

В конец к
# Check for hard wired unit
eval _ppp_unit=\$ppp_${_ppp_profile_cleaned}_unit
if [ -n "${_ppp_unit}" ]; then
_ppp_unit="-unit${_ppp_unit}"
fi
добавить что-то вроде
if [ -z "${_ppp_unit}" ]; then
_ppp_unit="-unit${$ppp_unit}"
fi

тогда можно будет писать в rc.conf
ppp_unit="0"

Но в работе не проверял, сейчас набросал - может быть ошибка.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
Evarist
Форумчанин
СообщениеДобавлено: Ср 1-03-17 : 15-57    Заголовок сообщения: Ответить с цитатой

форматирование поехало Sad
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
ДобрыйФей
Мечтатель
Предупреждений : 5
СообщениеДобавлено: Ср 1-03-17 : 16-02    Заголовок сообщения: Ответить с цитатой

Как-то сложно у вас в Фряхе все.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
nethello
Гуру
СообщениеДобавлено: Ср 1-03-17 : 16-06    Заголовок сообщения: Ответить с цитатой

ДобрыйФей писал(а):
Как-то сложно у вас в Фряхе все.

То ли дело Linux Mint. Very Happy
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение Отправить e-mail  
ДобрыйФей
Мечтатель
Предупреждений : 5
СообщениеДобавлено: Ср 1-03-17 : 16-45    Заголовок сообщения: Ответить с цитатой

В Линуксе pppd умеет сам детектить и переподнимать развалившуюся сессию.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
Evarist
Форумчанин
СообщениеДобавлено: Ср 1-03-17 : 16-54    Заголовок сообщения: Ответить с цитатой

Это всё и в FreeBSD есть (см. присланный топикстартером конфиг). Речь не совсем про это.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
ДобрыйФей
Мечтатель
Предупреждений : 5
СообщениеДобавлено: Ср 1-03-17 : 17-51    Заголовок сообщения: Ответить с цитатой

Evarist писал(а):
Это всё и в FreeBSD есть (см. присланный топикстартером конфиг).
Цитата:
на этот случай предусмотрен скрипт pppchk.sh, выполняемый каждую минуту и призванный восстановить ppp-коннект в случае разрыва
Нет, я понимаю, что скрипты с костылями везде есть, но...
По проблеме с маршрутом - в pppd скрипт дергается при поднятии/исчезновении интерфейса, параметры передаются через переменные окружения, делай, что хочешь.
Ну вы все в курсе наверняка.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
Evarist
Форумчанин
СообщениеДобавлено: Ср 1-03-17 : 19-37    Заголовок сообщения: Ответить с цитатой

После исправления патчем одной конкретно баги необходимость контролировать скриптом жизнь ppp будет очень небольшая. Но иногда все-таки бывает необходимость передернуть его.

Для Plaguer: По поводу автостарта ppp с нужными параметрами - вместо модификации  /etc/rc.d/ppp можно сделать свой скрипт в /usr/local/etc/rc.d - так будет правильнее, в этом случае он сохранится при обновлении базовой системы.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
k0stE
Гуру
СообщениеДобавлено: Ср 1-03-17 : 21-43    Заголовок сообщения: Ответить с цитатой

ДобрыйФей писал(а):
По проблеме с маршрутом - в pppd скрипт дергается при поднятии/исчезновении интерфейса

/etc/ppp/ip-up.d "отсюда" хуки имеешь ввиду?
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
Plaguer
Эксперт
СообщениеДобавлено: Ср 1-03-17 : 21-45    Заголовок сообщения: Ответить с цитатой

Evarist
Т.е. можно просто положить файл скажем, с именем pppup.sh с содержимым:
Код:
/usr/sbin/ppp -ddial -unit0 rtc

В папку /usr/local/etc/rc.d
Сделать ему chmod 711
И всё? Smile
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
Evarist
Форумчанин
СообщениеДобавлено: Ср 1-03-17 : 22-28    Заголовок сообщения: Ответить с цитатой

Да, но в самом файле pppup.sh надо сделать "развилку" case/esac, так как данный файл будет запускаться дважды - с параметером start при загрузке системы и с параметром stop при выключении системы/.

Код:

#!/bin/sh
case $1 in
        start)
             /usr/sbin/ppp -ddial -unit0 rtc
            ;;
        stop)
            killall -9 ppp
            ;;
        *)
            ;;
esac
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
ДобрыйФей
Мечтатель
Предупреждений : 5
СообщениеДобавлено: Ср 1-03-17 : 23-04    Заголовок сообщения: Ответить с цитатой

k0stE писал(а):
/etc/ppp/ip-up.d "отсюда" хуки имеешь ввиду?
Я не знаю, как в Фряхе, но что-то типа того. Интерфейс туда должен передаваться, дефолтный маршрут тоже.
За сессией pppd следит сам по обмену служебными пакетами, интервалы и контрольное количество настраиваются, переподнятие тоже через какую-то опцию указывается.
Повторюсь, не знаю, как в Фряхе, но сильно отличаться не должно, если только там не написали своего демона со своими костылями.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
ДобрыйФей
Мечтатель
Предупреждений : 5
СообщениеДобавлено: Ср 1-03-17 : 23-06    Заголовок сообщения: Ответить с цитатой

Evarist писал(а):
killall -9 ppp
Плохой путь. PADT встречной стороне не уйдет, а по-хорошему должен. Лучше
Код:
killall ppp; sleep 3; killall -9 ppp
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
Evarist
Форумчанин
СообщениеДобавлено: Ср 1-03-17 : 23-24    Заголовок сообщения: Ответить с цитатой

ДобрыйФей писал(а):
k0stE писал(а):
/etc/ppp/ip-up.d "отсюда" хуки имеешь ввиду?

Повторюсь, не знаю, как в Фряхе, но сильно отличаться не должно, если только там не написали своего демона со своими костылями.

Все гораздо хуже - в FreeBSD это userspace ppp Trollface

Но там есть аналогичные штучки - /etc/ppp/ppp.linkup и /etc/ppp/ppp.linkdown - инструкции из них выпоняются при поднятии/опускании ppp-интерфейса. Однако в случае топикстартера никаких особых нужд в данных файлах нет.

А про отсылку PADT - это вы хорошо заметили, надо заботиться о провайдере Ищи выше
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
zmeeed
Эксперт
СообщениеДобавлено: Чт 2-03-17 : 00-25    Заголовок сообщения: Ответить с цитатой

нихрена не понимаю. Есть фряха я её не люблю, но продолжу с ней ебститсь ибо "У НАС ВСЕГДА ТАК БЫЛО", но категорически отвергаю вариант - поднимаю линух, в котором люблю, запускаю сервисы, прописываю конфиги, перетыкаю пачкорды и радуюсь дальше. ТАК!!!
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение Jabber ID Номер ICQ
Plaguer
Эксперт
СообщениеДобавлено: Чт 2-03-17 : 10-12    Заголовок сообщения: Ответить с цитатой

А не лучше ли так:
Код:
#!/bin/sh
case $1 in
        start)
             /usr/sbin/ppp -ddial -unit0 rtc
            ;;
        stop)
            /etc/rc.d/ppp stop
            ;;
        *)
            ;;
esac

Где строка /etc/rc.d/ppp stop всё корректно завершает.
В скрипте путь к скрипту, это норма?
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
Evarist
Форумчанин
СообщениеДобавлено: Чт 2-03-17 : 16-25    Заголовок сообщения: Ответить с цитатой

Нет. Либо использовать записи в /etc/rc.conf (тогда /etc/rc.d/ppp будет подключаться автоматически), либо не использовать записи о ppp в /etc/rc.conf и делать всё самостоятельно через /usr/local/etc/rc.d.

Не надо одновременно смешивать оба метода.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
Показать сообщения:   
Ответить на тему    Форум АДСЛ КлубаЦИФРОВОЙ ФЛЕЙМ :)*NIX OS Часовой пояс: GMT + 7
На страницу 1 2
Страница 1 из 2

 

 
Аватары: Вкл|Выкл   ЮзерИнфо: Вкл|Выкл   Подписи: Вкл|Выкл
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы