14.1. Packet Tracer¶
Трассировщик пакетов (packet tracer) позволяет увидеть, через какие подсистемы ADC прошли как входящие, так и исходящие пакеты пользователя. Это мощное средство, которое может помочь отладить нетривиальные или сложные для анализа проблемы.
Трассировка L3/L4¶
В обычных случаях отладка должна выполняться следующим образом:
Создание Access-листа.
Создание трассировки пакетов.
Запуск записи трассировки в 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 к Workersrc-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|ipv6> dp-access-list NAME max-packets (2-1048576) [payload-length (16-65535) [<vrf NAME|vrf-all>]]¶
Создать трассировщик пакетов с настроенным Access-листом. Поддерживается как IPv4 (
ip), так и IPv6 (ipv6).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.
- debug packet-tracer <ip|ipv6> counter <hairpinning_loop_drops|hairpinning_drops|unsupported_l4_proto_drops|no_nat_rule_drops|no_mapping_drops|ttl_drops> max-packets (2-1048576) [payload-length (16-65535) [<vrf NAME|vrf-all>]]¶
Создать трассировщик пакетов для захвата пакетов, отброшенных по указанному типу счётчика:
hairpinning_loop_drops— отброшены из-за зацикливания hairpinninghairpinning_drops— отброшены при обработке hairpinningunsupported_l4_proto_drops— неподдерживаемый L4-протоколno_nat_rule_drops— отсутствует NAT-правилоno_mapping_drops— отсутствует NAT-маппингttl_drops— истёк TTL
- no debug packet-tracer <ip|ipv6> [<vrf NAME|vrf-all>]¶
Удалить созданный трассировщик пакетов.
Примечание
Рекомендуется удалять трассировщик пакетов после окончания анализа для снижения нагрузки на ADC.
- debug packet-tracer burst-size (1-65535)¶
Указать количество пакетов, которые обработчик будет считывать из очереди за один раз. По умолчанию — 512.
- debug packet-tracer <ip|ipv6> pcap-dump file FILENAME¶
Собрать трассировку в файл pcap, где
FILENAME— полный путь к файлу, например,/home/admin/test.pcap. Когда включена запись pcap-дампа, отдельный поток анализирует очередь в реальном времени. Здесь под очередью понимается буфер — максимальное количество пакетов, одновременно хранимых в памяти ADC, прежде чем они будут записаны на диск. В этом случае опцияmax-packetsв команде debug packet-tracer не ограничивает количество собираемых пакетов.Внимание
Запись дампа начнётся сразу после выполнения команды и не остановится автоматически. Запись необходимо остановить вручную, иначе произойдёт переполнение диска! Чем точнее Access-лист, тем меньше пакетов будут попадать в дамп, и тем меньше он будет занимать места.
- no debug packet-tracer <ip|ipv6> 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>]¶
Показать статистику для созданного трассировщика пакетов.
Трассировка L7¶
ADC поддерживает захват трафика после обработки на прикладном уровне, включая расшифрованный SSL-трафик. Это позволяет анализировать HTTP-трафик между ADC и Workers.
- debug packet-tracer adc max-packets (2-1048576) [payload-length (16-65535)]¶
Создать трассировщик L7. В отличие от трассировщика L3/L4, трассировка L7 захватывает пакеты после обработки на уровне приложения, включая расшифрованный SSL-трафик.
- no debug packet-tracer adc¶
Удалить трассировщик L7.
SSL Keylog¶
SSL keylog позволяет записывать ключи TLS-сессий в файл для последующей расшифровки захваченного трафика в Wireshark (через настройку Pre-Master-Secret log filename).
- debug ssl-keylog ip dp-access-list NAME max-keys (2-1048576) [<vrf NAME|vrf-all>]¶
Создать запись SSL keylog с фильтрацией по Access-листу. Параметр
max-keysопределяет максимальное количество ключей, сохраняемых в памяти.
- debug ssl-keylog file FILENAME [max-size (1-4294967295) <Bytes|KBytes|MBytes|GBytes>]¶
Записать SSL keylog в указанный файл. Опциональный параметр
max-sizeпозволяет ограничить размер файла.Предупреждение
Запись начнётся сразу после выполнения команды и не остановится автоматически. Запись необходимо остановить вручную.
- no debug ssl-keylog file [FILENAME]¶
Остановить запись SSL keylog.
- debug ssl-keylog burst-size (1-65535)¶
Указать количество ключей, считываемых из очереди за один раз.