Запуск и удержание интернета

(Оригинал написан для linuxetc.ru) Тем, кто использует pppd для получения интернета через pptp или ppoe, наверняка знакома ситуация, когда, несмотря на опции persist и maxfile, соединение исчезает и не восстанавливается. Для таких тяжелых случаев я применяю следующую систему.

Настройка интернета через pptp

Интернет от провайдера я получаю через pptp.
emerge pptp
в /etc/conf.d/net следующее:
config_ppp0=( "ppp" ) username_ppp0='ww' password_ppp0='xxxx' pppd_ppp0=( "lock" "asyncmap 0" "crtscts" "defaultroute" "debug" "persist" "noauth" "nobsdcomp" "nodeflate" "require-mppe" "lcp-echo-failure 10" "lcp-echo-interval 10" )
Сразу после поднятия сетевого интерфейса отрабатывается /etc/ppp/p-up.local:
#!/bin/bash if [ $1 == "ppp0" ]; then # это роутинг в мою локалку мимо ppp0 route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.5.7 route del default # 82.138.52.137 -- remote ip в ppp0 туннеле. route add default gw 82.138.52.137 ppp0 fi;
После опускания, соответственно, /etc/ppp/p-down.local:
#!/bin/bash if [ $1 == "ppp0" ]; then route del default gw 82.138.52.137 ppp0 fi;
Финальная часть настройки самого интернета:
ln -s /etc/init.d/net /etc/init.d/net.ppp0

Запуск и удержание интернета

Скрипт /usr/local/sbin/check_internet:
#!/bin/bash # проверяем, не запущен ли другой экземпляр скрипта... [ -z $CRONTAB ] && echo "Проверка на дубль" [[ "2" -ne `ps aux | grep -c check_internet` ]] && exit # проверяем наличие интернета -- пытаемся получитьь страницу ya.ru [ -z $CRONTAB ] && echo "Проверка интернета" if [[ 0 < `wget --quiet --timeout=10 --tries=2 -O - ya.ru| grep -c 'http://www.yandex.ru/yandsearch'` ]]; then exit fi # насколько можно судить, в этот момент интернета нет /usr/local/sbin/restart_internet
...проверка [ -z $CRONTAB ] в скрипте служит для вывода сообщений при запуске из комстроки. Скрипт /usr/local/sbin/restart_internet:
#!/bin/bash # полный останов всех сетевых служб /usr/sbin/vserver mainvshost stop /etc/init.d/ipsec stop /etc/init.d/ipsec zap # бывает, что "залипает" в started статусе... /sbin/ifconfig ipsec0 down /etc/init.d/heartbeat stop /etc/init.d/drbd stop /etc/init.d/net.ppp0 stop /usr/bin/killall -9 pppd sleep 5 #начинаем поднимать обратно... /etc/init.d/net.ppp0 start sleep 20 if [[ 0 == `/sbin/route -n|grep -c ppp0` ]]; then echo "Неудача..." exit fi # насколько можно судить, в этот момент ppp0 нормально поднялся
Выдержка из crontab -l :
CRONTAB=1 */1 * * * * /usr/local/sbin/check_internet