vk_logo twitter_logo facebook_logo googleplus_logo youtube_logo telegram_logo telegram_logo

Подсчет трафика при помощи MLS - Netflow

Итак, имеется следующие железяки:

Cisco Catalyst 5500 с Supervisor III-NFFC (WS-X5530) c 4-х портовой платой WS-U5537-FETX (4 10/100 порта, с аппаратной поддержкой inline rewrite-а)+NFFC WS-F5521

Cisco 7206VXR (NPE-G1) processor (revision A) with 229376K/32768K bytes of memory, с IOS-ом c7200-jk9o3s-mz.123-10c.bin (3 10/100/1000 интерфейсов на плате процессора)

Cisco 3640 3640 (R4700) processor (revision 0x00) with 56320K/9216K bytes of memory, с софтом c3640-ik9o3s-mz.122-27.bin

Задача: собрать стенд с MLS, попробовать посчитать на каталисте траффик.

Описание схемы подключения: каталист одним (1/1) портом был подключен к интерфейсу Gig0/1 роутера 7206, интерфейсы жестко поставлены в 100/full режим. С обоих сторон порты настроены на работу в режиме dot1q транка. Управляющие пакеты ходили по первому влану, на 7206 был адрес 10.0.0.1, на каталисте 10.0.0.2

Три оставшихся порта на модуле каталиста были запихнуты в три влана (10, 20, 30), которым соответствовали сети 10.0.10.0/24, 10.0.20.0/24, 10.0.30.0/24. В ходе тестирования использовались 10 и 20 сети, хосты получали адреса 10.0.10.50 и 10.0.20.50. В качетсве 10.0.10.50 был использован ноут с WinXP, на нем же работал сниффер, в качестве 10.0.20.50 был комп с FreeBSD 5.1. Gateway-ями были адреса 10.0.10.1 и 10.0.20.1 соответсвенно.

Конфигурация 7206:

mls rp nde-address 10.0.0.1
mls rp ip

interface GigabitEthernet0/1
ip address 10.0.0.1 255.255.255.0
mls rp vtp-domain mashenka
mls rp management-interface
mls rp ip
!
interface GigabitEthernet0/1.10
encapsulation dot1Q 10
ip address 10.0.10.1 255.255.255.0
mls rp ip
!
interface GigabitEthernet0/1.20
encapsulation dot1Q 20
ip address 10.0.20.1 255.255.255.0
mls rp ip
!
interface GigabitEthernet0/1.30
encapsulation dot1Q 30
ip address 10.0.30.1 255.255.255.0
mls rp ip
!

Конфигурация 5500:

#mls
set mls flow full
set mls include 10.0.0.1
set mls nde enable
set mls nde 10.0.10.50 5000

sw_5505> (enable) show port

Port Name Status Vlan Level Duplex Speed Type
----- ------------------ ---------- ---------- ------ ------ ----- ------------
1/1 connected trunk normal full 100 10/100BaseTX
1/2 connected 10 normal a-full a-100 10/100BaseTX
1/3 connected 20 normal a-full a-100 10/100BaseTX
1/4 notconnect 30 normal auto auto 10/100BaseTX

Результат:

7206#show mls rp
ip multilayer switching is globally enabled ipx multilayer switching is globally disabled ipx mls inbound acl override is globally disabled mls id is 0002.4a1d.b01b mls ip address 10.0.0.1 mls ip flow mask is destination mls ipx flow mask is unknown number of domains configured for mls 1

vlan domain name: mashenka
current ip flow mask: destination
ip current/next global purge: false/false ip current/next purge count: 0/0 current ipx flow mask: destination ipx current/next global purge: false/false ipx current/next purge count: 0/0 current sequence number: 247706616 current/maximum retry count: 0/10 current domain state: no-change domain uptime: 03:22:14 keepalive timer expires in 7 seconds retry timer not running change timer not running fcp subblock count = 4

