Jump to content

Recommended Posts

Posted

Доброе время суток!

 

У меня есть скрипт который заходит telnet'ом на коммутаторы Linksys SPS224G4 и отправляет копию конфигурации на tftp сервер.

В последнее время было замечено что ряд коммутаторов перестал отдавать конфиг...

При попытке ручного копирования наткнулся на такую ошибку:

 

switch# copy startup-config tftp://XXX.XXX.XXX.XXX/20130301/switch
01-Mar-2013 17:30:25 %COPY-I-FILECPY: Files Copy - source URL flash://startup-config destination URL tftp://XXX.XXX.XXX.XXX/20130301/switch
01-Mar-2013 17:30:26 %TFTP-C-OPEN: No free UDP port

Copy: Can't open TFTP client 
01-Mar-2013 17:30:26 %COPY-W-TRAP: The copy operation has failed

switch#

 

При этом с части коммутаторов снялось уже около 200 копий, а некоторые перестали отдавать копии после 80 раз...

 

Как можно "полечить" без перезагрузки коммутатора?!

Posted

Интересная проблема. не сталкивался. Но вот что думаю, надо бы отходить от самописных скриптов и юзать что нибудь на подобии noc project.

Posted (edited)

Интересная проблема. не сталкивался. Но вот что думаю, надо бы отходить от самописных скриптов и юзать что нибудь на подобии noc project.

 

Реклама?! о_О ?!

 

И что же магического в "noc project"? Он умеет работать абсолютно со всеми коммутаторами и роутерами?

 

Мой "перловый" скрипт заходит по telnet, запускает команду copy tftp, а после пишет exit - по сути эмуляция ручного копирования конфига... что может быть проще?

C Zyxel проще слить конфиг со встроенного tfp-сервера, а вот с Linksys альтернатив по-моему нет

Edited by allan_sundry
Posted

Да, можете просмотреть мою историю сообщений и увидете что в каждой теме советую этот проект ))

Вообще его фишка в том что он парсит сам конфиг с коммутатора командой show running-config не используя тфтп. А проблему которую вы описали случается не только у линксисов.

Какая у вас стоит версия прошивки на коммутаторах которые зависают подобным образом? Пробовали обновлять?

Posted

Да, можете просмотреть мою историю сообщений и увидете что в каждой теме советую этот проект ))

Вообще его фишка в том что он парсит сам конфиг с коммутатора командой show running-config не используя тфтп. А проблему которую вы описали случается не только у линксисов.

Какая у вас стоит версия прошивки на коммутаторах которые зависают подобным образом? Пробовали обновлять?

 

И как же реализовано копирование конфигурации в этом проекте? (интересно посмотреть на кусок кода отвечающий за это)

 

Проблема не коррелирует с версией прошивки, официально 1.0.2 последняя...

Posted

И как же реализовано копирование конфигурации в этом проекте?

Так как у встроенного в NOC сервера tftp поддержку WRQ так и не реализовали (хоть и просили), то скачать конфиг с коммутатора по tftp не получится.

То есть так не сработает

copy startup-config tftp://XXX.XXX.XXX.XXX/20130301/switch

А вот дописать конфиг можно, если железка поддерживает:

copy tftp://XXX.XXX.XXX.XXX/20130301/switch running-config

Поэтому типичный вариант получения конфига - коннект по telnet|ssh, далее "show running-config" или её аналог, анализ и сохранение результата.

Ввод логина-пароля, enable и прочее подобное - автоматизировано средствами самого NOC.

Подробности реализации на совести автора скриптов поддержки конкретной железки.

Вот пример для Cisco IOS из сорцев:

http://code.nocproject.org/browse/noc/sa/profiles/Cisco/IOS/__init__.py?hb=true - общие переменные и функции профиля

http://code.nocproject.org/browse/noc/sa/profiles/Cisco/IOS/get_config.py?hb=true - собственно скрипт получения конфига

ЗЫ Возможен и вариант для веб-смартов - запрос и анализ страниц веб-интерфейса, но реализовано ли такое на практике для каких-то железок - я не знаю.

Posted

А почему это не делать через SNMP? Просто как это сделано в ноке - зайти, написать show run и сохранить его содержимое - уж больно коряво

Posted

А почему это не делать через SNMP?

Что делать по SNMP? Или есть свитчи которые умеют по SNMP конфиг отдавать целиком?

И много таких?

Просто как это сделано в ноке - зайти, написать show run и сохранить его содержимое - уж больно коряво

Не понимаю в чём корявость. Объясни, пожалуйста.

Плюс - очень универсально.

Posted

Что делать по SNMP? Или есть свитчи которые умеют по SNMP конфиг отдавать целиком?

тоже самое: copy startup-config tftp://XXX.XXX.XXX.XXX/20130301/switch
Posted

тоже самое: copy startup-config tftp://XXX.XXX.XXX.XXX/20130301/switch

Дак не умеет NOC принимать файлы конфигов по tftp, о чём я писал уже!

А если складывать на сторонний tftp-сервер - то понадобятся костыли,

чтобы полученный файл конфига в систему контроля версий NOC-а засунуть.

А если эту систему не использовать - то NOC не очень-то и нужен.

Posted

хм... можно конечно попробовать реализовать на perl сохранение конфига без tftp... не думаю что это будет очень сложно

Posted

Проблема решилась изменением подхода - скрипт теперь не использует tftp:

 

foreach (@linksys_sps){

my $file = sprintf($folder."/".$_);
print ("Create file ",$file,"\n");
system "touch  $file";

my $string = sprintf($_."#");
print ("Prompt String is ",$string,"\n");

print ("Connecting to ",$_,"\n");
my $telnet = new Net::Telnet (
                               Timeout=>20,
                               Errmode=>'return'
                               );

$telnet->open($_);
  if ($telnet->errmsg){
  print "Can't connect to " . $_ . " Error: " . $telnet->errmsg . "\n";
  } else {

$telnet->waitfor('/User Name:$/i');
$telnet->print('admin');
$telnet->waitfor('/Password:$/i');
$telnet->print('password');
$telnet->waitfor(String => $string );

print ("Set Backup Terminal Variable ",$_,"\n");
$telnet->print("terminal datadump");
$telnet->waitfor(String => $string );

print ("Read configuration ",$_,"\n");
$telnet->print('sh run');
my @config = $telnet->waitfor(String => $string );

print ("Write configuration ",$_," to file ",$file,"\n");
open my $fh, '>', $file or die "Cannot open file: $!";
foreach my $config (@config) {
   print $fh "$config\n";
   }
close $fh;

print ("Set Default Terminal Variable ",$_,"\n");
$telnet->print('no terminal datadump');
$telnet->waitfor(String => $string );

$telnet->print('exit');
   }
}

 

P.S. возможно кому-то этот код поможет сохранить время и нервы ;)

Guest
This topic is now closed to further replies.
×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.