@WerkkreW me pegou no caminho certo. A solução que vou usar é usar o squid e seu recurso delay_pools.
O conceito básico é configurar pools de retardo por host (classe 3) em squid.conf
e, em seguida, definir cada um deles para a quantidade máxima de largura de banda que desejo permitir por usuário por dia. Em seguida, defina a taxa de "preenchimento" como a quantidade máxima de largura de banda dividida pelo tempo de um dia, para que cada pool de atraso seja preenchido completamente em um dia.
Por fim, usando iptables
, eu redirecionarei de forma transparente os pedidos recebidos na porta 80 da minha LAN para o squid, em vez de DNAT diretamente, para que os usuários na rede interna sejam submetidos às restrições de largura de banda.
Obrigado novamente, WerkkreW, por me apontar na direção certa.