1 management interface(s) currently defined:
vlan 1 on GigabitEthernet0/1

4 mac-vlan(s) configured for multi-layer switching

4 mac-vlan(s) enabled for ip multi-layer switching:

mac 0002.4a1d.b01b
vlan id(s)
1 10 20 30

0 mac-vlan(s) enabled for ipx multi-layer switching:

router currently aware of following 1 switch(es):
switch id 0003.e49c.ebff

sw_5505> (enable) show mls
Total packets switched = 524
Total Active MLS entries = 0
IP Multilayer switching enabled
IP Multilayer switching aging time = 256 seconds IP Multilayer switching fast aging time = 0 seconds, packet threshold = 0 IP Current flow mask is Full flow Configured flow mask is Full flow Active IP MLS entries = 0 Netflow Data Export enabled Netflow Data Export configured for port 5000 on host 10.0.10.50 Total packets exported = 6

IP MLS-RP IP MLS-RP ID XTAG MLS-RP MAC-Vlans
---------------- ------------ ---- ---------------------------------
10.0.0.1 00024a1db01b 4 00-02-4a-1d-b0-1b 1,10,20,30

Для проверки функционирования MLS-коммутации и экспорта NetFlow я стучался телнетом с 10.0.10.50 на произвольные порты 10.0.20.50 (на 50, 53, 80 и еще какие-то). Соединения при этом не устанавливалось, так как на этих портах ничего не висело, поэтому каждый раз в сесси проходило по одному пакету.

Результат:

sw_5505> (enable) show mls entry
Destination IP Source IP Prot DstPrt SrcPrt Destination Mac Vlan Port
--------------- --------------- ---- ------ ------ ----------------- ---- -----
MLS-RP 10.0.0.1: 10.0.20.50 10.0.10.50 TCP WWW 4491 00-d0-b7-b6-91-da 20 1/3 10.0.20.50 10.0.10.50 TCP WWW 4495 00-d0-b7-b6-91-da 20 1/3 10.0.20.50 10.0.10.50 TCP WWW 4487 00-d0-b7-b6-91-da 20 1/3 10.0.20.50 10.0.10.50 TCP WWW 4490 00-d0-b7-b6-91-da 20 1/3 10.0.20.50 10.0.10.50 TCP WWW 4494 00-d0-b7-b6-91-da 20 1/3 10.0.20.50 10.0.10.50 TCP WWW 4489 00-d0-b7-b6-91-da 20 1/3 10.0.20.50 10.0.10.50 TCP WWW 4493 00-d0-b7-b6-91-da 20 1/3 10.0.20.50 10.0.10.50 TCP WWW 4496 00-d0-b7-b6-91-da 20 1/3 10.0.20.50 10.0.10.50 TCP WWW 4488 00-d0-b7-b6-91-da 20 1/3 10.0.20.50 10.0.10.50 TCP WWW 4492 00-d0-b7-b6-91-da 20 1/3 10.0.10.50 10.0.20.50 TCP 4496 WWW 00-50-04-ff-13-92 10 1/2 10.0.10.50 10.0.20.50 TCP 4492 WWW 00-50-04-ff-13-92 10 1/2 10.0.10.50 10.0.20.50 TCP 4493 WWW 00-50-04-ff-13-92 10 1/2 10.0.10.50 10.0.20.50 TCP 4494 WWW 00-50-04-ff-13-92 10 1/2 10.0.10.50 10.0.20.50 TCP 4495 WWW 00-50-04-ff-13-92 10 1/2 10.0.10.50 10.0.20.50 TCP 4488 WWW 00-50-04-ff-13-92 10 1/2 10.0.10.50 10.0.20.50 TCP 4489 WWW 00-50-04-ff-13-92 10 1/2 10.0.10.50 10.0.20.50 TCP 4490 WWW 00-50-04-ff-13-92 10 1/2 10.0.10.50 10.0.20.50 TCP 4491 WWW 00-50-04-ff-13-92 10 1/2 10.0.10.50 10.0.20.50 TCP 4487 WWW 00-50-04-ff-13-92 10 1/2

