We have a Linux-based router which is currently working fairly well, but our network only has a 1.5 mbps incoming connection. The network is small, but during high load periods some systems can end up dominating the bandwidth. For example, a client downloading a file can easily saturate the connection leaving everyone else with barely any access to the outside world.
Naturally, I'd like to fix this. I believe a combination of iptables rules and tc is in order, but I have no idea how to go about distributing the bandwidth evenly across the clients.
It would be nice if there was a way to divide the bandwidth only across clients that are actually utilising the connection as well, rather than hard limit each connection to (bandwidth / number of clients).
If it's web traffic, you're talking about, Squid can do this. It can restrict the max bandwidth for all users and the max bandwidth per user.
I implemented this solution to fix this exact problem.
If you ever want to use something else, do not use tc. It's a mess. Use OpenSolaris and flowadm which is muuuuch simpler.
Here is something that looks like the scripts I used once:
http://www.amiryan.org/2009/02/16/traffic-shaping-under-linux-with-tc-and-iptables/
HTH