tc filtros não funcionam com DRR

1

Estou tentando controlar o tráfego de saída de duas VMs com o qdisc de DRR.

Esta é a hierarquia que eu quero ter:

                 root
                  |
              qdisc drr
                 1:
            /     |      \  
           /      |       \
  class drr    class drr     class drr
 quantum 200  quantum 800  (w/ max quantum)
    1:1          1:2            1:3

O tráfego da VM1 deve ir para 1: 1, tráfego da VM2 para 1: 2, todo o restante para 1: 3 (já que a DRR não tem classe padrão). O tráfego de saída das VMs é marcado com 1 resp. 2. Com iptables -L -v -n -t mangle , posso ver que os pacotes foram marcados corretamente.

Eu configuro isso com os seguintes comandos:

tc qdisc add dev wlan0 handle 1: root drr
tc class add dev wlan0 parent 1: classid 1:1 drr quantum 200
tc class add dev wlan0 parent 1: classid 1:2 drr quantum 800
tc class add dev wlan0 parent 1: classid 1:3 drr #used as default class
tc filter add dev wlan0 parent 1: protocol ip prio 1 handle 1 fw classid 1:1
tc filter add dev wlan0 parent 1: protocol ip prio 1 handle 2 fw classid 1:2
tc filter add dev wlan0 parent 1: protocol ip prio 2 u32 match ip dst 0.0.0.0/0 classid 1:3 #match everything

Mas com essa configuração não consigo acessar a rede. Quase todos os pacotes são descartados pelo qdisc raiz.

Estas são as saídas após o envio de 83 pacotes da VM1 (todos sendo marcados corretamente).

#tc -s class show dev wlan0
class drr 1:1 root quantum 200b
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
 deficit 0b
class drr 1:2 root quantum 800b
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
 deficit 0b
class drr 1:3 root quantum 1514b
 Sent 118029 bytes 497 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
 deficit 0b

#tc -s qdisc show dev wlan0
qdisc drr 1: root refcnt 2
 Sent 117057 bytes 493 pkt (dropped 3372, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0

Como você pode ver, não há pacotes sendo direcionados para 1: 1 e do tráfego não-VM, apenas uma pequena parte é direcionada para 1: 3.

Ao usar os mesmos comandos de filtro com o HTB, tudo funciona conforme o esperado. O que estou fazendo errado aqui?

    
por Backswitch 14.02.2016 / 20:21

1 resposta

0

Como a DRR não tem fila padrão, você precisa atribuir o tráfego arp a uma fila específica ou esses pacotes serão descartados, levando a sua máquina a esquecer o endereço físico do gateway.

    
por 17.02.2016 / 12:07