특정 포트의 다운스트림 대역폭을 감시하려고 합니다. 그러나 엄청난 제한과 버스트가 없으면 다운로드가 완전히 중지되는 것 같습니다.
IF="wlp3s0"
LIMIT="100kbit"
BURST="100kbit"
PORT="80"
echo "resetting tc"
tc qdisc del dev ${IF} ingress
echo "setting tc"
tc filter add dev ${IF} parent ffff: \
protocol ip prio 1 \
u32 match ip dport ${PORT} 0xffff \
police rate ${LIMIT} burst $BURST drop \
flowid :1
tc filter add dev ${IF} parent ffff: \
protocol ip prio 1 \
u32 match ip sport ${PORT} 0xffff \
police rate ${LIMIT} burst $BURST drop \
flowid :1
나는 꽤 오랫동안 이것을 조정해 왔으며 다양한 한계와 버스트 값을 시도했습니다 - wgetting chozabu.net/testfile (12mb)
어떤 제안이라도 환영합니다!
답변1
어떤 wlan 인터페이스를 사용하고 있는지 잘 모르겠지만 ethX 또는 귀하의 경우 wlan3s0에서 들어오는 패킷을 제어하는 ifb로 트래픽을 리디렉션해야 하는 가상 인터페이스가 누락된 것 같습니다.
그래서, 다음과 같은 것
modprobe ifb numifbs=1
ip link set dev ifb0 up
tc filter add dev wlp3s0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
tc qdisc add dev $VIRTUAL root handle 2: htb
tc filter add dev $VIRTUAL protocol ip parent 2: prio 1 u32 match ip sport ${PORT} 0xffff police rate ${LIMIT} burst $BURST drop \
flowid :1
특정 IP 주소(또는 네트워크)에서 들어오거나 나가는 트래픽의 대역폭을 필터링할 수 있는 bash 스크립트를 만들었습니다.
https://gist.github.com/ole1986/d9d6be5218affd41796610a35e3b069c
Usage: ./traffic-control.sh [-r|--remove] [-i|--incoming] [-o|--outgoing] <IP>
Arguments:
-r|--remove : removes all traffic control being set
-i|--incoming : limit the bandwidth only for incoming packetes
-o|--outgoing : limit the bandwidth only for outgoing packetes
<IP> : the ip address to limit the traffic for