Проблема была ещё на FreeBSD 7.1. Обновился к FreeBSD 8.0 - проблема осталась.uname -a
FreeBSD ServerName 8.0-RELEASE-p4 FreeBSD 8.0-RELEASE-p4 #0: Mon Jul 12 20:22:27 UTC 2010 root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC i386Суть проблемы. Имеется туннель с Укртелекомом. Время от времени туннель зависает: не проходят пинги, хотя интерфейс tun0 вроде как числится "UP" и ай-пи адрес не теряет. Написал скрипт, который по CRON-у запускается ежеминутно и проверяет несколькими пингами, жив ли туннель. Если не жив, то перезапускает демон PPP:
/etc/rc.d/ppp restart
(это ещё делалось на FreeBSD 7.1)
Скрипт работает до определённого специфического момента, в результате которого интерфейс tun0 висит, и поднимается новый туннель - tun1! Но поскольку правила Packet Filter привязаны к tun0, то интернет у пользователей не работает. В данном случае помогает либо повторный (несколько раз) перезапуск демона PPP либо перезапуск сервера. (но проблема в том, что скрипт "думает", что туннель работает, т. к. пинги с сервера в интернет - идут).
Пробовал делать так:
/etc/rc.d/ppp stop
sleep 5
/etc/rc.d/ppp startтак:
/killall ppp
sleep 5
/etc/rc.d/ppp startтак:
p=`cat '/var/run/tun0.pid'`
/bin/kill -9 ${p}
/sbin/ifconfig tun0 destroy
sleep 2
/etc/rc.d/ppp startдобавлял в /etc/rc.conf:
ppp_unit="0"Ничего не помогло: приходит момент, и tun0 висит как вкопанный, а tun1 услужливо показывает, что он работает.
Как вдолбить демону PPP, что tun0 нужно прибить, а потом поднять его заново?
>[оверквотинг удален]
> /bin/kill -9 ${p}
> /sbin/ifconfig tun0 destroy
> sleep 2
> /etc/rc.d/ppp start
> добавлял в /etc/rc.conf:
> ppp_unit="0"
> Ничего не помогло: приходит момент, и tun0 висит как вкопанный, а tun1
> услужливо показывает, что он работает.
> Как вдолбить демону PPP, что tun0 нужно прибить, а потом поднять его
> заново?можно попробовать "убивать" (команда destroy) интерфейс до перезапуска ppp
можно попробовать переименовывать интерфейс
>[оверквотинг удален]
> /bin/kill -9 ${p}
> /sbin/ifconfig tun0 destroy
> sleep 2
> /etc/rc.d/ppp start
> добавлял в /etc/rc.conf:
> ppp_unit="0"
> Ничего не помогло: приходит момент, и tun0 висит как вкопанный, а tun1
> услужливо показывает, что он работает.
> Как вдолбить демону PPP, что tun0 нужно прибить, а потом поднять его
> заново?а ppp-то чем реализован? в poptop имеются опции для периодического пинга. в mpd(?) для фрии это тоже должно быть. это просто часть протокола (LCP)..
внешний-то скрипт зачем вообще?
ppp реализован стандартным демоном "ppp".
Уменьшил частоту проверок с перезапуском до 2 раз в минуту (до этого было 4). Вроде как пока не виснет. Видимо в результате каких-то отклонений в таймере цикла возникали коллизии: скрипт делал перезапуск демона, а в это время начинал работу следующий экземпляр скрипта.
в линухе отслеживаю через скрипт
/etc/ppp/ip-up.local
когда поднимается, туда в параметрах и имя ppp кидается и IP и имя соединения/IP