Get Adobe Flash player
    Принимаются SMS-пожертвования на развитие ресурса     Копирование материалов     разрешено с обязательной ссылкой     на этот сайт     Принимаются SMS-пожертвования на развитие ресурса    

Контроль зависания и автоматическая перезагрузка ADSL модема при дисконнекте

Причиной зависания может быть включённый UPnP, старая прошивка, переполнение таблиц маршрутизации или таблиц NAT, перегрев и т.д. Отключение UPnP, настройка автоматического завершения и возобновления сессии PPPoE соединения и прошивка модема последней версией firmware, конечно, снижают частоту зависаний, но не снимают проблему полностью. Решение задачи состоит в том, чтобы программно или при помощи управляемой розетки перезагружать модем по питанию в зависимости от результатов периодически выполняемого скрипта проверки интернет-соединения.

 

LPT управляемая розетка «LPT-watchdog»

Эта управляемая розетка подключается напрямую к LPT порту компьютера. К одному компьютеру может быть подключена только одна такая розетка.

Отличается от обычной управляемой розетки тем, что для ее подключения не требуется покупка LPT-кабеля. Плюсы данного решения в том, что повышается надежность работы за счет минимизации соединений и контактных групп в цепи управления розеткой, а также снижается цена по сравнению с ценой набора «LPT управляемая розетка + LPT-кабель». Единственный минус данного решения состоит в том, что к компьютеру можно подключить только одну управляемую розетку.

Купить можно в магазинах и интернет.

Опытный специалист может изготовить самостоятельно такое устройство по схеме аналогичной твердотельному реле:

Программная перезагрузка модема и ее недостатки

Системный администратор ОС Linux вполне может обойтись написанием скрипта или простой программы для подсоединения к модему при потере соединения с Интернетом по протоколу telnet и перезагрузки командой reboot примерно так (некоторые ожидаемые командой expect строки придется поправить руками — модем может отвечать на telnet запросы несколько иначе):

#!/bin/sh

WATCHED_IP="www.ru"
MODEM_IP="192.168.1.1"
USERNAME="admin"
PASSWORD=""

# watch for remote host
ping -q -c 1 "$WATCHED_IP" > /dev/null    && exit
# exit if modem is down
ping -q -c 1 "$MODEM_IP" > /dev/null      || exit

expect - << EOF
set send_slow {1 .1}
spawn /usr/bin/telnet "$MODEM_IP"
expect -exact "ADSL Router"
expect -exact "Login: "
send -s -- "$USERNAME\r"
expect -exact "Password:"
send -s -- "$PASSWORD\r"
expect -exact "> "
send -s "reboot\r"
expect -exact "The system shell is being reset. Please wait..."
exit
EOF

Не забудьте заменить IP адрес модема, имя пользователя и пароль в скрипте на параметры, соответствующие реальности.  Этот скрипт сохраняется в файл и ставится при помощи cron на исполнение каждые 3-15 минут.

Аппаратная перезагрузка модема в ОС Linux

Скрипт для Linux использует штатные средства ОС для работы с LPT портом (модуль pyparallel). Создаем скрипт как в варианте с перезагрузкой через интерфейс, но заменяем инструкции telnet на команды управления LPT:

#!/bin/sh

WATCHED_IP="www.ru"
# watch for remote host
ping -q -c 1 "$WATCHED_IP" > /dev/null    && exit
rmmod lp
modprobe ppdev
python
import parallel, time
p = parallel.Parallel()     # open LPT1
p.setData(0x00)
time.sleep(3)
p.setData(0x01)
quit()
EOF

Для работы этого скрипта нужен Python и pyparallel.