Я планирую использовать iptables
для измерения моего интернет-трафика (вдохновленный замечательной статьей Питера Круминьша http://www.catonmat.net/blog/traffic-accounting-with-iptables).
Компьютер, предназначенный для измерения трафика, в настоящее время перенаправляет весь трафик LAN в Интернет и из него.
Пытался разобраться, в каких цепочках засчитываются все переданные байты (загрузка + загрузка). В filter
FORWARD
цепочка - единственная цепочка, размер которой превышает мегабайт после открытия нескольких веб-сайтов (она показывает 17M
). Вроде бы загрузка (+ может закачка).
Но следующее наблюдение вызвало у меня подозрение:
me@computer:~$ sudo iptables -vL -t raw
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
me@computer:~$ sudo iptables -vL -t raw
Chain PREROUTING (policy ACCEPT 34 packets, 2244 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 16 packets, 2664 bytes)
pkts bytes target prot opt in out source destination
Хотя я посетил некоторые веб-сайты, raw
PREROUTING
цепочка все еще имела 0 байтов при запуске sudo iptables -vL -t raw
первый раз (первый запуск sudo iptables -vL -t raw
выделялся длительным временем выполнения (более секунды). Через несколько секунд оба raw
цепочки имели более 2000 байт.
Мне кажется, что он начинает отсчет после первого запроса и пропускает все предыдущие байты.
Я ожидал raw
PREROUTING
цепочка для подсчета все байтов перенаправленного трафика LAN, поскольку следующая блок-схема предполагает, что: http://stuffphilwrites.com/2014/09/iptables-processing-flowchart
Мне удалось воспроизвести нули на счетчиках при первом запуске iptables --list --verbose -t raw
. И причина в моем случае просто заключалась в том, что iptable_raw
не был загружен, пока я не запустил команду.
Поскольку мне не нужен raw
В моей настройке этот модуль обычно не загружается, и только после того, как я запустил эту команду, модуль был загружен.
Бегом rmmod iptable_raw
Я могу выгрузить модуль, и при следующем запуске iptables --list --verbose -t raw
счетчики сброшены на ноль.
Все работает как задумано. И я думаю, что то же самое случилось с вами. Если вы создаете правила в raw
table модуль будет автоматически загружен, и если вам не нужны какие-либо правила в этой таблице, нет необходимости загружать модуль.
Для перечисления действующих правил рекомендую использовать iptables-save
который выведет правила в формате, который можно загрузить обратно с помощью iptables-restore
. Он покажет все соответствующие детали ваших текущих правил, и он не будет загружать какие-либо дополнительные модули, он покажет только те, которые в настоящее время загружены.
Задержка при первом запуске команды может быть объяснена множеством разных причин, трудно сказать, какая именно из них была для вас. Но одна из возможностей заключается в том, что диск, с которого нужно было загрузить модуль, был остановлен во время простоя, и вам нужно было дождаться, пока этот диск раскрутится.