Sistemul de contabilitate rutieră pentru routerele cisco, rețele, articole, linux bibliotecă centru, - expert

Sistemul de contabilitate rutieră pentru routerele CISCO

Rețeta este modul de citire a traficului, dacă accesul la Internet este prin intermediul routerului CISCO, folosind doar mijloacele standard ale routerului și ale software-ului gratuit. Cunoașterea cantității de trafic și distribuirea acestuia la locurile de muncă este singura modalitate de a "nu zbura" în penny serios atunci când plătiți pentru Internet prin canale dedicate.

Destul de des, calitatea routerelor pe Internet este folosită de routerele hardware CISCO, standarde de facto pentru organizarea unei conexiuni pe canalele de date sincrone. În acest caz, sistemul de operare al routerului (IOS) are toate proprietățile necesare pentru a trimite rețeaua la Internet (NAT, FIREWALL, routing).

Router-ul configurat este foarte stabil în exploatare (hardware și software) și practic nu necesită atenție - de aceea router-ele CISCO ocupă un loc stabil printre primele soluții hardware pentru accesul la Internet.

După instalarea și configurarea routerului, sarcina naturală este de a număra traficul care trece prin acesta. Și aici sunt câteva probleme, tk. software-ul companiei de gestionare a traficului de la CISCO este foarte scump și achiziția sa nu este justificată din punct de vedere economic, dar, pe de altă parte, este și foarte periculoasă să rămâi complet fără contabilitate.

Cu toate acestea, experiența a arătat că această problemă poate fi rezolvată foarte eficient și practic fără costuri suplimentare, pe baza deja stabilite în proprietățile CISCO, pachetul de software liber și un set de programe simple.

  • Canal de internet sincron;
  • CISCO 2611, IOS 12
  • Rețea internă conectată printr-un router


Sarcina este de a calcula traficul care trece prin routerul Cisco fără a utiliza contabilitatea traficului comercial.

Pentru a menține statistici privind traficul, aveți nevoie de următoarele instrumente:

  • SQL Server. Pentru "depozitare". În principiu, oricine poate. În exemplul nostru, aceasta este MySQL
  • Stația de lucru pe care rulează Perl este comanda rsh, care poate rula procesele într-un program. În aceste scopuri, orice server UNIX este ideal (am folosit FreeBSD 4.4). În principiu, nu există obstacole speciale în implementarea sistemului pe serverul Windiws - dar aveți nevoie de software suplimentar (rsh analogic, Active perl).

Să punem o sarcină concretă: având rețele locale 10.120.0.0/16 și 10.6.0.0/16 conectate la Internet prin intermediul ruterului Cisco. Este necesar să se furnizeze un raport privind traficul pe internet al fiecărei stații de lucru a rețelelor locale.

1. Configurați interfețele

Mai întâi, trebuie să configurați routerul pentru a afișa conexiunile curente și numărul de pachete.

Pentru interfața Serial0 / 0, trebuie să executați următoarele comenzi:

> conf
> int Serial0 / 0
> pachete de ieșire contabile ip

2. Consultați statisticile routerului

Acum, router-ul va colecta pachetele de ieșire din această interfață, informații despre care pot fi vizualizate cu comanda sh ip
Rezultatul este un tabel de perechi

Pentru a reseta tabelul cu trafic, trebuie să executați comanda clear accounting ip

3. Configurați executarea de la distanță a comenzilor de pe router

Schimbări în configurația routerului pentru recuperarea la distanță a statisticilor (executarea de la distanță a comenzilor)

# Permitem executarea comenzilor de la distanță
> ip rcmd rsh-enable

# Trafic de utilizatori din gazda 10.58.0.2, utilizatorul rădăcină local are nivelul de privilegii 8
> ip rcmd trafic de la distanță 10.58.0.2 root enable 8

# Permiteți privilegiul de nivel 8 pentru a rula următoarele comenzi

# resetează statisticile
> privilegiu exec nivel 8 contabilitate ip clar
> privilegiu exec nivel 8 punct clar punct de contabilitate ip contabilitate

