Hi,I got the same problem, until I figured out that you cant denote IP-adresses with the filter, as those are 'masqueraded' out and replaced by the router's address. With your ipchains-masquerading command, you should add a 'mark packet' command, which gives each individual forwarded machine an individual mark on its packets, so tc filter can pick those out. An example configuration of me (upstream!):
I'd like to setup cbq for my 7 lan users, but i'd like to do it only for the internet connect (LAN is accessing internet through masquerading), not for the whole server machine: i mean somebody on the lan should access the server at full rate(10Mbit/s), but internet at for example 30KB/sec).
i now i've setup only kbits, but those dramastic low-speed was to see easily if it was working or not :)
how could i do that?
my lan NIC is eth0 and internet eth1, i already tried the following thingie that doesn't work (i suppose it's logic, but i had to try it ;) )
And, How could i reset all the cbq existing config to remake a new one?
tc qdisc add dev eth1 root handle 10: cbq bandwidth 105Kbit avpkt 1000 tc class add dev eth1 parent 10:0 classid 10:1 cbq bandwidth 105Kbit rate \ 105Kbit allot 1514 weight 15Kbit prio 8 maxburst 20 avpkt 1000
tc class add dev eth1 parent 10:1 classid 10:100 cbq bandwidth 105Kbit rate \ 10Kbit allot 1514 weight 5Kbit prio 5 maxburst 20 avpkt 1000 bounded
tc qdisc add dev eth1 parent 10:100 sfq quantum 1514b perturb 15 tc qdisc add dev eth1 parent 10:200 sfq quantum 1514b perturb 15
tc filter add dev eth1 parent 10:0 protocol ip prio 25 u32 match ip dst \ 192.168.0.0/16 flowid 10:100
(eth1 is the outgoing interface)
# masq a fictious machine and mark it with 0xa (hexadecimal = 10 decimal!) /sbin/ipchains -A forward -s 192.168.0.1/32 -j MASQ -m 0xa
#make root class with 128 kbit
/usr/bin/tc qdisc add dev eth1 root handle 1: cbq bandwidth 128Kbit avpkt 1000
/usr/bin/tc class add dev eth1 parent 1:0 classid 1:1 cbq bandwidth 128Kbit rate 128Kbit \
allot 1514 weight 12Kbit prio 8 maxburst 20 avpkt 1000
#this gives the fictious machine above a bounded bandwidth of 40 kbit
/usr/bin/tc class add dev eth1 parent 1:1classid 1:11 cbq bandwidth 128Kbit rate 40Kbit \
allot 1514 weight 2Kbit prio 5 maxburst 20 avpkt 1000 split 1:1
/usr/bin/tc qdisc add dev eth1 parent 1:11 sfq quantum 1514b perturb 15
#here we add the filter command and give with it 'handle 10' which corresponds to the fictious machine above, which was marked with 10 (=0xa):
/usr/bin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 handle 10 fw classid 1:11
That's it for one machine, the rest you can hopely figure out for yourself ;)
Sander Raaijmakers