Проблема была ещё на 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 нужно прибить, а потом поднять его заново?