sw_5505> (enable) show mls nde
Netflow Data Export enabled
Netflow Data Export configured for port 5000 on host 10.0.10.50 Total packets exported = 6

Это при _полной_ маске потока. Такой подход больше всего расходует размер MLS-таблицы, а она может содержать всего-то 32000 записей, иначе остальное пойдет на роутер :-(

В NetFlow полетело (отдавал каталист 7-ю версию нетфлова, без вариантов) следующее (показана часть пакета, отловленного Ethereal-ом):

Frame 69 (1470 bytes on wire, 1470 bytes captured) Arrival Time: May 11, 2005 15:18:29.826040000 ..
Ethernet II, Src: 00:02:4a:1d:b0:1b, Dst: 00:50:04:ff:13:92
Destination: 00:50:04:ff:13:92 (10.0.10.50)
Source: 00:02:4a:1d:b0:1b (10.0.10.1)
Type: IP (0x0800)
Internet Protocol, Src Addr: 10.0.0.2 (10.0.0.2), Dst Addr: 10.0.10.50 (10.0.10.50)
Version: 4
...
Protocol: UDP (0x11)
Header checksum: 0x986f (correct)
Source: 10.0.0.2 (10.0.0.2)
Destination: 10.0.10.50 (10.0.10.50)
User Datagram Protocol, Src Port: 1026 (1026), Dst Port: 5000 (5000) Source port: 1026 (1026) Destination port: 5000 (5000)
Length: 1436
Checksum: 0xf057 (correct)
Cisco NetFlow
Version: 7
Count: 27
SysUptime: 10237180
Timestamp: May 11, 2005 18:22:10.000000000
CurrentSecs: 1115821330
CurrentNSecs: 0
FlowSequence: 380
reserved
pdu 1/27
SrcAddr: 10.0.10.50 (10.0.10.50)
DstAddr: 10.0.20.50 (10.0.20.50)
NextHop: 0.0.0.0 (0.0.0.0)
InputInt: 0
OutputInt: 163
Packets: 1
Octets: 66
StartTime: 9971.000000000 seconds
EndTime: 9972.000000000 seconds
SrcPort: 4430
DstPort: 53
Export Flags: 0x00
TCP Flags: 0x00
Protocol: 6
IP ToS: 0x00
SrcAS: 0
DstAS: 0
SrcMask: 0 (prefix: 10.0.10.50/32)
DstMask: 0 (prefix: 10.0.20.50/32)
padding
Router Shortcut: 10.0.0.1 (10.0.0.1)
pdu 2/27
SrcAddr: 10.0.10.50 (10.0.10.50)
DstAddr: 10.0.20.50 (10.0.20.50)
NextHop: 0.0.0.0 (0.0.0.0)
InputInt: 0
OutputInt: 163
Packets: 1
Octets: 66
StartTime: 9969.000000000 seconds
EndTime: 9970.000000000 seconds
SrcPort: 4426
DstPort: 53
Export Flags: 0x00
TCP Flags: 0x00
Protocol: 6
IP ToS: 0x00
SrcAS: 0
DstAS: 0
SrcMask: 0 (prefix: 10.0.10.50/32)
DstMask: 0 (prefix: 10.0.20.50/32)
padding
Router Shortcut: 10.0.0.1 (10.0.0.1)
pdu 3/27
SrcAddr: 10.0.10.50 (10.0.10.50)
DstAddr: 10.0.20.50 (10.0.20.50)
NextHop: 0.0.0.0 (0.0.0.0)
InputInt: 0
OutputInt: 163
Packets: 1
Octets: 66
StartTime: 9967.000000000 seconds
EndTime: 9967.000000000 seconds
SrcPort: 4421
DstPort: 53
Export Flags: 0x00
TCP Flags: 0x00
Protocol: 6
IP ToS: 0x00
SrcAS: 0
DstAS: 0
SrcMask: 0 (prefix: 10.0.10.50/32)
DstMask: 0 (prefix: 10.0.20.50/32)
padding
Router Shortcut: 10.0.0.1 (10.0.0.1)
pdu 4/27
....

И т.д., достаточно подробно.

Если же маску потока поставить не full, а source-destination, то в NetFlow получится следующая картина:

...
pdu 20/21
SrcAddr: 10.0.20.50 (10.0.20.50)
DstAddr: 10.0.10.50 (10.0.10.50)
NextHop: 0.0.0.0 (0.0.0.0)
InputInt: 0
OutputInt: 162
Packets: 29
Octets: 1856
StartTime: 11557.000000000 seconds
EndTime: 11565.000000000 seconds
SrcPort: 0
DstPort: 0
Export Flags: 0x02
TCP Flags: 0x00
Protocol: 0
IP ToS: 0x00
SrcAS: 0
DstAS: 0
SrcMask: 0 (prefix: 10.0.20.50/32)
DstMask: 0 (prefix: 10.0.10.50/32)
padding
Router Shortcut: 10.0.0.1 (10.0.0.1)
pdu 21/21
SrcAddr: 10.0.10.50 (10.0.10.50)
DstAddr: 10.0.20.50 (10.0.20.50)
NextHop: 0.0.0.0 (0.0.0.0)
InputInt: 0
OutputInt: 163
Packets: 29
Octets: 1914
StartTime: 11557.000000000 seconds
EndTime: 11565.000000000 seconds
SrcPort: 0
DstPort: 0
Export Flags: 0x02
TCP Flags: 0x00
Protocol: 0
IP ToS: 0x00
SrcAS: 0
DstAS: 0
SrcMask: 0 (prefix: 10.0.10.50/32)
DstMask: 0 (prefix: 10.0.20.50/32)
padding
Router Shortcut: 10.0.0.1 (10.0.0.1)
...

При этом на пару сервер-клиент в любом случае в MLS-таблице будет отведено всего две записи, но за счет этого страдает детализация вывода.

В экспорте нетфлова с каталиста (а отдает нетфлов, кстати, именно он, а не роутер) есть две особенности. Во-первых, несмотря на то, что первый пакет маршрутизируется роуетром, он не пропадает из статисики каталиста, как я ожидал - это видно в примере с полной маской, где в перехваченном пакете указано в записи pdu число пакетов в потоке - 1.

А во-вторых, в отличие от роутера, который может четко поймать конец tcp-сессии по признаку завершения, свитч считает сессию завершенной, когда по ней в течение времени, равного таймауту удаления из MLS-таблицы, не пролетает ни одного пакета. Таким образом, реальные сессии могут идти не совсем так, как вывалит в нетфлоу каталист. Кроме того, при MLS-коммутации с маской source-destination несколько сессий могут оказаться в экспорте одной, с просуммированным траффиком и количеством пакетов - смотрим pdu 20/21.

Вывод.

Несмортя на очевидное устаревание данной технологии, она может позволить выполнять подсчет траффика на каналах 100 мегабит и более с аппаратной L3 wire-speed коммутацией, с экспортом по NetFlow, динамической маршрутизацией посредством MLS-RP, при этом суммарная стоимость оборудования для связки 2926G + 3620 должна составить примерно 2500$, за эти деньги можно получить 24 10/100 порта, на которых теоретически можно считать траффик при полной загрузке.

Примечание. Порты MLS-SP должны поддерживать аппаратный реврайтинг mac-адресов (inline rewrite или просто rewrite), иначе эту функицю модулю порта придется делать программно, при этом у меня на 10-мбит порту получилась скорость 200-300К при перекачивании файла через самбу.