![如何将传入和传出数据包标记到 cgroup v1 网络分类器?](https://linux22.com/image/222885/%E5%A6%82%E4%BD%95%E5%B0%86%E4%BC%A0%E5%85%A5%E5%92%8C%E4%BC%A0%E5%87%BA%E6%95%B0%E6%8D%AE%E5%8C%85%E6%A0%87%E8%AE%B0%E5%88%B0%20cgroup%20v1%20%E7%BD%91%E7%BB%9C%E5%88%86%E7%B1%BB%E5%99%A8%EF%BC%9F.png)
我正在尝试按照此处的说明隔离并 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
即使我不要求链路层过滤。那是怎么回事?
提前致谢!