# colectați statistici
> privilegiul exec nivel 8 arată ip punct de control contabil

su-2.05 # rsh -l trafic 10.58.0.1 contabilitate | mai mult

Vârsta datelor contabile este 03:12
Pragul de contabilizare a depășit 5016149 pachete și 1936384303 octeți
Su-2.05 #

PS. Aparent, contabilitatea ip nu oferă informații despre porturile de conectare.

Notă: ultimul rând este depășit pragul de contabilitate pentru. spune că limita numărului de înregistrări (parametrul ip-prag de parametru) este depășită, iar numărul specificat de octeți este traficul pierdut. Ie astfel încât pierderea informațiilor despre trafic să nu aibă loc, trebuie fie să măriți valoarea acestui parametru (de aici tabelul de trafic va ocupa mai multă memorie), fie mai des pentru a elimina statisticile.
În plus, este posibilă filtrarea informațiilor despre trafic prin specificarea cu lista de conturi ip a rețelelor pentru care se înregistrează traficul. În acest caz, puteți acorda atenție parametrului ip-tranzit al contabilității. cu care puteți permite o picătură în baza de date a unui număr de intrări de filtre nepotrivite. În acest caz, mărimea totală a statisticilor va fi la fel limitată la valoarea pragului de contabilitate ip.
(Artem Naluzhny)

Acum aceste date pot fi folosite pentru a "stoca" statisticile oriunde. În principiu, puteți stoca în mod static și în fișiere text sau binare, dar am decis să salvăm datele în baza de date SQL.

Obținerea de statistici de la router

Pentru a stoca statistici, am folosit limbajul Perl și bibliotecile standard DBI pentru a lucra cu bazele de date.

1. Structura tabelelor.

Am creat 2 tabele: tabela de descriere a ruterului și tabela de stocare a datelor pentru trafic:

2. Stocarea statisticilor
#
# Structura tabelului pentru tabelul "trafic"
#
CREATE trafic tabel (
ID int (10) nesemnate NOT NULL auto_increment,
Ziua datătimetime NOT NULL implicită '0000-00-00 00:00:00',
DinIP varchar (15) NOT NULL implicit '',
SPort int (10) nesemnate NOT NULL implicit '0',
X12 varchar (7) NOT NULL implicit '',
X3 int (10) nesemnate NOT NULL implicit '0',
X4 int (10) nesemnate NOT NULL implicit '0',
DPort int (10) nesemnate NOT NULL implicit '0',
Bytes int (10) nesemnate NOT NULL implicit '0',
IFace varchar (20) NOT NULL implicit '',
RouterID int (10) nesemnate NOT NULL implicit '0',
TASTĂ PRIMARĂ (ID)
) TYPE = MyISAM;

Salvarea datelor

Un script pentru a prelua statisticile de la router și a le plasa în baza de date. Pentru a implementa scriptul, trebuie să puteți efectua operații standard cu baza de date SQL (obțineți, inserați, ștergeți, modificați date etc.). Pentru diferite platforme de implementare sunt diferite, deci nu oferim o descriere a mecanismului de executare a interogărilor SQL prin Perl. Am folosit interfața DBI.

# Biblioteca standard de lucru cu baza de date în ea procedurile Connect, Select, Exec, Insert,
# Ștergeți, Actualizați
cere "/usr/local/traffic/lib/DB2.pl";

Conectați-vă ('TrafficBase', '10 .128.1.43 ',' root ',' ');

# Cu ce ​​rutere să colecteze statistici - ip - ID în tabelul de routere
$ Routere = 1;
$ Routere = 3;

foreach $ ip (tastele% Routere)

