포트별로 업로드 속도를 제한하는 데 만족하지만 프로세스별로 다운로드를 제한하고 싶습니다.
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
이는 지정한 프로세스(및 해당 하위 프로세스)의 대역폭 제한이 초당 1MB임을 의미합니다. 마지막 명령의 매개변수를 원하는 대역폭으로 조정하세요.