O balde de estouro de hashlimit do iptables não está sendo recarregado?

O balde de estouro de hashlimit do iptables não está sendo recarregado?

meu entendimento é que o módulo hashlimit do netfilter deve implementar o algoritmo de balde vazado ... estou usando a configuração de iptables abaixo

iptables -A INPUT -s 207.[...] -m hashlimit --hashlimit-above 34722b/s \
--hashlimit-burst 600m --hashlimit-name hashlimitTable1 \
--hashlimit-htable-expire 604800000 -j DROP

isso funciona perfeitamente para um único download grande de 700 MB, mas se eu esperar três horas após a conclusão do download e fizer outro download, a regra ainda corresponderá imediatamente (sem burst) e limitará a largura de banda a ~ 34kB/s.

e examinar cat /proc/net/ipt_hashlimit/hashlimitTable1programas após o primeiro grande download

                     This seems to represent the burst "bucket" size
                      and it does go down and reach 0 after 600 MB
                      have been downloaded, but it never increases
                              no matter how long I wait.
                                       |
                                       |
604555 0.0.0.0:0->0.0.0.0:0 4194304000 0 1931967

O hashlimit não implementa o algoritmo "leaky bucket"? Ou minha configuração está incorreta?

deman 8 iptables-extensions|grep -e 'hashlimit-burst amount' -A 7

--hashlimit-burst amount
       Maximum  initial  number  of  packets to match: this number gets
       recharged by one every time the limit  specified  above  is  not
       reached,  up  to this number; the default is 5.  When byte-based
       rate matching is requested, this option specifies the amount  of
       bytes  that  can  exceed  the given rate.  This option should be
       used with caution -- if the entry expires, the  burst  value  is
       reset too.

isso indica que meu comportamento esperado está correto, mas talvez eu precise garantir que a regra corresponda na perspectiva oposta:

iptables -A INPUT -s 207.[...] -m hashlimit --hashlimit-upto 34722b/s \
--hashlimit-burst 600m --hashlimit-name hashlimitTable1 \
--hashlimit-htable-expire 604800000 -j ACCEPT;
iptables -A INPUT -s 207.[...] -j DROP;

Infelizmente, isso resulta exatamente no mesmo comportamento observado, mesmo quando usado wget --limit-rate=1024 http://207.[...]/testFile.binpara download a uma taxa absurdamente baixa de 1KiBps por mais de 19 minutos, mas o número máximo de tokens nunca aumenta acima de zero e a largura de banda após esperar uma hora adicional sem downloads ainda é restrita para ~34 KBps...

Confirmei que o tempo de expiração, o intervalo de coleta de lixo, o tamanho do htable e o htable-max não têm nenhum efeito no problema. Se eu tornar a expiração muito curta, como 10 segundos, obviamente isso redefinirá o burst, mas isso resultaria na violação da largura de banda média.

informação relacionada