Posto sam vec skoro 15 godina aktivno konfigurisao rutere i switcheve raznih proizvodjaca evo ti par saveta iz mog licnog iskustva.
Ne kazem da je ovo sto sam radio i 100% dobro, efikasno, kvalitetno, ali je barem meni zavrsavalo posao. Moraces da probas vise metoda da bi video koja ti odgovara.
Kada govorimo o konfigurisanju opreme moramo da razlikujemo nekoliko situacija:
1.
Rucno - Jednokratna konfiguracija na jednom ili vise (do 5, mada je taj broj moj licni izbor) uredjaja.
2.
Poluautomatski - Jednokratna konfiguracija na vise (od 5) uredjaja.
3.
Automatski - Visekratna (ili periodicna) konfiguracija jednog ili vise uredjaja.
1. Za ovo prvo ubedljivo najbolji nacin je ovo sto ti je predlozio Chkalja, uz malu modifikaciju. Pre svega, ne treba ti cela konfiguracija, vec samo relevantan deo koji zelis da izmenis. Recimo, konfiguraciju jednog interfejsa ili nekog routing protokola. Pripremis DEO KONFIGURACIJE (ne kompletnu!) u editoru (notepad, vi, emacs ...), pregledas to dobro i uradis copy/paste. Ja sam uglavnom koristio 'vi', jer gde god sam radio rutere smo konfigurisali tako sto se najpre konektujemo sa ssh na neki Unix (Solaris/Linux) server, a odatle telnet/ssh na rutere. Onda ja lepo uzmem Putty, otvorim 3-4 sesije ka tom serveru. U jednoj u 'vi' editoru pripremam konfiguraciju, a na druge 3 se logujem na 3 razlicita rutera i radim paste. Putty je zgodan za copy/paste: levim tasterom misa radis select+copy, desnim paste, ne treba ti Ctrl-C / Ctrl-V ... Vodi racuna da se na ruterima koji koriste klasican Cisco IOS konfiguracija izmeni odmah po unosu komande, pa moze lako da ti se dogodi da npr. iseces sopstvenu sesiju ka ruteru (npr. ako obrises IP adresu ili uradis shutdown na interfejsu preko koga pristupas ruteru). Alternativa je da koristis "Configuration Replace and Rollback" opciju u okviru IOS. Detalje imas na:
http://stack.nil.com/ipcorner/ConfigReplacement/.
IOS-XR ceka da uneses sve komande do kraja i otkucas 'commit' (ukrali ideju od Junipera, hahaha), pa tu takve opasnosti nema. :-)
2. Za ovo drugo je najefikasnija TFTP metoda, ali ne bas 100% kako ti je Igor Vitorac predlozio, osim ako ne uzivas da nerviras sopstvene korisnike cestim reloadom :-). Opet je dovoljno da pripremis samo delic konfiguracije koji ti je potreban, smestis ga u neki fajl (npr. config.txt) u /tftpboot direktorijum TFTP servera, a odatle ga "pokupis" sa rutera naredbom
copy tftp://10.9.8.7/config.txt running. Iza toga
wr da snimis konfiguraciju u NVRAM i to je to.
Ovde ti ne treba reload!. Inace, ne moras da koristis TFTP - IOS podrzava i FTP, SCP, HTTP i HTTPS - vidi:
http://stack.nil.com/ipcorner/WebUpload/. Ponovi ovaj postupak na svim ruterima gde zelis da izmenis konfiguraciju. Ovo savrseno radi za manje mreze (5-10 switcheva i/ili rutera). Ali recimo u mrezama sa po vise stotina ili hiljada uredjaja ovo moze da bude bas naporno! Za to ces morati da koristis narednu opciju, a to je ...
3. Full automatika! Tu sam zaista koristio sve i svasta. Najcesce sam pisao svoje skriptove, koristeci
Net::Telnet ili
Net::Telnet::Cisco Perl module, ponekad pisao
expect skriptove, na jednom mestu koristio cak i neke prastare sh/bash/tcsh skriptove ... Na Internetu postoji i dosta gotovih alatki za to, vidi
detaljan spisak ovde. Skriptovi se dele u dve kategorije. Jedni prate proces opisan pod #1 - unose "conf term", pa komandu po komandu, pa "exit", pa "write" ... Drugi koriste TFTP - kopiraju fajl u /tftpboot direktorijum, pa pozivaju komandu koju sam opisao #2. Za pristup ruteru skriptovi mogu da koriste
telnet/ssh ili
rsh/rcmd. Prednost ove druge metode je sto se u skriptu ne treba da navodi username/password.
Evo ti dole primer jednostavnog skripta koji konfigurise niz rutera navedenih u komandnoj liniji, koristeci konfiguraciju smestenu u fajlu, naziv fajla i spisak rutera navodis kao argumente (npr.
./script.pl filename rtr1 rtr2 rtr3). Krajnje jednostavan, mozes da ga prilagodjavas i siris prema svojim potrebama. Ruteri se konfigurisu sekvencijalno, jedan za drugim. Varijanta tog skripta za mreze sa preko 1000 rutera je da napravis multi-threaded proces, koristeci fork(), ali to bi vec bila napredna tehnika. Radio sam takav skript jednom u bivsoj firmi, trebalo je snimati konfiguraciju 250 rutera na TFTP server periodicno, na svakih pola sata, a potom sve te konfiguracije smestiti u CVS arhivu. Sekvencijalno bi to trajalo oko 4 sata. Ovako, skript je forkovao 250 child procesa istovremeno, od kojih bi svaki "obisao" po jedan ruter i sve se zavrsi za neka 3 minuta. Ali tu tehniku ne bih bas primenio za skript koji nesto menja na ruteru - jedna greska u fajlu i "usrecis" celu mrezu od 100-200 rutera za manje od jednog minuta! Generalno, kod skriptova treba otvoriti ne cetvore, vec osmore oci, jer je verovatnoca greske velika, a posledice mogu da budu katastrofalne!
#!/usr/bin/perl
my $USERNAME="username"; # Router username
my $PASSWORD="password"; # Router password
use Net::Telnet;
#
# --- telnet() - connect to a network element via telnet
#
sub telnet {
my ($ip) = @_;
my $s = Net::Telnet->new (Host => $ip,
Prompt => '/[\w()\-.]*[\$#>]\s?(\(enable\))?\s*$/',
Errmode => 'return');
return 0 if (!$s);
$s->login ($USERNAME, $PASSWORD) || return 0;
$s->cmd('terminal length 0');
return $s;
}
# - MAIN()
die "\nUsage: $0 filename routername [ routername ... ]\n\n" if (@ARGV < 2);
# --- Read configuration snippet
$filename = $ARGV[0];
shift (@ARGV);
open (CFG, "<$filename") || die "Could not open file $filename\n";
@commands = <CFG>;
close (CFG);
# --- Execute it on the routers specified in ARGV ...
foreach $rtr (@ARGV) {
print STDERR "### Router: $rtr ###\n";
$s = telnet($rtr);
if (!$s) {
print STDERR "Could not connect to $rtr\n";
next;
}
$s->input_log ('/dev/tty'); # Display commands on the screen
$s->cmd ("conf term");
foreach (@commands) {
chomp;
$s->cmd ($_);
}
$s->cmd ("end");
$s->cmd ("write mem");
$s->cmd ("quit");
$s->close;
}
[Ovu poruku je menjao B3R1 dana 12.05.2012. u 23:24 GMT+1]