13.1. Packet Tracer

Трассировщик пакетов (packet tracer) позволяет увидеть, через какие подсистемы ADC прошли как входящие, так и исходящие пакеты пользователя. Это мощное средство, которое может помочь отладить нетривиальные или сложные для анализа проблемы.

В обычных случаях отладка должна выполняться следующим образом:

  1. Создание Access-листа.

  2. Создание трассировки пакетов.

  3. Запуск записи трассировки в pcap-файл.

Рассмотрим каждый шаг подробнее.

ip dp-access-list NAME SEQ ACTION <any|udp|tcp|icmp|gre|esp> src-ip <any|A.B.C.D/M> dst-ip <any|A.B.C.D/M>

Создать Access-лист для IPv4.

Учитывайте, что ADC работает в режиме Destination NAT. Это означает, что в пакетах, отправленных клиентом, dst-ip является IP-адресом Сервиса. После обработки этих пакетов ADC заменяет dst-ip на один из IP-адресов Workers. Если используется NAT-пул, то в запросе ADC к Worker src-ip клиента заменяется на IP-адрес из пула.

Все это следует учитывать при написании правила для Access-листа.

Самый простой Access-лист — где в качестве src-ip и dst-ip указан параметр any. Недостаток заключается в том, что будут захвачены все пакеты, проходящие через ADC, что может усложнить анализ собранного дампа при высокой нагрузке.

Если в качестве dst-ip указать IP-адрес Сервиса, то пакеты будут собраны только на промежутке от клиента до ADC. Поэтому, чтобы собрать в дамп пакеты от ADC до Worker, нужно создать Access-лист с IP-адресом Worker.

Чтобы собрать ответы от Worker до абонента, необходимо также создать Access-листы для обратного трафика.

debug packet-tracer ip dp-access-list NAME max-packets (2-1048576) [payload-length (16-65535) [<vrf NAME|vrf-all>]]

Создать трассировщик пакетов с настроенным Access-листом.

max-packets — максимальное количество пакетов на nb_work core, которое будет сохранено в трассировке. Можно записать \(N^2 - 1\) в кольцевую очередь. Например, если вы укажете значение 10, то подсистема трассировки возьмет степень двойки сверху \(2^4 - 1 = 15\) — именно столько пакетов будет записано в трассировку. Если в настройках платформы указано 12 nb_work ядер, то общее количество пакетов будет \(15 * 12 = 180\). Эти пакеты можно просмотреть с помощью команды show debugging packet-tracer ip traces, где метка времени характеризует начало пакета.

payload-length — объем данных в байтах, сохраняемый трассировщиком пакетов для каждого пакета. Рекомендуется указать как минимум 1500 байт.

vrf-all — пакеты будут собираться во всех VRF.

vrf NAME — пакеты будут собираться только в указанном VRF.

no debug packet-tracer ip [<vrf NAME|vrf-all>]

Удалить созданный трассировщик пакетов.

Внимание

Рекомендуется удалять трассировщик пакетов и Access-лист после окончания анализа для снижения нагрузки на ADC.

debug packet-tracer burst-size (1-65535)

Указать количество пакетов, которые обработчик будет считывать из очереди за один раз. По умолчанию — 512.

debug packet-tracer ip pcap-dump file FILENAME

Собрать трассировку в файл pcap, где FILENAME — полный путь к файлу, например, /home/admin/test.pcap. Когда включена запись pcap-дампа, отдельный поток анализирует очередь в реальном времени. Здесь под очередью понимается буфер — максимальное количество пакетов, одновременно хранимых в памяти ADC, прежде чем они будут записаны на диск. В этом случае опция max-packets в команде debug packet-tracer не ограничивает количество собираемых пакетов.

Предупреждение

Запись дампа начнется сразу после выполнения команды и не остановится автоматически. Запись необходимо остановить вручную, иначе произойдет переполнение диска! Чем точнее Access-лист, тем меньше пакетов будут попадать в дамп, и тем меньше он будет занимать места.

no debug packet-tracer ip pcap-dump [file FILENAME]

Остановить запись дампа.

Show-команды

show debugging packet-tracer <ip|ipv6> traces [clear]

Показать трассировку пакетов. В каждом пакете, попавшим в трассировку, содержится такая информация как заголовки Ethernet и IP, подсистемы, через которые проходят пакеты, и где они были отброшены. Если добавить опцию clear, трассировка будет удалена после просмотра.

show debugging packet-tracer <ip|ipv6> stats [<vrf NAME|vrf-all>]

Показать статистику для созданного трассировщика пакетов.