网络分类器 cgroup

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

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

创建 net_cls cgroup 实例会创建一个 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 -onet_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