Назад | Перейти на главную страницу

sysRestart Billion ADSL router (SNMP v2 или HTTP)

Задний план

Я привык перезагружать свои серверы по расписанию. Теперь я хочу то же самое для моего ADSL-роутера.

Это моя причина: когда происходит случайный сбой, я обычно пытаюсь перезагрузить серверы, интерфейсы и связанное оборудование (если возможно) в качестве первого шага перед любым другим устранением неполадок (например, изменение конфигурации и т. Д.). На самом деле бывают случаи, когда это решает проблему (служба начинает работать должным образом). Это может быть связано с тем, что, когда система находится в рабочем состоянии долгое время (иногда, в зависимости от программного обеспечения и служб), она может перестать отвечать или работать с ошибками. Возможно, программное обеспечение не может освободить часть памяти, разблокировать некоторые ресурсы и т. Д.

Теперь для некоторых служб, время простоя которых приемлемо в нерабочее время, я планирую автоматический перезапуск. Таким образом, проблемы такого типа возникают реже. И теперь, если проблема возникает в рабочее время, мне не нужно перезапускать всю службу, вместо этого я возобновлю устранение неполадок, как после того, как перезапустил их.

Что мы имеем

Это маршрутизатор серии Billion 5000, поддерживающий TELNET, HTTP и SNMP для управления.

Метод Telnet (обновлено)

Роутер можно перезагрузить с помощью команды telnet:

C:\>telnet 192.168.1.1
    Password:********
    router>set reboot

Так близко, просто нужен скрипт, который автоматически устанавливает телетайпы, вставляет символы пароля и выдает 'установить перезагрузкукоманда. [Подход использования ожидать предложено SvenW]

HTTP метод

Приятно отметить, что я использую программное обеспечение[1] для мониторинга скорости моего ADSL-соединения и запаса помехоустойчивости через HTTP-интерфейс (само программное обеспечение, а не приложение браузера, подключается, регистрируется автоматически и считывает значения из HTTP-интерфейса и отображает их на графике!).

Интересно, можно ли добиться SysRestart с помощью аналогичного подхода (сценарий, который автоматически входит в систему и нажимает кнопку SysRestart!)

Страница перезапуска:

Метод SNMP

Маршрутизатор также поддерживает сообщества чтения и записи SNMP v2. Я подумал, что можно было бы так сделать.

Фактически, поиском я нашел[2], что некоторые люди используют SNMP для перезапуска своих устройств (но я не могу найти OID, который мой маршрутизатор мог бы передать для выполнения сброса)

Например, похоже, что те, у кого есть одно из этих устройств, могут перезагрузить их, используя эти OID:

'.1.3.6.1.4.1.207.8.4.4.3.2.0',    # Allied Telesyn restart
'.1.3.6.1.4.1.11.2.14.11.1.4.1.0', # Hewlett-Packard hpicfReset
'.1.3.6.1.4.1.9.5.1.1.9.0',        # Cisco CatOS sysReset
'.1.3.6.1.4.1.9.2.9.9.0',          # Cisco IOS tsMsgSend
'.1.3.6.1.4.1.529.9.8.0.0'         # Ascend sysReset

SNMP Walk

Используя SNMP walk, я смог получить список из более чем пятисот OID, таких как:

.1.3.6.1.4.1.16972.5.1.1.0
.1.3.6.1.4.1.16972.4.10.0
...etc (568 more)...

Но в настоящее время я не знаю, как мне выбрать один из них (особенно боялся тестировать на них snmp-write!).

Дополнительная информация

Некоторые другие (пройденные) OID и значения, которые могут помочь:

.1.3.6.1.4.1.16972.1.3.0; Trendchip TC3162 T14F7_3.0
.1.3.6.1.4.1.16972.5.1.1.0; www.huawei.com
.1.3.6.1.4.1.16972.1.6.0; Ras Ver:2.10.4.0(UE0.C2C)3.6.0.0   DMT Ver:3.6.0.0

Как ты можешь помочь?

Сноски:

Без надлежащего файла MIB для SNMP лучше всего найти команду telnet, которая выполняет перезапуск, и, возможно, использовать ее с помощью expect инструмент или использовать что-то вроде curl использовать веб-интерфейс.

Использование curl может потребовать нескольких вызовов для первого входа в систему и сохранения файлов cookie сеанса, а затем для фактического перезапуска.

Мне все же интересно - есть ли у вас настоящая проблема с устройством, которое вы пытаетесь исправить с помощью обычного перезапуска? Если нет, то я не вижу причин для этого.

Редактировать:

Базовый пример сценария ожидания. Назовите это с scriptname hostname password или измените назначения переменных, чтобы они содержали фактическое имя хоста и пароль:

#!/usr/bin/expect 

set timeout 15
set hostname [lindex $argv 0] 
set password [lindex $argv 1] 

spawn telnet $hostname 

expect "Password:" 
send "$password " 
expect "router>" 
send "set reboot "