如何将传入和传出数据包标记到 cgroup v1 网络分类器?

如何将传入和传出数据包标记到 cgroup v1 网络分类器?

我正在尝试按照此处的说明隔离并 tcpdump 来自单个进程的所有网络流量:(如何通过程序标记数据包):

$ sudo bash
# mkdir                             /sys/fs/cgroup/net_cls 
# mount -t cgroup -onet_cls net_cls /sys/fs/cgroup/net_cls

# mkdir              /sys/fs/cgroup/net_cls/tcpdump
# pidof my_program > /sys/fs/cgroup/net_cls/tcpdump/tasks
# echo 0x100001    > /sys/fs/cgroup/net_cls/tcpdump/net_cls.classid

# iptables -A INPUT  -m cgroup --cgroup 0x100001 -j NFLOG --nflog-group 123
# iptables -A OUTPUT -m cgroup --cgroup 0x100001 -j NFLOG --nflog-group 123
# tcpdump -i nflog:123

然而,它的表现很差,因为它只显示出站流量,而不显示传入流量:

# iptables-save -c | grep cgroup

[0:0] -A INPUT -m cgroup --cgroup 1048577 -j NFLOG --nflog-group 123
[4242:623034] -A OUTPUT -m cgroup --cgroup 1048577 -j NFLOG --nflog-group 123

由于它旨在与仅关心出站流量的流量控制(tc)一起使用,这是设计使然,还是一个缺陷?

无论该问题的答案如何,是否有更好的方法来记录进出给定进程(或一组进程)的所有数据包?

PS:命令tcpdump -i nflog:123 not src host x.x.x.x一直说

tcpdump: NFLOG link-layer type filtering not implemented

即使我不要求链路层过滤。那是怎么回事?

提前致谢!

相关内容