Система за отчитане на трафика за рутери CISCO

Доста често хардуерните рутери CISCO се използват като интернет рутери, които са де факто стандарт за установяване на връзки по синхронни канали за предаване на данни. В същото време операционната система на рутера (IOS) съдържа всички необходими свойства за привеждане на мрежата в Интернет (NAT, FIREWALL, маршрутизация).

Конфигурираният рутер е много стабилен в експлоатация (както хардуерно, така и софтуерно) и практически не изисква внимание - затова рутерите CISCO заемат стабилно първо място сред хардуерните решения за достъп до Интернет.

След инсталиране и конфигуриране на рутер, естествената задача е да преброи трафика, преминаващ през него. И тук възникват някои проблеми, т.к. патентован софтуер за управление на трафика от CISCO е много скъп и покупката му не е икономически обоснована, но от друга страна също е много опасно да останете напълно без счетоводно отчитане.

Както показва практиката обаче, този проблем може да бъде решен много ефективно и практически без специални разходи въз основа на свойствата, заложени вече в CISCO, безплатен софтуерен пакет и набор от прости програми.

  • Синхронен интернет канал;
  • CISCO 2611, IOS 12
  • Вътрешна мрежа, свързана чрез рутер


Поставена беше задачата да се изчисли трафикът, преминаващ през рутера на Cisco, без да се използват търговски средства за отчитане на трафика.

За да поддържате статистика за трафика, имате нужда от следните инструменти:

  • SQL сървър. За "складиране". По принцип всеки ще направи. В нашия пример това е MySQL
  • Работната станция, на която работи Perl, командата rsh и която знае как да стартира процеси по график. Всеки UNIX сървър е идеален за тази цел (използвахме FreeBSD 4.4). По принцип няма специални пречки за внедряване на системата на сървъра на Windiws - но се нуждаете от допълнителен софтуер (аналог на rsh, Active State perl).

Нека зададем конкретен проблем: дадени локални мрежи 10.120.0.0/16 и 10.6.0.0/16, свързани към интернет чрез рутер на Cisco. Необходимо е да се представи отчет за трафика в Интернет за всяка работна станция на локални мрежи.

1. Конфигуриране на интерфейси

Първо, трябва да конфигурирате рутера за показване на текущите връзки и броя на пакетите.

За интерфейса Serial0/0 трябва да изпълните следните команди:

> conf t
> int Serial0/0
> ip счетоводни изходни пакети

2. Разглеждаме статистиката на рутера

Сега рутерът ще събира изходящи пакети от този интерфейс, информация за които може да се види с командата sh ip Accounting
Резултатът ще бъде таблица на двойки

За да нулирате таблицата за трафика, трябва да изпълните командата ясно ip счетоводство

3. Конфигуриране на дистанционно изпълнение на команди на рутера

Промени в конфигурацията на рутера за отдалечено извличане на статистика (дистанционно изпълнение на команди)

# Позволява да се изпълняват отдалечени команди
> ip rcmd rsh-enable

# Потребител на трафик от хост 10.58.0.2, локалният корен потребител има привилегия ниво 8
> ip rcmd трафик на отдалечен хост 10.58.0.2 root enable 8

# Позволете ниво на привилегии 8 да изпълнява следните команди

# нулиране на статистиката
> привилегия exec ниво 8 ясно ip счетоводство
> привилегия exec ниво 8 ясно ip счетоводна контролна точка

# събиране на статистически данни
> привилегия exec ниво 8 показва ip счетоводна контролна точка

su-2.05 # rsh -l трафик 10.58.0.1 sh ip счетоводство | Повече ▼

Възрастта на счетоводните данни е 03:12
Превишен е счетоводният праг за 5016149 пакета и 1936384303 байта
Су-2.05 #

PS. Както можете да видите, ip счетоводството не предоставя информация за портовете за свързване.

