LINUX.ORG.RU

Как через tcpdump увидеть маркированные nftables пакеты

 , ,


0

1

Маркирую трафик через set mark 1. Как увидеть пакеты с этой маркой? Можно даже не tcpdump, а другую тулзу, главное видеть откуда, куда, какой порт и какая марка. tcpdump даже с -vvv не показывает марки. Гугл ничего толкового не предлагает или же я не понял сути сего действа. Пример того, что показывает тспдамп, когда к нему приходят пакеты с сервера, маркированные через set mark 1

sudo tcpdump -i wg0 host 10.70.71.3 -vvv
tcpdump: listening on wg0, link-type RAW (Raw IP), snapshot length 262144 bytes
10:08:13.989431 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto TCP (6), length 64)
    10.70.71.3.61661 > 10.70.71.4.microsoft-ds: Flags [S], cksum 0x7494 (correct), seq 3042712664, win 65535, options [mss 1240,nop,wscale 6,nop,nop,TS val 2553267249 ecr 0,sackOK,eol], length 0
10:08:13.989491 IP (tos 0x10, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
    10.70.71.4.microsoft-ds > 10.70.71.3.61661: Flags [S.], cksum 0xa2c1 (incorrect -> 0x48ad), seq 1841489905, ack 3042712665, win 6840, options [mss 1380,sackOK,TS val 3805997325 ecr 2553267249,nop,wscale 0], length 0
10:08:14.135020 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto TCP (6), length 52)
    10.70.71.3.61661 > 10.70.71.4.microsoft-ds: Flags [.], cksum 0x893f (correct), seq 1, ack 1, win 2053, options [nop,nop,TS val 2553267399 ecr 3805997325], length 0
10:08:14.135107 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto TCP (6), length 125)
    10.70.71.3.61661 > 10.70.71.4.microsoft-ds: Flags [P.], cksum 0xbad6 (correct), seq 1:74, ack 1, win 2053, options [nop,nop,TS val 2553267399 ecr 3805997325], length 73
10:08:14.135144 IP (tos 0x10, ttl 64, id 56699, offset 0, flags [DF], proto TCP (6), length 52)
    10.70.71.4.microsoft-ds > 10.70.71.3.61661: Flags [.], cksum 0xa2b9 (incorrect -> 0x75fb), seq 1, ack 74, win 6767, options [nop,nop,TS val 3805997470 ecr 2553267399], length 0


Последнее исправление: Entmatix (всего исправлений: 1)
Ответ на: комментарий от Entmatix

По моему все по теме. Маркированные пакеты попадают в nflog, чтобы tcpdump их видел нужно указать это через параметр -i nflog:<группа>.

Meyer ★★★★★
()

tcpdump даже с -vvv не показывает марки.

Потому что о метке знает только ядро, она не передаётся по сети. @Meyer вам всё правильно говорит.

ValdikSS ★★★★★
()
Последнее исправление: ValdikSS (всего исправлений: 1)
Ответ на: комментарий от Meyer

@ValdikSS, значит у меня что-то не так? Я же попробовал, прежде чем писать 🧐

...prerouting...
ip saddr { $WGNET, $OVNET } ip daddr 192.168.77.28 ct mark 1 log group 30 dnat to 10.70.71.4


tcpdump -i nflog:30
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on nflog:30, link-type NFLOG (Linux netfilter log messages), snapshot length 262144 bytes
*пустота*

Обращений за время работы tcpdump было много. Почему тогда не показывает?

Entmatix
() автор топика
Ответ на: комментарий от Entmatix

Если только что-то, связанное с моим случаем дната. Поясните неэксперту.

UPD. Чувствую, что тут нужны подробности. Сервер ВГ (А), клиент ВГ (Б), клиент ВГ (В). Б, не находясь в одной локалке с В, но находясь с ним в одной впн должен по адресу В из локалки (192.168.77.28) получить к нему доступ. Для этого А при обращении к нему Б в сторону В днатит адрес из обращения на 10.70.71.4. Мне нужно промаркировать эти дначенные пакеты (только в одну сторону). Мониторинг пакетов через tcpdump идет непосредственно на самом В.

Entmatix
() автор топика
Последнее исправление: Entmatix (всего исправлений: 1)

Обычным tcpdump-ом - никак. Только патченым.

Обычный tcpdump умеет только дампить в файл и при этом не умеет его фильтровать. Само собой разумеется, что дополнительные данные он тоже не умеет показывать.

7 лет назад я пробовал сделать PR в libpcap и tcpdump, чтобы с nflog можно было делать что-то полензное, но их не приняли.

vel ★★★★★
()
Ответ на: комментарий от vel

Обычный tcpdump умеет только дампить в файл и при этом не умеет его фильтровать.

Это ладно, а вот это

Само собой разумеется, что дополнительные данные он тоже не умеет показывать.

Печально. Других доступных способов сделать то, что я хочу, нет?

Entmatix
() автор топика
Ответ на: комментарий от ValdikSS

Wireshark ни 2.4.x ни 3.6.3 не показывает MARK

Всё что оно знает:

    /* TLV values */
        &hfi_nflog_tlv_hwprotocol,
        &hfi_nflog_tlv_hook,
        &hfi_nflog_tlv_ifindex_indev,
        &hfi_nflog_tlv_ifindex_outdev,
        &hfi_nflog_tlv_ifindex_physindev,
        &hfi_nflog_tlv_ifindex_physoutdev,
        &hfi_nflog_tlv_prefix,
        &hfi_nflog_tlv_uid,
        &hfi_nflog_tlv_gid,
        &hfi_nflog_tlv_timestamp,
        &hfi_nflog_tlv_unknown,
    };
определение MARK есть, но кода нет.

Теоретически, неизвестное поле с кодом 0x2 и длинной 4 байта должно показывать MARK.

vel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.