Você precisa de pelo menos duas classes: uma limitada e uma "ilimitada". Para que você possa filtrar um tipo de tráfego para a classe limitada e manter o resto fora disso. Se você tiver apenas uma turma, todo o tráfego é limitado.
Em minha busca para encontrar uma maneira de limitar a largura de banda de saída para uma instância em execução de bitcoind, me deparei com este guia que explica como classificar o limite de tráfego para um determinado IP de destino:
tc qdisc add dev $DEV root handle 1: cbq avpkt 1000 bandwidth 10mbit
tc class add dev $DEV parent 1: classid 1:1 cbq rate 512kbit allot 1500 prio 5 bounded isolated
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 match ip dst 195.96.96.97 flowid 1:1
Não estou tentando limitar o tráfego a um determinado IP de destino, mas de e para uma porta específica, por isso encontrei este guia que informa como corresponder o tráfego por porta de origem e destino:
tc filter add dev eth0 protocol ip parent 10: prio 1 u32 match ip dport 22 0xffff flowid 10:1
tc filter add dev eth0 protocol ip parent 10: prio 1 u32 match ip sport 80 0xffff flowid 10:1
A combinação do primeiro script com a correspondência de porta do segundo script leva-me ao seguinte conjunto de comandos que deve limitar o tráfego de saída para a porta 21 a 160 kbit / s. Estou testando a configuração usando o FTP primeiro, porque limitar o bitcoind, que usa a porta 8333, não é ideal para testes, já que não consigo decidir quando o tráfego é enviado.
tc qdisc add dev eth0 root handle 1: cbq avpkt 1000 bandwidth 800kbit
tc class add dev eth0 parent 1: classid 1:1 cbq rate 160kbit allot 1500 prio 5 bounded isolated
tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dport 21 0xffff flowid 1:1
Tanto quanto eu posso ver, isso deve limitar o tráfego de saída para a porta 21 na interface eth0 com uma largura de banda de saída de 800kbit / s para 160kbit / s, mas não está funcionando:
NetHogs version 0.8.0
PID USER PROGRAM DEV SENT RECEIVED
23653 rune filezilla eth0 102.609 2.978 KB/sec
A conexão FTP consiste em duas conexões para a porta 21:
$ netstat -n|grep "21 "
tcp 0 0 192.168.1.33:59967 194.192.207.26:21 ESTABLISHED
tcp 0 0 192.168.1.33:59974 194.192.207.26:21 ESTABLISHED
O que estou fazendo de errado?
Estou executando o Ubuntu Raring, caso isso seja relevante.
Você precisa de pelo menos duas classes: uma limitada e uma "ilimitada". Para que você possa filtrar um tipo de tráfego para a classe limitada e manter o resto fora disso. Se você tiver apenas uma turma, todo o tráfego é limitado.