Table of Contents
Общая информация
Устройство МКСЗ «Diamond Next» поддерживает возможность захватывать сетевой трафик для дальнейшего анализа. Данный механизм позволяет проанализировать сетевые пакеты и их заголовки. Захват и анализ сетевого трафика можно осуществить в двух режимах: raw-режим, pcap-режим.
- Raw-режим: Данный режим позволяет захватить сетевой пакет и предоставить информацию не только о всех полях и заголовках, но также и о движении сетевого пакета между сетевыми механизмами устройства. Данный режим осуществляет захват сетевого трафика со всех интерфейсов одновременно. Результаты работы можно сохранить в текстовом формате.
- Pcap-режим: Данный режим позволяет захватить сетевой пакет и предоставить информацию аналогично утилите tcpdump. Сетевой трафик можно захватывать на различных сетевых интерфейсах и записывать результаты работы в формате pcap файла. В pcap-режиме не поддерживается возможность онлайн вывода результатов работы механизма и недоступна фильтрации сетевого трафика по различным параметрам.
Режим захвате RAW
Для захвата сетевого трафик на физическом интерфейсе необходимо подключиться подключиться к устройству по протоколу ssh. Далее необходимо перейти в режим конфигурации на уровне “data plane” с помощью команды “vppctl”.
Необходимо выбрать один из сетевых интерфейсов, на котором требуется осуществить захват сетевого трафика. Перечень доступных сетевых интерфейсов на устройстве можно посмотреть либо через web интерфейс в разделе “Статус - Сетевые интерфейсы”, либо в режиме конфигурации на уровне “data plane” с помощью команды “sh interface”.
Для захвата сетевого трафика необходимо использовать команду “trace add dpdk-input <count_of_packets>”.
# vppctl vpp# trace add dpdk-input 1000 <----- 1000 Количество сетевых пакетов
Для просмотра результата необходимо выполнить команду “show trace”. В представленном ниже примере показаны сетевые пакет 16 и 17. Для каждого из сетевых пакетов зафиксированы узлы, в которых происходила их обработка, все поля и заголовки, а также результат обработки сетевого пакета.
Packet 16 01:16:54:208566: dpdk-input GigabitEtherneta/0/0 rx queue 0 buffer 0x2cff11: current data 0, length 70, buffer-pool 0, ref-count 1, trace handle 0x100000f ext-hdr-valid PKT MBUF: port 6, nb_segs 1, pkt_len 70 buf_len 9328, data_len 70, ol_flags 0x182, data_off 128, phys_addr 0xd33fc4c0 packet_type 0x111 l2_len 0 l3_len 0 outer_l2_len 0 outer_l3_len 0 rss 0x94cebe20 fdir.hi 0x0 fdir.lo 0x94cebe20 Packet Offload Flags PKT_RX_IP_CKSUM_GOOD (0x0080) IP cksum of RX pkt. is valid PKT_RX_L4_CKSUM_GOOD (0x0100) L4 cksum of RX pkt. is valid PKT_RX_RSS_HASH (0x0002) RX packet with RSS hash result Packet Types RTE_PTYPE_L2_ETHER (0x0001) Ethernet packet RTE_PTYPE_L3_IPV4 (0x0010) IPv4 packet without extension headers RTE_PTYPE_L4_TCP (0x0100) TCP packet IP4: 6c:9c:ed:7f:d3:48 -> 00:90:0b:63:26:f3 802.1q vlan 480 TCP: 81.177.120.83 -> 194.135.68.242 tos 0x20, ttl 52, length 52, checksum 0xa325 dscp CS1 ecn NON_ECN fragment id 0xd200, flags DONT_FRAGMENT TCP: 50706 -> 443 seq. 0xad1c6b3b ack 0x19461f07 flags 0x10 ACK, tcp header: 32 bytes window 360, checksum 0x6aff 01:16:54:208567: ethernet-input frame: flags 0x3, hw-if-index 7, sw-if-index 7 IP4: 6c:9c:ed:7f:d3:48 -> 00:90:0b:63:26:f3 802.1q vlan 480 01:16:54:208568: l2-input l2-input: sw_if_index 7 dst 00:90:0b:63:26:f3 src 6c:9c:ed:7f:d3:48 [l2-input-feat-arc l2-learn l2-fwd l2-flood l2-flood ] 01:16:54:208568: l2-input-feat-arc IN-FEAT-ARC: head 1 feature_bitmap 82a5 ethertype 800 sw_if_index 7, next_index 15 01:16:54:208568: acl-plugin-in-ip4-l2 acl-plugin: lc_index: 0, sw_if_index 7, next index 1, action: 1, match: acl 0 rule 0 trace_bits 00000000 ct session_index -1 thread_index 65535 error NONE pkt info 0000000000000000 0000000000000000 0000000000000000 f24487c25378b151 0007010601bbc612 0310ffff00000000 lc_index 0 l3 ip4 81.177.120.83 -> 194.135.68.242 l4 lsb_of_sw_if_index 7 proto 6 l4_is_input 1 l4_slow_path 0 l4_flags 0x01 port 50706 -> 443 tcp flags (valid) 10 rsvd 0 01:16:54:208579: l2-input-feat-arc-end IN-FEAT-ARC: head 0 feature_bitmap 2a5 ethertype 0 sw_if_index -1, next_index 7 01:16:54:208579: l2-learn l2-learn: sw_if_index 7 dst 00:90:0b:63:26:f3 src 6c:9c:ed:7f:d3:48 bd_index 1 01:16:54:208579: l2-fwd l2-fwd: sw_if_index 7 dst 00:90:0b:63:26:f3 src 6c:9c:ed:7f:d3:48 bd_index 1 result [0xb180000000007, 7] none 01:16:54:208580: error-drop rx:GigabitEtherneta/0/0 01:16:54:208580: drop l2-fwd: Reflection Drop Packet 17 01:16:54:209266: dpdk-input GigabitEtherneta/0/0 rx queue 0 buffer 0x2b73df: current data 0, length 138, buffer-pool 0, ref-count 1, trace handle 0x1000010 ext-hdr-valid PKT MBUF: port 6, nb_segs 1, pkt_len 138 buf_len 9328, data_len 138, ol_flags 0x182, data_off 128, phys_addr 0xd39cf840 packet_type 0x111 l2_len 0 l3_len 0 outer_l2_len 0 outer_l3_len 0 rss 0x49de519a fdir.hi 0x0 fdir.lo 0x49de519a Packet Offload Flags PKT_RX_IP_CKSUM_GOOD (0x0080) IP cksum of RX pkt. is valid PKT_RX_L4_CKSUM_GOOD (0x0100) L4 cksum of RX pkt. is valid PKT_RX_RSS_HASH (0x0002) RX packet with RSS hash result Packet Types RTE_PTYPE_L2_ETHER (0x0001) Ethernet packet RTE_PTYPE_L3_IPV4 (0x0010) IPv4 packet without extension headers RTE_PTYPE_L4_TCP (0x0100) TCP packet IP4: 6c:9c:ed:7f:d3:48 -> 00:90:0b:63:26:f3 802.1q vlan 480 TCP: 46.138.254.34 -> 194.135.68.242 tos 0x00, ttl 122, length 120, checksum 0x61c7 dscp CS0 ecn NON_ECN fragment id 0x6a92, flags DONT_FRAGMENT TCP: 58270 -> 873 seq. 0x358e7882 ack 0x1e2c6d5b flags 0x18 PSH ACK, tcp header: 20 bytes window 2052, checksum 0x0bae 01:16:54:209267: ethernet-input frame: flags 0x3, hw-if-index 7, sw-if-index 7 IP4: 6c:9c:ed:7f:d3:48 -> 00:90:0b:63:26:f3 802.1q vlan 480 01:16:54:209268: l2-input l2-input: sw_if_index 7 dst 00:90:0b:63:26:f3 src 6c:9c:ed:7f:d3:48 [l2-input-feat-arc l2-learn l2-fwd l2-flood l2-flood ] 01:16:54:209268: l2-input-feat-arc IN-FEAT-ARC: head 1 feature_bitmap 82a5 ethertype 800 sw_if_index 7, next_index 15 01:16:54:209268: acl-plugin-in-ip4-l2 acl-plugin: lc_index: 0, sw_if_index 7, next index 1, action: 1, match: acl 0 rule 0 trace_bits 00000000 ct session_index -1 thread_index 65535 error NONE pkt info 0000000000000000 0000000000000000 0000000000000000 f24487c222fe8a2e 000701060369e39e 0318ffff00000000 lc_index 0 l3 ip4 46.138.254.34 -> 194.135.68.242 l4 lsb_of_sw_if_index 7 proto 6 l4_is_input 1 l4_slow_path 0 l4_flags 0x01 port 58270 -> 873 tcp flags (valid) 18 rsvd 0 01:16:54:209279: l2-input-feat-arc-end IN-FEAT-ARC: head 0 feature_bitmap 2a5 ethertype 0 sw_if_index -1, next_index 7 01:16:54:209280: l2-learn l2-learn: sw_if_index 7 dst 00:90:0b:63:26:f3 src 6c:9c:ed:7f:d3:48 bd_index 1 01:16:54:209280: l2-fwd l2-fwd: sw_if_index 7 dst 00:90:0b:63:26:f3 src 6c:9c:ed:7f:d3:48 bd_index 1 result [0xb180000000007, 7] none 01:16:54:209280: error-drop rx:GigabitEtherneta/0/0 01:16:54:209280: drop l2-fwd: Reflection Drop
Данный механизм использует буфер для сохранения результатов работы. Чтобы очистить буфер от старых данных и начать новый захват необходимо выполнить команду “clear trace”.
Для сохранения данных в текстовом формате, необходимо вернуть на уровень управления “control-plane” с помощью сочетания клавиш “ctrl+c” и выполнить команду “vppctl show trace max 1000 > /media/storage/trace.log”. Результаты выполнения команды будут сохранены в файл “trace.log” в папке назначения “/media/storage/”. Название файла и директорию назначения можно задать самостоятельно.
Режим захвате Pcap
Для захвата сетевого трафик на сетевом интерфейсе необходимо подключиться подключиться к устройству по протоколу ssh. Далее необходимо перейти в режим конфигурации на уровне “data plane” с помощью команды “vppctl”.
Необходимо выбрать один из сетевых интерфейсов, на котором требуется осуществить захват сетевого трафика. Перечень доступных сетевых интерфейсов на устройстве можно посмотреть либо через web интерфейс в разделе “Статус - Сетевые интерфейсы”, либо в режиме конфигурации на уровне “data plane” с помощью команды “sh interface”.
Для захвата сетевого трафика необходимо использовать команду “pcap trace [rx/tx] [on/off] [max_packet_count <nn>] [intfc <interface>|any] [file <name>]”.
- rx/tx - направление сетевого трафика, который необходимо захватить;
- on/off - включить или выключить механизм захвата сетевого трафика;
- max_packet_count - количество сетевых пакетов, которые необходимо захватить;
- intfc - сетевой интерфейс, на котором необходимо осуществить захват сетевого трафика;
- file - имя файла, в который будут сохранены результаты в формате pcap.
В примере ниже осуществим захват 1000 пакетов на интерфейсе GigabitEtherneta/0/0 для направления rx. В процессе выполнения захвата сетевого трафика, есть возможность уточнить текущий статус с помощью команды “pcap trace status”. Результаты выполнения сохраняются в директории “/tmp/”.
# vppctl vpp# pcap trace rx max 1000 intfc GigabitEtherneta/0/0 file trace.pcap vpp# pcap trace status pcap rx dispatch capture enabled: 1000 of 1000 pkts... capture to file /tmp/trace.pcap
Для изменения параметров захвата необходимо остановить процесс с помощью команды “pcap trace off”, после чего внести изменения и запустить механизм заново.
vpp# pcap trace rx max 1000 intfc GigabitEthernet4/0/0 file trace_2.pcap vpp# vpp# pcap trace status pcap rx dispatch capture enabled: 138 of 1000 pkts... capture to file /tmp/trace_2.pcap vpp# vpp# pcap trace rx off pcap trace: 138 of 1000 pkts captured...