網路分類器 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