Até onde eu sei, 'tc match' não pode ser usado com o ipv6. Você terá que usar o iptables com '-j CLASSIFY'.
Com o iptables, o processamento continua depois que uma correspondência é encontrada. Com o tc, o flowid redireciona o pacote para a classe e para o processamento.
Sobre a árvore, acho que o que você quer é:
- qdisc raiz
- classe com toda a largura de banda (assim as classes folha podem emprestar)
- duas classes, com, por exemplo, 20% (externo) e 80% (interno) da largura de banda garantida e 100% no máximo: você não pode ter mais de 100% garantido
- qdisc de uma folha (pfifo, fq, fq_codel) por classe
Embora eu não conheça sua arquitetura. Se você estiver usando o NAT, você terá que ser preciso (sem intervalo) nas regras do iptables. Se você estiver usando um proxy reverso, não poderá diferenciar o tráfego interno e externo.
Se você tiver um proxy reverso, as alternativas são:
- Forma no nível 7 (com mod_bw e equivalente para ftp), porque você poderá ver o cabeçalho X-Forwarded-For
- Configure o shaper no seu roteador de borda / Firewall (aquele com um IP público), porque você poderá ver o IP público (lembre-se de que você está sempre trabalhando no link de upload)
Dependendo da sua capacidade de fazer isso, a melhor opção é a segunda, porque você poderá modelar com precisão, com base na sua largura de banda WAN e não na NIC de 1 ou 10 Gb do seu servidor web. É sua melhor opção mesmo sem um proxy reverso.
Sobre a escolha da classe, você deve usar htb ou hfsc para um melhor uso da largura de banda dinâmica e a opção 'default' no qdisc raiz.