cgroup에서 애플리케이션의 다운로드(접속) 속도를 제한하려고 합니다. iptables에서 애플리케이션의 출력 패킷을 표시한 다음 표시된 패킷을 처리하도록 tc 필터를 설정하여 업로드(송신) 속도를 성공적으로 제한할 수 있었습니다. 그러나 수신에 대해 동일한 단계를 수행하면 작동하지 않습니다.
내가 따르는 제한 단계업로드:
- cgroup별로 OUTPUT 패킷 표시
$ sudo iptables -I OUTPUT -t mangle -m cgroup --path '/user.slice/.../app-firefox-...scope'\
-j MARK --set-mark 11
- 루트 qdisc의 펌웨어 태그(11)로 필터링
$ tc qdisc add dev $IFACE root handle 1: htb default 1
$ tc filter add dev $IFACE parent 1: protocol ip prio 1 handle 11 fw \
action police rate 1000kbit burst 10k drop
이는 Firefox의 업로드 속도를 1000kbit로 성공적으로 제한합니다.
내가 제한하려고 했던 단계다운로드:
- cgroup별로 INPUT 패킷 표시
$ sudo iptables -I INPUT -t mangle -m cgroup --path '/user.slice/.../app-firefox-...scope'\
-j MARK --set-mark 22
- qdisc 항목의 펌웨어 태그(22)로 필터링
$ tc qdisc add dev $IFACE ingress handle ffff:
$ tc filter add dev $IFACE parent ffff: protocol ip prio 1 handle 22 fw \
action police rate 1000kbit burst 10k drop
iptables를 사용하여 애플리케이션 다운로드를 성공적으로 차단할 수 있습니다.
$ sudo iptables -I INPUT -t mangle -m cgroup --path '/user.slice/.../app-firefox-....scope' -j DROP
그러면 iptables가 들어오는 패킷을 cgroup으로 표시하는 것처럼 보이지만 어떤 이유로 tc가 이를 필터링할 수 없거나 tc 필터가 적용되기 전에 패킷이 소비되고 있는 것일까요? 그렇다면 입력 패킷을 표시하는 용도는 무엇입니까?
cgroup으로 들어오는 패킷을 차단하는 방법이 있다면 이를 제한하는 방법도 있어야겠죠?
답변1
@AB 의견에 따르면:
mangle/INPUT에 설정한 플래그는 tc 항목이 waaaay 전에 발생하기 때문에 tc에 영향을 주지 않습니다. 확인하다:en.wikipedia.org/wiki/Netfilter#/media/
...
cgroup의 아웃바운드 패킷에 대한 연결 표시를 저장하려면 -j CONNMARK --save-mark
다음 명령을 사용하여 인바운드 패킷의 연결 표시를 검색하십시오.TC-Commac, 마지막으로 패킷을 다음으로 리디렉션합니다.IFB앱경찰.
- cgroup 연결 패킷 표시(양방향):
$ sudo iptables -A OUTPUT -t mangle -m cgroup --path '/user.slice/.../app-firefox-...scope' \
-j MARK --set-mark 0x11
$ sudo iptables -A OUTPUT -t mangle -j CONNMARK --save-mark
- ifb 인터페이스 생성
$ modprobe ifb
$ ip link set ifb0 up
$ tc qdisc add dev ifb0 root htb #For policing, we don't care about the qdisc type
connmark
$IFACE 항목을 검색하여 ifb0으로 리디렉션합니다.
$ tc qdisc add dev $IFACE ingress handle ffff:
$ tc filter add dev $IFACE parent ffff: protocol all prio 10 u32 match u32 0 0 flowid 1:1 \
action connmark \
action mirred egres s redirect dev ifb0
- ifb0 루트 qdisc의 태그가 지정된 패킷에 폴리서 적용
$ tc filter add dev ifb0 parent 1: protocol ip prio 20 handle 0x11 fw \
action police rate 1000kbit burst 10k drop
이는 Firefox의 다운로드 속도를 1000kbit로 제한합니다.