ポートごとにアップロード速度を制限することに満足していますが、プロセスごとにダウンロードを制限したいと思います。
iptablesには、OR形式でプロセスごとに--pid-owner
パケットを一致させて表示する機能があったようです--cmd-owner
。しかし、今両方削除されました。
$ iptables -m owner --help
...
owner match options:
[!] --uid-owner userid[-userid] Match local UID
[!] --gid-owner groupid[-groupid] Match local GID
[!] --socket-exists Match if socket exists
ユーザーやグループ別にマッチングするオプションがあるようですが、プロセス別にマッチングするオプションはないようです。
私はtrickleとwondershaperを知っていますが、すでに実行されているプロセスの形成を許可しません。
答え1
プロセスをnet_cls
cgroupに入れ、cgroupを使用してパケットクラスを設定し、クラスフィルタを使用してtc
そのクラスのパケットレートを制限します。たとえば、
cgcreate -g net_cls:slow
echo 0x10001 > /sys/fs/cgroup/net_cls/slow/net_cls.classid
cgclassify -g net_cls:slow <pid of the process you want to limit>
tc qdisc add dev eth0 root handle 1: htb
tc filter add dev eth0 parent 1: handle 1: cgroup
tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbps
これは、指定したプロセス(およびそのサブプロセス)の帯域幅制限が毎秒1 MBであることを意味します。最後のコマンドのパラメータを希望の帯域幅に調整します。