# Translatăm datele de trafic din tabelul activ în tabela de puncte de control
`/ usr / bin / rsh -l trafic $ ip ip contabilitate clară"

# Obțineți datele de la router de la tabela de puncte de control
@Stat = împărțit (/ \ n /, `/ usr / bin / rsh -l trafic $ ip sh ip punct de control contabilitate`);

$ Date = sprintf ("% 4d-% 02d-% 02d% 02d:% 02d:% 02d", $ AD [5] + 1900, $ AD [4] + 1, $ AD [3]
$ AD [2], $ AD [1], $ AD [0]);

foreach $ s (@Stat) dacă ($ s!

/^\s\d\./) # Ignorați antetul și rezumatul
$ s =

s / \ s + / / g;
meu @Row = împărțit (/ /, $ s);
meu @Dst = împărțit (/\./, $ Row [1]);

# Scrieți date de trafic către baza de date
Inserați ('Traffic', '' ',' $ Date ',' $ Row [0] ',' 0 ',' $ Dst [0]. $ Dst [ 3], '0', $ Row [3], '', $ Routere ");
>

# Curățați tabelul cu statistici din router în tabela de puncte de control
`/ usr / bin / rsh -l trafic $ ip punct de control ip ip clar contabilitate`
>

3. Începem mecanismul de economisire statistică periodică

În funcție de implementarea platformei pot fi diferite. Am folosit mecanismul UNIX încorporat pentru a începe periodic procesele "cron".

Deci, pe coroană executăm un script pentru a obține statistici la fiecare 4 ore. Această perioadă este determinată de corespondența dintre cantitatea de RAM din router și traficul care trece, cu cât traficul este mai mare, cu atât este mai mare dimensiunea tabelului de statistici, cu atât mai des este necesar să se ia date.

# Obțineți contabilitate 1IP
0 0-23 / 4 * * * /usr/local/traffic/IPAccounting.pl

Acum, înregistrările vor fi inserate în baza de date:

Obtinerea datelor din baza de date si numararea traficului
Programele de eșantionare a traficului pot fi foarte diferite. De fapt, trebuie să formați corect o cerere în baza de date și să procesați datele. De exemplu, aici este un script care generează un raport pentru o anumită perioadă sub forma unui fișier cvs.

# Am selectat din baza de date
$ sth = Selectați ('Trafic', 'day, fromip, x4, bytes','ip nu ca '10 .128.%' și zip nu ca '$ NotNet.%' și x12 = '$ Net' și day> '$ StartDate "și zi <'$EndDate' and routerid=$Router order by day, bytes");
în timp ce (@res = $ sth-> fetchrow) <
#print "$ res [0] $ res [1] $ res [2] $ res [3] \ n";
$ Sum + = $ res [3];
>

s /\./,/;
printf ("Total;% s; \ n", $ S);

Rezultatul scriptului este un fișier cvs
10,6,0,2; 2,50131;
10,6,0,4; 0,190212;
10,6,0,5, 1,97279;
10,6,0,6; 14,875368;
.
.
.
10.6.0.103; 74.21923;
10,6,0104; 14,34688;
10.6.0.105; 2.884767;
10,6,0106; 1,044632;
10,6,0,110; 1,867212;
10.6.0.112; 1.327554;
10.6.0.151; 8.126519;
10.6.0.152; 3.669052;
10,6,0,153; 0,625454;
10,6,0,154; 3,835585;
10.6.0.155; 2.207297;
10,6,0,157; ​​4,4e-005;
10.6.0.201; 130.717364;
-------------------------------
Total, 1041,25119;

1. Am implementat sistemul pe serverul Cisco 2611, UNIX care execută FreeBSD 4.4, serverul MySQL. Sistemul funcționează cu succes timp de aproximativ 3 luni.

2. Nu există o rotație a datelor. Timp de 2 luni, 266.000 de înregistrări au fost colectate în tabelul de trafic.

3. Nu există nicio posibilitate (sau nu a fost studiat încă) de obținere de statistici pe o interfață specifică, ceea ce ne-ar permite să obținem date mai precise privind traficul (de exemplu, pentru a exclude cererile în rețea 195.131.31.0/24)? Și simplificați forma interogării din baza de date.

Biblioteca LinuxCenter. Lista secțiunilor