网络分类器 cgroup 【ChatGPT】

发布时间 2023-12-09 22:20:40作者: 摩斯电码

网络分类器 cgroup

网络分类器 cgroup 提供了一个接口,用于给网络数据包打上一个类别标识符(classid)。

流量控制器(tc)可以用来为来自不同 cgroup 的数据包分配不同的优先级。此外,Netfilter(iptables)也可以使用这个标识符来对这些数据包执行操作。

创建一个 net_cls cgroups 实例会生成一个 net_cls.classid 文件。这个 net_cls.classid 的值会初始化为 0。

你可以向 net_cls.classid 写入十六进制的值;这些值的格式为 0xAAAABBBB;其中 AAAA 是主要句柄号,BBBB 是次要句柄号。读取 net_cls.classid 会得到一个十进制的结果。

例如:

mkdir /sys/fs/cgroup/net_cls
mount -t cgroup -o net_cls net_cls /sys/fs/cgroup/net_cls
mkdir /sys/fs/cgroup/net_cls/0
echo 0x100001 > /sys/fs/cgroup/net_cls/0/net_cls.classid
  • 设置一个 10:1 的句柄:
cat /sys/fs/cgroup/net_cls/0/net_cls.classid
1048577
  • 配置 tc:
tc qdisc add dev eth0 root handle 10: htb
tc class add dev eth0 parent 10: classid 10:1 htb rate 40mbit
  • 创建流量类别 10:1:
tc filter add dev eth0 parent 10: protocol ip prio 10 handle 1: cgroup
  • 配置 iptables,基本示例:
iptables -A OUTPUT -m cgroup ! --cgroup 0x100001 -j DROP