Перейти к содержимому
Калькуляторы

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 раз...

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

 

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

 

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

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

Изменено пользователем allan_sundry

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Гость
Эта тема закрыта для публикации сообщений.