Отключение интерфейсов Cisco по SNMP






            Иногда есть необходмимость отключить интерфейс маршрутизатора cisco не заходя на него, тобишь удаленно.
            Это можно сделать несколькими способами: используя скрипты отключать по telnet (но это не безопасно, та как пароль передается в открытом виде), также можно воспользоваться утилитой rsh (но для этого нужно сделать определенные настройки
на самом роутере), также можно отключать интерфейсы по ssh, используя для этого консольную утилиту plink, также еще можно отключать интрфейсы маршрутизатора по протоколу snmp, именно о таком способе отключения и пойдет речь в данной
статье.

            Для настройки возможности использовать протокол SNMP для управления маршрутизатором необходимо в конфигурации маршрутизатора указать snmp community, примерно так - snmp-server community privat RW.
            Для возможности работы с протоколом SNMP с компьютеров под уплавлением Windows необходимо установить на компьютере пакет - Net-SNMP или пакет snmp - для Linux систем.
            Теперь можем отключать и включать интрерфейсы удаленно. Сначала необходмио узнать OID нужного интрфейса (его номер и состояние), это можно сделать сделующим способом:

Ввести в командной строке на удаленном компьютере команду:
            snmpwalk -On -v 2c -c privat X.X.X.X ifDescr                   выводит описание интерфейсов
            snmpwalk -On -v 2c -c privat X.X.X.X ifIndex                   выводит номер интерфейса
            snmpwalk -On -v 2c -c privat X.X.X.X ifAdminStatus      выводит состояние интерфейса

где X.X.X.X - ip адресс удаленного сервера

            Непосредвстенно само отключение производится сменой состояния статуса интерфейса следующей командой:

            snmpset -v 2c -c privat X.X.X.X ifAdminStatus.X i 2

            Включение интрфейса производится  следующей командой:

            snmpset -v 2c -c privat X.X.X.X ifAdminStatus.X i 1

            Где i - тип данных (INTERGER)
            X – номер интерфейса, зависит от модели маршрутизатора Cisco
            2 и 1 - состояния интерфейса (2-выключено, 1-включено)

            Для записи изменений в стартовую кофнигурацию маршрутизатора необходимо еще выполнить несколько команд:

            snmpset -v 2c -c privat X.X.X.X 1.3.6.1.4.1.9.9.96.1.1.1.1.14.111 i 6
            snmpset -v 2c -c privat X.X.X.X 1.3.6.1.4.1.9.9.96.1.1.1.1.3.111 i 4
            snmpset -v 2c -c privat X.X.X.X 1.3.6.1.4.1.9.9.96.1.1.1.1.4.111 i 3
            snmpset -v 2c -c privat X.X.X.X 1.3.6.1.4.1.9.9.96.1.1.1.1.14.111 i 1

            Итого для отключения интерфейса и записи изменения в старотвую конфигурацию необходимо выполнить слеюудющие команды:

            snmpset -v 2c -c privat X.X.X.X ifAdminStatus.X i 2
            snmpset -v 2c -c privat X.X.X.X 1.3.6.1.4.1.9.9.96.1.1.1.1.14.111 i 6
            snmpset -v 2c -c privat X.X.X.X 1.3.6.1.4.1.9.9.96.1.1.1.1.3.111 i 4
            snmpset -v 2c -c privat X.X.X.X 1.3.6.1.4.1.9.9.96.1.1.1.1.4.111 i 3
            snmpset -v 2c -c privat X.X.X.X 1.3.6.1.4.1.9.9.96.1.1.1.1.14.111 i 1

            Для включения интерфейса и записи изменения в старотвую конфигурацию необходимо выполнить слеюудющие команды:

            snmpset -v 2c -c privat X.X.X.X ifAdminStatus.X i 1
            snmpset -v 2c -c privat X.X.X.X 1.3.6.1.4.1.9.9.96.1.1.1.1.14.111 i 6
            snmpset -v 2c -c privat X.X.X.X 1.3.6.1.4.1.9.9.96.1.1.1.1.3.111 i 4
            snmpset -v 2c -c privat X.X.X.X 1.3.6.1.4.1.9.9.96.1.1.1.1.4.111 i 3
            snmpset -v 2c -c privat X.X.X.X 1.3.6.1.4.1.9.9.96.1.1.1.1.14.111 i 1


            Ввод данных команд можно автоматизировать, путем использования perl скрипта.
Для этого необходимо установить дополнительные пакеты: perl, libnet-snmp-perl.

            Ниже представлен пример скрпта для отключения интерфейса на маршуртизаторе Cisco:

#!/usr/bin/perl
use strict;
use warnings;
use Net::SNMP;

my $snmp_host = 'X.X.X.X'; # IP маршрутизатора
my $snmp_community = 'privat';
my $Tunnel0 = '1.3.6.1.2.1.2.2.1.7.X';
my $Tunnel1 = '1.3.6.1.2.1.2.2.1.7.X';
my $snmp_oid1 = '.1.3.6.1.4.1.9.9.96.1.1.1.1.14.111';
my $snmp_oid2 = '.1.3.6.1.4.1.9.9.96.1.1.1.1.3.111';
my $snmp_oid3 = '.1.3.6.1.4.1.9.9.96.1.1.1.1.4.111';
my $snmp_oid4 = '.1.3.6.1.4.1.9.9.96.1.1.1.1.14.111';
my $Off;
my $A;
my $B;
my $C;
my $D;

my $snmp_session;
my $snmp_error;
($snmp_session, $snmp_error) = Net::SNMP->session(
-hostname => $snmp_host,
-community => $snmp_community,
-version => 2,
) or die('Connect failed!');

$Off = 2; # для включения интрфейса необходимо поставить 1
$A = 6;
$B = 4;
$C = 3;
$D = 1;

my $Result0 = $snmp_session -> set_request(-varbindlist => [$Tunnel0, INTEGER,$Off],) or die('Request failed!');
my $Result1 = $snmp_session -> set_request(-varbindlist => [$Tunnel1, INTEGER,$Off],) or die('Request failed!');
my $Result2 = $snmp_session -> set_request(-varbindlist => [$snmp_oid1, INTEGER,$A],) or die('Request failed!');
my $Result3 = $snmp_session -> set_request(-varbindlist => [$snmp_oid2, INTEGER,$B],) or die('Request failed!');
my $Result4 = $snmp_session -> set_request(-varbindlist => [$snmp_oid3, INTEGER,$C],) or die('Request failed!');
my $Result5 = $snmp_session -> set_request(-varbindlist => [$snmp_oid4, INTEGER,$D],) or die('Request failed!');

print "OID $Tunnel0 updated to $Off\n";                        
print "OID $Tunnel1 updated to $Off\n";
   
$snmp_session -> close();


                Что бы использовать данный скрипт в своих целях, необходимо подставить только ip адресс Вашего марщрутизатора и правильный номер интрфейса в поле -  1.3.6.1.2.1.2.2.1.7.X (ifAdminStatus.X)

Евгений Дмитренко
http://efsol.ru/solutions/data-protection.html

Комментариев нет:

Отправить комментарий