mozg1986 пишет:Вопросик. Шейпер умеет урезать скорость трафика по его типу? Например желаю потоковое видео, аудио, ютуб и скайп смотреть с наивысшим приоритетом, веб-серфинг - приоритет ниже, скачка файлов - приоритет еще ниже, торренты - самый низкий приоритет.
Добрый день, mozg1986.
Шейпер работает с IP-адресами (хостов/сетей), портами (in/out) и мАрками, если есть возможность выделить определённый тип трафика и пометить его (MARK) в iptables. Анализ типа трафика - это "юрисдикция" DPI [Deep Packet Inspection]. Прикручивать OpenDPI (layer7) в виде модулей iptables - для новичков дело нетривиальное, а пакеты отсутствуют. Можно, конечно заюзать пакет xtables-addons. Касаемо маркировки торрентов - модуль xt_ipp2p. Однако, торрент при этом живее всех живых (UDP + порты > 1024 + шифрование), а значит маркировать его для последующей отправки в шейпер - не эффективно. Одновременно смотрим, что пишут на manpages.org/xtables-addons/8 про ipp2p, дословно:
This module matches certain packets in P2P flows. It is not designed to match all packets belonging to a P2P connection --- use IPP2P together with CONNMARK for this purpose.
и завершается ман недвусмысленной нотой, в стиле "самое главное в конце..."
Note that ipp2p may not (and often, does not) identify all packets that are exchanged as a result of running filesharing programs.
Думаю, тут всё понятно без перевода.
Лично мне не удалось ухватить торрента за хвост, но попытки были...
Совершенно случайно обнаружил репост своей давней темы, относительно блокировки торрентов:
вот здесь нажмите. Тема в своё время была очень весёлая и интересная. Имеете полное право ознакомиться и посмеяться от души. )) Оригинал указан ссылкой внизу (в статье), если нужно больше информации. Ну и как эпилог, если имеете личые наработки на предмет маркировки/блокировки пиринга с помощью iptables - прошу опубликовать этот код в теме. Научим Енота детектить торрент совместными усилиями, если Вы не против.
Продолжим...
C другой стороны, если качальщик (торрент, не торрент, ftp, web, etc) находится в списке правил шейпера, он не вырвется за пределы настроек, применяемых к нему, а будет "плясать" возле них. Проще говоря, шейпер не занимается анализом типа трафика, но он с удовольствием прижмёт качальщика к плинтусу вне зависимости от типа трафика.
Чтобы кого-то "отшейпить", необходимо "привязаться" либо к IP, либо к порту, либо к мАркам. Из Вашего пожелания видно, что Вы хотите применить метод нарезки по полосам для всей локальной сети? Если это так и если есть возможность "привязаться" к порту - то да, шейпер может изобразить такой финт.
Правила шейпинга в этом случае будут такими:
Для web-серфинга:
--------------------------------
..
RULE=*:80
RULE=*:443
LEAF=sfq
PRIO=1
Для FTP:
--------------------------------
...
RULE=*:20
RULE=*:21
LEAF=sfq
PRIO=3
где:
--------------------------------
RULE - правило. Их кол-во может быть > 1 для одной цели
* - входящий/исходящий трафик откуда угодно, куда угодно
:port - понятно
sqf - равномерное распределение для всех в локалке
PRIO=N - собственно приоритет
Теперь рассмотрим скайп.
Для скайпа жизненно важными являются порты 80, 443 и выше 1024. Т.е. на языке правил шейпера нам, как ни крути, придётся использовать то же правило, что мы написали с Вами выше для web-серфинга. А поскольку мы решили использовать вариант деления на полосы для ВСЕХ, то и приоритет, и ширина upload/download будут одинаковы для скайпа и для серфинга.
Как работает шейпер:
--------------------------------
Если хост не прописан в таблице правил, он "тусуется" в компании таких же "непрописанных" и к ним применяются правила по дефолту, т.е. с самым низким приоритетом. Как только хост попадает в таблицу правил, шейпер на основании привязки (IP/порт) начинает заниматься обрезаниями и приоритизацией. Одновременно строятся правила маркировки на основании этих данных для WAN.
Функционал деления на полосы для всей локальной сети в Еноте не реализован. Вместо этого применяется метод "точечной" нарезки, т.е. индивидуально для каждого хоста в локалке, описанного в таблице правил.
В принципе, можно запихать в Енота и генерацию произвольных правил, в частности для деления на пОлосы, что-то вроде "глобальных правил" шейпинга. В этом случае админу потребуется следить за тем, чтобы одни не перекрывали другие.
С уважением,
alex_q_2000
p.s. Надеюсь, я не слишком утомил Вас длинным ответом. Может быть нужно было как-то покороче. Но люблю, знаете ли, начать издалека, т.с. ))