Я изо всех сил пытался перенести правила IPTable с Ubuntu 10.04 на Ubuntu 12.04. Проблема в том, что квота вроде бы нарушена. Возьмем этот очень простой пример правила квот.
iptables -t mangle -A POSTROUTING -o eth0 -p tcp -m quota --quota 500000 -j ACCEPT
В Ubuntu 10.04 это то, что мы видим, когда передаем байты через eth0.
(root @ dev) - (~) $ iptables -L -t mangle -v | квота grep
146 111K ACCEPT tcp - любой eth0 в любом месте квота: 389148 байт
(root @ dev) - (~) $ iptables -L -t mangle -v | квота grep
667 348K ACCEPT tcp - любой eth0 в любом месте квота: 152577 байт
Вы можете видеть, что квота уменьшается, а использованные байты растут (второй столбец).
Однако, когда я использую те же правила в Ubuntu 12.04, происходит следующее.
(root @ LU1) - (~) $ iptables -L -t mangle -v | квота grep
14 2544 ACCEPT tcp - любой eth0 в любом месте квота: 500000 байт
(root @ LU1) - (~) $ iptables -L -t mangle -v | квота grep
19 3188 ACCEPT tcp - любой eth0 в любом месте квота: 500000 байт
Счетчик использованных байтов увеличивается, но квота не уменьшается. Однако он считает его, и если квота израсходована, он перейдет к следующему правилу. Однако есть вторая проблема, потому что, когда вы перезагружаете сервер и сохраняете правила, квота снова сбрасывается, даже если она была полностью израсходована.
Итак, в основном есть две проблемы: квота заметно не снижается и сбрасывается при перезагрузке, хотя я сохраняю правила.
Ядро в Ubuntu 12.04 - это общий вывод lsmod 3.2.0-44: http://sparage.us/OfEc
Может ли кто-нибудь объяснить мне, что происходит и откуда эта разница в поведении? Или еще лучше предложить решение? Я действительно застрял на этом, и я был бы признателен любому из вас, который может мне дать.
Я ответил на свой вопрос, копаясь в изменениях ядра.
Я наткнулся на этот коммит. То, что я считал ошибкой, было фактическим предполагаемым поведением патчера. Я сделал патч для недавнего ядра 3.2, чтобы отменить эту фиксацию, и все снова работает. Я надеюсь, что это поможет кому-нибудь еще несколько часов поискать в Google.