
Tengo entendido que se supone que el módulo hashlimit de netfilter implementa el algoritmo de depósito con fugas... estoy usando la siguiente configuración de iptables
iptables -A INPUT -s 207.[...] -m hashlimit --hashlimit-above 34722b/s \
--hashlimit-burst 600m --hashlimit-name hashlimitTable1 \
--hashlimit-htable-expire 604800000 -j DROP
esto funciona perfectamente para una única descarga grande de 700 MB, pero si espero tres horas después de que se complete la descarga y luego hago otra descarga, la regla sigue coincidiendo inmediatamente (sin ráfagas) y limita el ancho de banda a ~34kB/s.
y examinando cat /proc/net/ipt_hashlimit/hashlimitTable1
programas después de la primera descarga grande
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
¿Hashlimit no implementa el algoritmo del "depósito con fugas"? ¿O mi configuración es incorrecta?
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.
esto indica que mi comportamiento esperado es correcto, pero tal vez deba asegurarme de que la regla coincida desde la perspectiva opuesta:
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;
Desafortunadamente, esto da como resultado exactamente el mismo comportamiento observado, incluso cuando se usa wget --limit-rate=1024 http://207.[...]/testFile.bin
para descargar a una velocidad absurdamente baja de 1 KiBps durante más de 19 minutos, sin embargo, la cantidad máxima de tokens nunca aumenta por encima de cero y el ancho de banda después de esperar una hora adicional sin descargas aún está restringido. a ~34KBps...
He confirmado que el tiempo de caducidad, el intervalo de recolección de basura, htable-size y htable-max no tienen ningún efecto sobre el problema. Si hago que la expiración sea realmente corta, como 10 segundos, obviamente se restablecerá la ráfaga, pero eso resultaría en una violación del ancho de banda promedio.