Автор |
Сообщение |
Plaguer Эксперт |
|
Привет всем.
Есть шлюз, 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 Форумчанин |
|
Зачем ты моего друга пилишь ?! Ему же больно ! (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 Эксперт |
|
Evarist писал(а): |
гарантированно привязать ppp к tun0 можно на запуске - добавить флажок ppp -ddial -unit0 rtc |
Хорошая идея. А как это в rc.conf запилить? Сейчас там есть только:
ppp_mode="ddial" |
|
|
|
|
Evarist Форумчанин |
|
Не нашел такого.
Похоже что для этого надо править /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 Форумчанин |
|
форматирование поехало |
|
|
|
|
ДобрыйФей Мечтатель Предупреждений : 5
|
|
Как-то сложно у вас в Фряхе все. |
|
|
|
|
nethello Гуру |
|
ДобрыйФей писал(а): |
Как-то сложно у вас в Фряхе все. |
То ли дело Linux Mint. |
|
|
|
|
ДобрыйФей Мечтатель Предупреждений : 5
|
|
В Линуксе pppd умеет сам детектить и переподнимать развалившуюся сессию. |
|
|
|
|
Evarist Форумчанин |
|
Это всё и в FreeBSD есть (см. присланный топикстартером конфиг). Речь не совсем про это. |
|
|
|
|
ДобрыйФей Мечтатель Предупреждений : 5
|
|
Evarist писал(а): |
Это всё и в FreeBSD есть (см. присланный топикстартером конфиг). |
Цитата: |
на этот случай предусмотрен скрипт pppchk.sh, выполняемый каждую минуту и призванный восстановить ppp-коннект в случае разрыва |
Нет, я понимаю, что скрипты с костылями везде есть, но...
По проблеме с маршрутом - в pppd скрипт дергается при поднятии/исчезновении интерфейса, параметры передаются через переменные окружения, делай, что хочешь.
Ну вы все в курсе наверняка. |
|
|
|
|
Evarist Форумчанин |
|
После исправления патчем одной конкретно баги необходимость контролировать скриптом жизнь ppp будет очень небольшая. Но иногда все-таки бывает необходимость передернуть его.
Для Plaguer: По поводу автостарта ppp с нужными параметрами - вместо модификации /etc/rc.d/ppp можно сделать свой скрипт в /usr/local/etc/rc.d - так будет правильнее, в этом случае он сохранится при обновлении базовой системы. |
|
|
|
|
k0stE Гуру |
|
ДобрыйФей писал(а): |
По проблеме с маршрутом - в pppd скрипт дергается при поднятии/исчезновении интерфейса |
/etc/ppp/ip-up.d "отсюда" хуки имеешь ввиду? |
|
|
|
|
Plaguer Эксперт |
|
Evarist
Т.е. можно просто положить файл скажем, с именем pppup.sh с содержимым:
Код: |
/usr/sbin/ppp -ddial -unit0 rtc |
В папку /usr/local/etc/rc.d
Сделать ему chmod 711
И всё? |
|
|
|
|
Evarist Форумчанин |
|
Да, но в самом файле pppup.sh надо сделать "развилку" case/esac, так как данный файл будет запускаться дважды - с параметером start при загрузке системы и с параметром stop при выключении системы/.
Код: |
#!/bin/sh
case $1 in
start)
/usr/sbin/ppp -ddial -unit0 rtc
;;
stop)
killall -9 ppp
;;
*)
;;
esac
|
|
|
|
|
|
ДобрыйФей Мечтатель Предупреждений : 5
|
|
k0stE писал(а): |
/etc/ppp/ip-up.d "отсюда" хуки имеешь ввиду? |
Я не знаю, как в Фряхе, но что-то типа того. Интерфейс туда должен передаваться, дефолтный маршрут тоже.
За сессией pppd следит сам по обмену служебными пакетами, интервалы и контрольное количество настраиваются, переподнятие тоже через какую-то опцию указывается.
Повторюсь, не знаю, как в Фряхе, но сильно отличаться не должно, если только там не написали своего демона со своими костылями. |
|
|
|
|
ДобрыйФей Мечтатель Предупреждений : 5
|
|
Evarist писал(а): |
killall -9 ppp |
Плохой путь. PADT встречной стороне не уйдет, а по-хорошему должен. Лучше
Код: |
killall ppp; sleep 3; killall -9 ppp |
|
|
|
|
|
Evarist Форумчанин |
|
ДобрыйФей писал(а): |
k0stE писал(а): |
/etc/ppp/ip-up.d "отсюда" хуки имеешь ввиду? |
Повторюсь, не знаю, как в Фряхе, но сильно отличаться не должно, если только там не написали своего демона со своими костылями. |
Все гораздо хуже - в FreeBSD это userspace ppp
Но там есть аналогичные штучки - /etc/ppp/ppp.linkup и /etc/ppp/ppp.linkdown - инструкции из них выпоняются при поднятии/опускании ppp-интерфейса. Однако в случае топикстартера никаких особых нужд в данных файлах нет.
А про отсылку PADT - это вы хорошо заметили, надо заботиться о провайдере |
|
|
|
|
zmeeed Эксперт |
|
нихрена не понимаю. Есть фряха я её не люблю, но продолжу с ней ебститсь ибо "У НАС ВСЕГДА ТАК БЫЛО", но категорически отвергаю вариант - поднимаю линух, в котором люблю, запускаю сервисы, прописываю конфиги, перетыкаю пачкорды и радуюсь дальше. ТАК!!! |
|
|
|
|
Plaguer Эксперт |
|
А не лучше ли так:
Код: |
#!/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 Форумчанин |
|
Нет. Либо использовать записи в /etc/rc.conf (тогда /etc/rc.d/ppp будет подключаться автоматически), либо не использовать записи о ppp в /etc/rc.conf и делать всё самостоятельно через /usr/local/etc/rc.d.
Не надо одновременно смешивать оба метода. |
|
|
|
|
|