Назад | Перейти на главную страницу

Проблема с использованием контрольной группы net_cls в тандеме с tc для фильтрации пакетов

У меня возникли проблемы с ограничением пропускной способности сети с помощью группы управления net_cls в сочетании с контроллером трафика linux (tc). Думаю, меня просто смущает то, как я пишу правила фильтрации. Я решил, что самый простой способ управлять пропускной способностью сети пользователей - это использовать их uid как часть classid группы управления net_cls. Поэтому я установил следующее правило в своем файле cgconfig (и продолжаю перезагружать машину). У меня также есть правильная настройка в моем cgrules.conf, так как любые ограничения, которые я налагаю на другие контроллеры (например, память), отражаются должным образом.

Скажем, у меня uid 5004,

group cgroup_demo_cg {

    net_cls {
        net_cls.classid=0x00105004;
#or should it be the hex equivalent of 5004 ?
        #net_cls.classid=0x0010138c;
    }
}

Так или иначе, следующим шагом должно быть добавление кое-каких материалов tc. Ручка 10 в любом случае сначала создайте qdisk:

tc qdisc add dev eth0 root handle 10: htb

затем установите правило класса:

tc class add dev eth0 parent 10: classid 10:5004 htb rate 4kbit
#or if I had to use the hex value
tc class add dev eth0 parent 10: classid 10:138c htb rate 4kbit

затем, наконец, примените фильтр, который, как мне кажется, должен быть одинаковым, использую ли я шестнадцатеричное значение или значение uid (5004):

tc filter add dev eth0 parent 10: protocol ip prio 10 handle 1: cgroup

Итак, после того, как я это настроил, я ожидаю, что любой сетевой трафик от пользователя в этой cgroup будет иметь пропускную способность сети, ограниченную tc соответственно, однако, похоже, это не так.

Если я вхожу в систему как пользователь и настраиваю сеанс ssh на другой из моих компьютеров, а затем выполняю команду top (которая должна отправлять / получать постоянный поток некоторых данных), затем запустите команду:

tc -s qdisc ls

Я вижу:

qdisc htb 10: dev eth0 root refcnt 2 r2q 10 default 0 direct_packets_stat 0
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc pfifo_fast 0: dev eth1 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
 Sent 1364212 bytes 6045 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0

Что показывает мне, что на мой qdisk ничего не добавлялось? :(

У кого-нибудь есть идеи, что я здесь делаю не так?

Ура!