iptables Hashlimit-Burst-Bucket wird nicht nachgefüllt?

iptables Hashlimit-Burst-Bucket wird nicht nachgefüllt?

Nach meinem Verständnis soll das Hashlimit-Modul von Netfilter den Leaky-Bucket-Algorithmus implementieren. Ich verwende die folgende Iptables-Konfiguration.

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

Dies funktioniert einwandfrei für einen einzelnen großen Download von 700 MB. Wenn ich jedoch nach Abschluss des Downloads drei Stunden warte und dann einen weiteren Download durchführe, wird die Regel trotzdem sofort angewendet (kein Burst) und die Bandbreite wird auf ~34 kB/s begrenzt.

und die Prüfung cat /proc/net/ipt_hashlimit/hashlimitTable1zeigt nach dem ersten großen 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

Implementiert hashlimit nicht den „Leaky Bucket“-Algorithmus? Oder ist meine Konfiguration falsch?

ausman 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.

dies zeigt, dass mein erwartetes Verhalten richtig ist, aber vielleicht muss ich sicherstellen, dass die Regel auch aus der entgegengesetzten Perspektive erfüllt wird:

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;

Leider führt dies dazu, dass genau dasselbe Verhalten beobachtet wird, sogar wenn wget --limit-rate=1024 http://207.[...]/testFile.binmit einer absurd niedrigen Rate von 1 KiBps für über 19 Minuten heruntergeladen wird, die maximale Anzahl an Tokens jedoch nie über Null steigt und die Bandbreite nach einer weiteren Wartezeit ohne Downloads immer noch auf ~34 KBps beschränkt ist...

Ich habe bestätigt, dass Ablaufzeit, Garbage-Collect-Intervall, Htable-Größe und Htable-Max keinen Einfluss auf das Problem haben. Wenn ich das Ablaufdatum sehr kurz einstelle, etwa auf 10 Sekunden, wird der Burst natürlich zurückgesetzt, aber das würde zu einer Verletzung der durchschnittlichen Bandbreite führen.

verwandte Informationen