网络分类器 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