Забележка: Последен ред - Счетоводният праг е надвишен за . показва, че ограничението за броя на записите (параметър ip счетоводен праг) е надвишен и посоченият брой байтове е загубен трафик. Тези. за да не настъпи загуба на информация за трафика, трябва или да увеличите стойността на този параметър (което означава, че таблицата за трафика ще заема повече памет) или да вземате статистически данни по-често.
Освен това е възможно да се филтрира информацията за трафика, като се посочи използването ip счетоводен списък мрежи, за които да се брои трафикът. В този случай можете да обърнете внимание на параметъра ip счетоводни транзити, с помощта на която можете да разрешите въвеждането в базата данни на определен брой записи, които не са преминали филтъра. В този случай общият размер на статистическите данни все още ще бъде ограничен от стойността ip счетоводен праг.

(Артем Налужни)

Сега тези данни могат да се използват за "съхраняване" на статистика някъде. По принцип можете да съхранявате статика в текстови или двоични файлове, но решихме да запишем данни в SQL база данни.

Получаване на статистика от рутера

За да съхраняваме статистически данни, използвахме езика Perl и стандартните DBI библиотеки за работа с бази данни.

1. Структура на таблици.

Създадохме 2 таблици: таблица с описание на рутера и таблица за съхранение на данни за трафика:

2. Съхраняване на статистика
#
# Структура на таблица за таблица „трафик“
#
СЪЗДАЙТЕ ТАБЛИЦА трафик (
ID int (10) unsigned NOT NULL auto_increment,
Ден дата и час НЕ НУЛО по подразбиране '0000-00-00 00:00:00',
FromIP varchar (15) NOT NULL по подразбиране ",
SPort int (10) unsigned NOT NULL по подразбиране '0',
X12 varchar (7) NOT NULL по подразбиране ",
X3 int (10) неподписан NOT NULL по подразбиране '0',
X4 int (10) неподписан NOT NULL по подразбиране '0',
DPort int (10) unsigned NOT NULL по подразбиране '0',
Байтове int (10) unsigned NOT NULL по подразбиране '0',
IFace varchar (20) NOT NULL по подразбиране ",
RouterID int (10) unsigned NOT NULL по подразбиране '0',
ОСНОВЕН КЛЮЧ (ИД)
) ТИП = MyISAM;

Запазване на данни

Скрипт за получаване на статистически данни от рутера и въвеждането им в базата данни. За да приложите скрипта, трябва да можете да извършвате стандартни операции с SQL базата данни (получаване, вмъкване, изтриване, промяна на данни и т.н.). За различните платформи внедряванията са различни, поради което не предоставяме описание на механизма за изпълнение на SQL заявки чрез Perl. Използвахме интерфейса DBI.

# Стандартна библиотека за работа с база данни в нея процедури Connect, Select, Exec, Insert,
# Изтриване, актуализиране

изискват '/usr/local/traffic/lib/DB2.pl';

Свързване ('TrafficBase', '10 .128.1.43 ',' root ',' ');

# От кои рутери да се събират статистически данни - ip - ID в таблицата на рутера
$ Рутери = 1;
$ Рутери = 3;

foreach $ ip (ключове% рутери)

# Прехвърлете данните за трафика от активната таблица в таблицата на контролните точки
`/ usr/bin/rsh -l трафик $ ip изчистване на ip счетоводство`

# Вземете данни от рутера от таблицата на контролните точки
@Stat = разделяне (/ \ n /, `/ usr/bin/rsh -l трафик $ ip sh ip счетоводна контролна точка`);

$ 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) if ($ s !

/^\s\d\./) < next; ># Игнорирайте заглавието и обобщението
$ s =

s/\ s +// g;
my @Row = split (/ /, $ s);
my @Dst = split (/\./, $ Row [1]);

# Напишете данни за трафика в базата данни
Вмъкване ('Трафик', "'', '$ Дата', '$ Ред [0]', '0', '$ Dst [0]. $ Dst [1]', $ Dst [2], $ Dst [ 3], '0', $ Row [3], '', $ Routers ");
>

# Изчистете таблицата със статистически данни в рутераre in checkpoint таблица
`/ usr/bin/rsh -l трафик $ ip изчистване на ip счетоводна контролна точка`
>

