Jump to content
Калькуляторы

Linksys SPS224G4 не копирует файлы на TFTP FTP-C-OPEN: No free UDP port Copy: Can't open TFTP client

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

 

У меня есть скрипт который заходит 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 раз...

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

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

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

Edited by allan_sundry

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

Так как у встроенного в 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 - собственно скрипт получения конфига

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Проблема решилась изменением подхода - скрипт теперь не использует 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. возможно кому-то этот код поможет сохранить время и нервы ;)

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this