3. Стартирайте механизма за периодично запазване на статистически данни

Изпълнението може да варира в зависимост от платформата. Използвахме UNIX вградения механизъм за периодично стартиране на процеси "cron".

И така, ние изпълняваме скрипта за короната, за да получаваме статистика на всеки 4 часа. Този период се определя от съотношението на количеството RAM на рутера и преминаващия трафик, колкото повече трафик, толкова по-голям е размерът на таблицата със статистически данни, толкова по-често е необходимо да се вземат данни.

# Вземете 1IP счетоводство
0 0-23/4 * * * /usr/local/traffic/IPAccounting.pl

Сега записите на формуляра ще бъдат вмъкнати в базата данни:

# Дъмпингови данни за таблица „трафик“
#
ВМЪКНЕТЕ В СТОЙНОСТИ за трафика (1, '2002-07-31 15:28:56', '212.176.251.1', 0, '193.232', 242,69,0,1597, '', 1);

ВМЪКНЕТЕ В СТОЙНОСТИ за трафика (2, '2002-07-31 15:28:56', '212.176.251.1', 0, '216.33', 42,76,0,58, '', 1);

ВМЪКНЕТЕ В СТОЙНОСТИ за трафика (3, '2002-07-31 15:28:56', '195.151.246.5', 0, '194.67', 45,8,0,270, '', 1);

ВМЪКНЕТЕ В СТОЙНОСТИ за трафика (4, '2002-07-31 15:28:56', '195.131.31.134', 0, '62 .118 ', 138,31,0,2135,' ', 1);
ВМЪКНЕТЕ В СТОЙНОСТИ за трафика (5, '2002-07-31 15:28:56', '212.176.251.1', 0, '216.33', 42,72,0,1269, '', 1);
ВМЪКНЕТЕ В СТОЙНОСТИ за трафика (6, '2002-07-31 15:28:56', '195.151.246.5', 0, '159.153', 254,89,0,5873, '', 1);
ВЪВЕЖДАЙТЕ В СТОЙНОСТИ за трафика (7, '2002-07-31 15:28:56', '195.131.0.250', 0, '205.188', 9,197,0,79, '', 1);

Получаване на данни от базата данни и изчисляване на трафика
Програмите за вземане на проби за трафик могат да бъдат много различни. Всъщност трябва правилно да оформите заявка към базата данни и да обработите получените данни. Като пример ще дадем скрипт, който генерира отчет за определен период под формата на cvs файл.

# Задайте началните параметри за вземане на проби
$ StartDate = '2002-09-10 00:00:00';
$ EndDate = '2002-09-30 00:00:00';
$ Рутер = 3;
$ Net = '10 .6 ';
$ NotNet = '10 .120 ';

# Извършете избор от базата данни
$ sth = Изберете ('Traffic', 'day, fromip, x4, bytes', "fromip not like '10 .128.% 'and fromip not like' $ NotNet.% 'and x12 =' $ Net 'and day> "$ StartDate" и извличане на деня) <
#print "$ res [0] $ res [1] $ res [2] $ res [3] \ n";
$ Сума + = $ res [3];
>

Резултатът от скрипта е 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.0.104; 14.346887;
10.6.0.105; 2.884767;
10.6.0.106; 1.04632;
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;
-------------------------------
Общо; 1041,25119;

1. Внедрихме системата на Cisco 2611, UNIX сървър с FreeBSD 4.4, MySQL сървър. Системата работи успешно от около 3 месеца.

2. Няма ротация на данни. За 2 месеца в таблицата за трафика са събрани 266 000 записа.

3. Няма възможност (или все още не е проучена) да се получат статистически данни за определен интерфейс, които биха позволили да се получат по-точни данни за трафика (например, да се изключат заявките към мрежата 195.131.31.0/24)? И опростете формуляра за заявка до базата данни.

"Nienschanz-Telecom" - Система за отчитане на трафика за рутери CISCO