База знаний

www. IT-Mehanika .ru --  журнал доброго админа

Mikrotik-Qos Приоритезация по типу трафика и деление скорости

Автор данной статьи Григорьев Дмитрий (Inlarion)

http://habrahabr.ru/post/131295/

Доброго времени суток, сегодня речь пойдет о наболевшем, а именно о том, как грамотно разделить интернет канал, чтобы все ваши пользователи были максимально довольны.
Начнем с того, что я по традиции как и все остальные специалисты отправлю вас курить мануалы… Зачем? Да только для того чтобы вы хотя бы чуть-чуть образно представили как будут протекать процессы деления скорости. Потому что как показывает практика — любые действия без осознания принципов работы, приводит лишь к куче вопросов, потерянному времени и злому бухгалтеру, ну или директору у которого по вашей вине сегодня утром не открылась страничка с загорелыми блондинками :)


Итак, мануалы:

Замечательная статья Кузьмицкого Александра — Делим Интернет или QoS на Mikrotik
Читать раз десять, до полного понимания, если не понимаете — читайте еще раз…

Две статьи от Сергея Лаговского:
MikroTik — QoS / Bandwidth Control /Простое ограничение
MikroTik — QoS / Bandwidth Control / Индивидуальные правила
Будет очень полезно для закрепления основных навыков…

Хорошая, но не законченная презентация от Мегиса (Megis), ну и ее перевод от white_crow за что ему огромное спасибо…
QoS_Megis.pdf
QoS_Megis_(Russian_translate_by_white_crow_rev.2).pdf

Данная презенташка содержит ошибку, подробнее о ней читайте в следующей доке.

Русский вариант Mikrotik Wiki
http://wiki.mikrotik.com/wiki/Руководства: Очередь_(Queue)
Не нужно сейчас брызгать слюной и говорить, что вы итак все знаете, присмотритесь, особенно в комментарии, откроете для себя чуточку нового, особенно того где находится SRC-NAT и почему из-за него неправильно режется исходящая скорость.

Ну что? Начитались? Уже появилась кучка вопросов?
Пошарив по просторам интернета, было выявлено, что у администраторов микротика возникает ряд схожих проблем и вопросов, связанных с QoS в целом, приоритезацией и нарезкой трафика, что в принципе одно и то же. Однако, как правило, это либо незаконченные статьи, либо брошенные на самом интересном месте ветки форумов.
Основные цели, проблемы и вопросы в них следующие:

  • Как разделить скорость поровну между пользователями?
  • Как повысить приоритет определенного типа трафика?
  • Как выделить приоритет определенному пользователю?
  • Как снизить приоритет торрентов и прочего P2P трафика, чтобы торренты не забивали канал, но если канал свободен, отдать всю скорость?
  • Как сделать быстрый отклик до определенных ресурсов?
  • Как разделить пользователей на группы с разными приоритетами?
  • Как снизить приоритет закачкам, чтобы интернет странички шустро открывались?
  • Как не ограничивать скорость внутренних (региональных ресурсов) если они приходят по одному и тому же каналу?
  • Почему шейпер не выдает полную скорость?


И это только основные вопросы…

Почитав и немного поразмыслив, я пришел к выводу, что очень даже было бы ничего придумать, что-нибудь такое универсальное, легко масштабируемое, и крайне юзабильное для администратора. Через пару дней в голову пришел план реализации, а еще через неделю все уже было готово…

В общем, была поставлена задача:

Задача 1.


Разделить трафик по приоритету.
Шарив по интернету, натолкнулся на предупреждения, мол, p2p трудно пометить, скайп тоже. И вообще приоритезация по типу трафика не очень хорошая идея на микротике.

Ко всему смутили золотые слова о том, что мы не можем контроллировать входящий трафик который валится к нам из интернета, т.к. он УЖЕ ПРИШЕЛ на наш входящий интерфейс. Но у этих слов есть оговорка — Да, мы не можем контроллировать то, что уже пришло на интерфейс, но мы можем задержать этот трафик тем самым за счет контрольных полей пакетов которые прийдут с задержками, мы можем сообщить серверу что наш клиент не может так быстро принимать данные. В следствии чего сервер будет отправлять пакеты чуть-чуть медленнее.

Итак, вопрос закрыт, разделению трафика по приоритету быть!

Было принято взвешенное решение: «Если не получается пометить низкоприоритетный трафик, будем метить весь трафик как низкоприоритетный, а потом из этой кучи переразмечать и выдергивать высокоприоритетный»Â 

Для разделения трафика было принято четыре группы (Класса) трафика:

CLASS-A
CLASS-B
CLASS-C
CLASS-D

CLASS-A -имеет самый высший приоритет, и будет пропускаться в самую первую очередь.
CLASS-D -имеет самый низкий приоритет и будет пропускаться только в случае незанятости канала более высокими классами.

Задача 2.

Разделение общего потока на группы пользователей с разным приоритетом.
Тут в принципе вопросов как таковых не возникало. Было принято решение сделать 5 групп пользователей с разным приоритетом, приоритеты очередей были распределены внахлест, чтобы трафик высокого класса нижней группы мог конкурировать с трафиком верхней группы среднего или низкого класса.
В итоге пять групп: 

GROUP-A
GROUP-B
GROUP-C
GROUP-D
GROUP-E

GROUP-A — имеет самый высокий приоритет, клиенты этой группы распределяют очередь между собой поровну согласно указанным выше классам.
GROUP-E — имеет самый низкий приоритет, клиенты этой группы распределяют очередь между собой поровну согласно указанным выше классам. Если группы с более высоким приоритетом полностью займут весь лимит, данная группа сможет передавать только трафик высокого класса, согласно теории вероятности и закону подлости — данная группа вообще не сможет передавать никакого трафика, пока канал не станет посвободнее, поэтому для всех групп стоит установить параметр Limit-At который даст некоторую гарантию, что у людей, хотя бы аськи будут работать.

В итоге мы получаем дерево, слева имена, справа приоритеты:

GROUP-A
CLASS-A 1
CLASS-B 2
CLASS-C 3
CLASS-D 4
GROUP-B
CLASS-A 2
CLASS-B 3
CLASS-C 4
CLASS-D 5
GROUP-C
CLASS-A 3
CLASS-B 4
CLASS-C 5
CLASS-D 6
GROUP-D
CLASS-A 4
CLASS-B 5
CLASS-C 6
CLASS-D 7
GROUP-E
CLASS-A 5
CLASS-B 6
CLASS-C 7
CLASS-D 8

В точках пересечения приоритетов, классы разных групп при наличии на них трафика будут делить доступную им скорость.
К примеру, 
GROUP-A CLASS-C PRIO 3 пытается полностью забить канал

Только следующие классы получат разрешение на передачу пакетов: 
GROUP-A CLASS-A 1
GROUP-A CLASS-B 2
GROUP-B CLASS-A 2
GROUP-B CLASS-B 3
GROUP-С CLASS-A 3
причем классы с одинаковым приоритетом будут делить скорость поровну между собой, классы с более высоким приоритетом отнимают скорость у классов с более низким.

Задача 3.

Приоритезация доступа к определенным ресурсам.
После разметки трафика по типам, я добавил правила, которые будут отдавать приоритет определенным ресурсам, и разделил их на три класса:
CLASS-A-SITES
CLASS-B-SITES
CLASS-C-SITES
Добавляя списки в /ip firewall address-list под соответствующими именами, мы можем направить трафик в нужный нам класс. 

Задача 4.

Ускорить потоки первых соединений.
Весьма двоякая польза от данной фишки, после маркировки по типу трафика и по направлению к ресурсам было решено добавить три правила. 

Все закачки размером не более 5 килобайт помещаются в CLASS-A
Все закачки размером от 5 до 50 килобайт будут перемещены в CLASS-B
Все закачки размером от 50 до 100 килобайт будут перемещены в CLASS-C
После 100 килобайт пакеты перестанут помечаться и как правило попадут в CLASS-D, данные правила не действуют для трафика CLASS-A т.к. он итак самый приоритетный.

Все это работает как своеобразный Burst для коротких соединений, быстрая подгрузка страниц, шустрые соединения по удаленке, быстрый пролет im-сообщений и пр.
Обратная сторона медали, все соединения получат данный Burst в т.ч. и P2P.

Задача 5.

Исключить из шейпера приходящие в микротик региональные ресурсы провайдера.
Для решения этой задачи, в правилах которые помечают потоки в разные классы, в полях Src.address list и Dst.address list был добавлен список !ShaperExclude, все адреса и диапазоны адресов попавшие в этот список будут пропускаться правилами шейпера и региональные ресурсы перестанут ограничиваться по скорости.

Задача 6.

Оставить администратору возможность управления профилями PCQ для каждой группы отдельно.
Для решения данной задачи было создано десять профилей, пять на загрузку, пять на отдачу, по два на группу.

Задача 7.

Слепить все это счастье вместе при следующих условиях:
Правила в /ip firewall mangle не должны блокировать пакеты в цепочках, т.е. passthrough=yes должен быть во всех правилах.
На микротике включен SRC-NAT что очень сильно скажется на просторах для творчества.

С задачами мы определились, теперь осталось дело за реализацией и результатом.

Реализовывать, учитывая условия и поставленные задачи мы будем с помощью очередей PCQ, помечать пакеты будем в цепочках forward и prerouting.

Итак, выдержка из справки:
QoS включает несколько возможностей, в следующем порядке: 

1. mangle chain prerouting
2. HTB global-in
3. Mangle chain forward
4. Mangle chain postrouting
5. HTB global-out
6. HTB out interface

поэтому в пределах одного роутера можно дважды шейпить трафик: 

a) #1 и #2 для первой маркировки трафика и последующего шейпинга, и #3+#5 для второй
b) #1 и #2 для первой маркировки трафика и последующего шейпинга, и #3+#6 для второй
c) #1 и #2 для первой маркировки трафика и последующего шейпинга, и #4+#5 для второй
d) #1 и #2 для первой маркировки трафика и последующего шейпинга, и #4+#6 для второй


Так же кто все таки не поленился и еще разок покурил мануалы о которых я говорил в самом начале. По презенташке от Мегиса видно что приоритезация по типу должна лежать в пределах PREROUTING-GLOBAL-IN а нарезка скорости FORWARD-HTB INTERFACE. 

Первое и архиважное, не имеет смысла сначала делать приоритезцию а потом нарезать трафик к пользователю, т.к. это будет иметь смысл только при под завязку забитом интернет канале. А если пользователь заколотит свой канал то толку от такой приоритезации будет мало.

Второе и очень важное замечание.
Цепочка FORWARD-HTB INTERFACE не будет работать с исходящим каналом т.к. HTB INTERFACE находится после SRC-NAT, тоже самое относится и к цепочке FORWARD-GLOBAL-OUT, очереди PCQ по этим цепочкам не работают, кто не верит можете настроить пару правил и по экспериментировать.

Третье важное замечание.
При включенном SRC-NAT в цепочке PREROUTING-GLOBAL-IN не получится отловить входящий трафик, вернее получится с большим извратом и работать будет не очень хорошо.

И последнее, сейчас кину большой кирпич в огород тем, кто кричит, что использование Global-in, Global-out, Global-Total в качестве Parent это не правильно и вообще полная ересь. Так вот, уважаемые, представьте на секунду что к вам в огород прилетел кирпич, а к нему привязана витуха от вашего ВТОРОГО провайдера. Улавливаете о чем речь? Сколько можно тратить ресурсы роутера на дубляж правил? А если их не два а пять будет?

Ну и хватит критики…

Так вот, раз уж так получилось, что помечать, а потом резать нельзя, будем помечать и резать одновременно.
Раз в цепочке Forward не работает шейпер на исходящий трафик, значит, будем делать его в цепочке PREROUTING-GLOBAL-TOTAL
Раз в цепочке Prerouting мы не можем знать какому из серых адресов прилетел пакетег, значит помечать мы их будем в цепочке FORWARD-GLOBAL-OUT.

Как сказал Гагарин: «Поехали!»


Для начала добавим парочку L-7 наборов для определения типа трафика:


/ip firewall layer7-protocol
add name=Skype regexp="^..\\x02............."
add name=radmin regexp="^\\x01\\x01(\\x08\\x08|\\x1b\\x1b)\$"
add name=rdp regexp="rdp\r\
\nrdpdr.*cliprdr.*rdpsnd"
add name=http regexp="http/(0\\.9|1\\.0|1\\.1) [1-5][0-9][0-9]|post [\\x09-\\x\
0d -~]* http/[01]\\.[019]"
add name=Jabber regexp=\
"Пометим весь трафик в CLASS-D
/ip firewall mangle
add action=accept chain=forward comment=CLASS-D disabled=yes
add action=mark-connection chain=forward comment=ALLTRAFFIC disabled=no new-connection-mark=CLASS-D passthrough=yes
add action=mark-packet chain=forward comment=CLASS-D-GROUP-E-DL connection-mark=CLASS-D disabled=no dst-address-list=GROUP-E new-packet-mark=CLASS-D-GROUP-E-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-D-GROUP-D-DL connection-mark=CLASS-D disabled=no dst-address-list=GROUP-D new-packet-mark=CLASS-D-GROUP-D-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-D-GROUP-C-DL connection-mark=CLASS-D disabled=no dst-address-list=GROUP-C new-packet-mark=CLASS-D-GROUP-C-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-D-GROUP-B-DL connection-mark=CLASS-D disabled=no dst-address-list=GROUP-B new-packet-mark=CLASS-D-GROUP-B-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-D-GROUP-A-DL connection-mark=CLASS-D disabled=no dst-address-list=GROUP-A new-packet-mark=CLASS-D-GROUP-A-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=prerouting comment=CLASS-D-GROUP-E-UP connection-mark=CLASS-D disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-D-GROUP-E-UP passthrough=yes src-address-list=GROUP-E
add action=mark-packet chain=prerouting comment=CLASS-D-GROUP-D-UP connection-mark=CLASS-D disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-D-GROUP-D-UP passthrough=yes src-address-list=GROUP-D
add action=mark-packet chain=prerouting comment=CLASS-D-GROUP-C-UP connection-mark=CLASS-D disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-D-GROUP-C-UP passthrough=yes src-address-list=GROUP-C
add action=mark-packet chain=prerouting comment=CLASS-D-GROUP-B-UP connection-mark=CLASS-D disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-D-GROUP-B-UP passthrough=yes src-address-list=GROUP-B
add action=mark-packet chain=prerouting comment=CLASS-D-GROUP-A-UP connection-mark=CLASS-D disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-D-GROUP-A-UP passthrough=yes src-address-list=GROUP-A
add action=accept chain=forward comment=CLASS-D disabled=yes


Переразметим пакеты более высокого класса CLASS-C

add action=accept chain=forward comment=CLASS-C disabled=yes
add action=mark-connection chain=forward comment=Proxy disabled=no dst-port=3128 new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=HTTP disabled=no layer7-protocol=http new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=HTTPS disabled=no dst-port=443 new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=FTP disabled=no dst-port=20,21 new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=SFTP disabled=no dst-port=22 new-connection-mark=CLASS-C packet-size=1400-1500 passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=SMTP disabled=no dst-port=25 new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=SMTPS disabled=no dst-port=465 new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=Imap disabled=no dst-port=143 new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=POP3 disabled=no dst-port=110 new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=POP3S disabled=no dst-port=995 new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=IMAPS disabled=no dst-port=993 new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=GIF_FILE disabled=no layer7-protocol=GIF_FILE new-connection-mark=CLASS-C passthrough=yes
add action=mark-connection chain=forward comment=PNG_FILE disabled=no layer7-protocol=PNG_FILE new-connection-mark=CLASS-C passthrough=yes
add action=mark-connection chain=forward comment=CLASS-C-SITES disabled=no new-connection-mark=CLASS-C passthrough=yes src-address-list=CLASS-C-SITES
add action=mark-connection chain=forward comment=CLASS-C-SITES disabled=no dst-address-list=CLASS-C-SITES new-connection-mark=CLASS-C passthrough=yes
add action=mark-connection chain=forward comment="100Kb Connections" connection-bytes=0-100000 disabled=no new-connection-mark=CLASS-C passthrough=yes protocol=tcp
add action=mark-packet chain=forward comment=CLASS-C-GROUP-E-DL connection-mark=CLASS-C disabled=no dst-address-list=GROUP-E new-packet-mark=CLASS-C-GROUP-E-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-C-GROUP-D-DL connection-mark=CLASS-C disabled=no dst-address-list=GROUP-D new-packet-mark=CLASS-C-GROUP-D-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-C-GROUP-C-DL connection-mark=CLASS-C disabled=no dst-address-list=GROUP-C new-packet-mark=CLASS-C-GROUP-C-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-C-GROUP-B-DL connection-mark=CLASS-C disabled=no dst-address-list=GROUP-B new-packet-mark=CLASS-C-GROUP-B-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-C-GROUP-A-DL connection-mark=CLASS-C disabled=no dst-address-list=GROUP-A new-packet-mark=CLASS-C-GROUP-A-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=prerouting comment=CLASS-C-GROUP-E-UP connection-mark=CLASS-C disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-C-GROUP-E-UP passthrough=yes src-address-list=GROUP-E
add action=mark-packet chain=prerouting comment=CLASS-C-GROUP-D-UP connection-mark=CLASS-C disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-C-GROUP-D-UP passthrough=yes src-address-list=GROUP-D
add action=mark-packet chain=prerouting comment=CLASS-C-GROUP-C-UP connection-mark=CLASS-C disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-C-GROUP-C-UP passthrough=yes src-address-list=GROUP-C
add action=mark-packet chain=prerouting comment=CLASS-C-GROUP-B-UP connection-mark=CLASS-C disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-C-GROUP-B-UP passthrough=yes src-address-list=GROUP-B
add action=mark-packet chain=prerouting comment=CLASS-C-GROUP-A-UP connection-mark=CLASS-C disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-C-GROUP-A-UP passthrough=yes src-address-list=GROUP-A
add action=accept chain=forward comment=CLASS-C disabled=yes


Переразметим пакеты более высокого класса CLASS-B

add action=accept chain=forward comment=CLASS-B disabled=yes
add action=mark-connection chain=forward comment=ICQ disabled=no dst-port=5190 new-connection-mark=CLASS-B passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment="Mail.ru Agent" disabled=no dst-port=2041,2042 new-connection-mark=CLASS-B passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=Jabber disabled=no layer7-protocol=Jabber new-connection-mark=CLASS-B passthrough=yes
add action=mark-connection chain=forward comment=IRC disabled=no dst-port=6667-6669 new-connection-mark=CLASS-B passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=SSH disabled=no dst-port=22 new-connection-mark=CLASS-B packet-size=0-1400 passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=TELNET disabled=no dst-port=23 new-connection-mark=CLASS-B passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=SNMP disabled=no dst-port=161-162 new-connection-mark=CLASS-B passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=PPTP disabled=no dst-port=1723 new-connection-mark=CLASS-B passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=L2TP disabled=no dst-port=1701 new-connection-mark=CLASS-B passthrough=yes protocol=udp
add action=mark-connection chain=forward comment=GRE disabled=no new-connection-mark=CLASS-B passthrough=yes protocol=gre
add action=mark-connection chain=forward comment=Skype disabled=no layer7-protocol=Skype new-connection-mark=CLASS-B passthrough=yes
add action=mark-connection chain=forward comment=CLASS-B-SITES disabled=no new-connection-mark=CLASS-B passthrough=yes src-address-list=CLASS-B-SITES
add action=mark-connection chain=forward comment=CLASS-B-SITES disabled=no dst-address-list=CLASS-B-SITES new-connection-mark=CLASS-B passthrough=yes
add action=mark-connection chain=forward comment="50Kb Connections" connection-bytes=0-50000 disabled=no new-connection-mark=CLASS-B passthrough=yes protocol=tcp
add action=mark-packet chain=forward comment=CLASS-B-GROUP-E-DL connection-mark=CLASS-B disabled=no dst-address-list=GROUP-E new-packet-mark=CLASS-B-GROUP-E-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-B-GROUP-D-DL connection-mark=CLASS-B disabled=no dst-address-list=GROUP-D new-packet-mark=CLASS-B-GROUP-D-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-B-GROUP-C-DL connection-mark=CLASS-B disabled=no dst-address-list=GROUP-C new-packet-mark=CLASS-B-GROUP-C-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-B-GROUP-B-DL connection-mark=CLASS-B disabled=no dst-address-list=GROUP-B new-packet-mark=CLASS-B-GROUP-B-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-B-GROUP-A-DL connection-mark=CLASS-B disabled=no dst-address-list=GROUP-A new-packet-mark=CLASS-B-GROUP-A-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=prerouting comment=CLASS-B-GROUP-E-UP connection-mark=CLASS-B disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-B-GROUP-E-UP passthrough=yes src-address-list=GROUP-E
add action=mark-packet chain=prerouting comment=CLASS-B-GROUP-D-UP connection-mark=CLASS-B disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-B-GROUP-D-UP passthrough=yes src-address-list=GROUP-D
add action=mark-packet chain=prerouting comment=CLASS-B-GROUP-C-UP connection-mark=CLASS-B disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-B-GROUP-C-UP passthrough=yes src-address-list=GROUP-C
add action=mark-packet chain=prerouting comment=CLASS-B-GROUP-B-UP connection-mark=CLASS-B disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-B-GROUP-B-UP passthrough=yes src-address-list=GROUP-B
add action=mark-packet chain=prerouting comment=CLASS-B-GROUP-A-UP connection-mark=CLASS-B disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-B-GROUP-A-UP passthrough=yes src-address-list=GROUP-A
add action=accept chain=forward comment=CLASS-B disabled=yes


Переразметим пакеты более высокого класса CLASS-A

add action=accept chain=forward comment=CLASS-A disabled=yes
add action=mark-connection chain=forward comment=DNS disabled=no dst-port=53 new-connection-mark=CLASS-A passthrough=yes protocol=tcp src-port=53
add action=mark-connection chain=forward comment=DNS disabled=no dst-port=53 new-connection-mark=CLASS-A passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=DNS disabled=no dst-port=53 new-connection-mark=CLASS-A passthrough=yes protocol=udp
add action=mark-connection chain=forward comment=NNTP disabled=no dst-port=119 new-connection-mark=CLASS-A passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=Winbox disabled=no dst-port=8291 new-connection-mark=CLASS-A passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=ntp disabled=no dst-port=123 new-connection-mark=CLASS-A passthrough=yes protocol=udp
add action=mark-connection chain=forward comment=VNC disabled=no dst-port=5900-5901 new-connection-mark=CLASS-A passthrough=yes protocol=tcp
add action=mark-connection chain=forward comment=Radmin disabled=no layer7-protocol=radmin new-connection-mark=CLASS-A passthrough=yes
add action=mark-connection chain=forward comment=RDP disabled=no layer7-protocol=rdp new-connection-mark=CLASS-A passthrough=yes
add action=mark-connection chain=forward comment=PING disabled=no new-connection-mark=CLASS-A passthrough=yes protocol=icmp
add action=mark-connection chain=forward comment=CLASS-A-SITES disabled=no new-connection-mark=CLASS-A passthrough=yes src-address-list=CLASS-A-SITES
add action=mark-connection chain=forward comment=CLASS-A-SITES disabled=no dst-address-list=CLASS-A-SITES new-connection-mark=CLASS-A passthrough=yes
add action=mark-connection chain=forward comment="5Kb Connections" connection-bytes=0-5000 disabled=no new-connection-mark=CLASS-A passthrough=yes protocol=tcp
add action=mark-packet chain=forward comment=CLASS-A-GROUP-E-DL connection-mark=CLASS-A disabled=no dst-address-list=GROUP-E new-packet-mark=CLASS-A-GROUP-E-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-A-GROUP-D-DL connection-mark=CLASS-A disabled=no dst-address-list=GROUP-D new-packet-mark=CLASS-A-GROUP-D-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-A-GROUP-C-DL connection-mark=CLASS-A disabled=no dst-address-list=GROUP-C new-packet-mark=CLASS-A-GROUP-C-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-A-GROUP-B-DL connection-mark=CLASS-A disabled=no dst-address-list=GROUP-B new-packet-mark=CLASS-A-GROUP-B-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=forward comment=CLASS-A-GROUP-A-DL connection-mark=CLASS-A disabled=no dst-address-list=GROUP-A new-packet-mark=CLASS-A-GROUP-A-DL passthrough=yes src-address-list=!ShaperExclude
add action=mark-packet chain=prerouting comment=CLASS-A-GROUP-E-UP connection-mark=CLASS-A disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-A-GROUP-E-UP passthrough=yes src-address-list=GROUP-E
add action=mark-packet chain=prerouting comment=CLASS-A-GROUP-D-UP connection-mark=CLASS-A disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-A-GROUP-D-UP passthrough=yes src-address-list=GROUP-D
add action=mark-packet chain=prerouting comment=CLASS-A-GROUP-C-UP connection-mark=CLASS-A disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-A-GROUP-C-UP passthrough=yes src-address-list=GROUP-C
add action=mark-packet chain=prerouting comment=CLASS-A-GROUP-B-UP connection-mark=CLASS-A disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-A-GROUP-B-UP passthrough=yes src-address-list=GROUP-B
add action=mark-packet chain=prerouting comment=CLASS-A-GROUP-A-UP connection-mark=CLASS-A disabled=no dst-address-list=!ShaperExclude new-packet-mark=CLASS-A-GROUP-A-UP passthrough=yes src-address-list=GROUP-A
add action=accept chain=forward comment=CLASS-A disabled=yes


Теперь пожалуй стоит забить пустые адрес-листы, так, для красоты...

/ip firewall address-list
add address=192.168.0.1 disabled=no list=GROUP-A
add address=192.168.0.2 disabled=no list=GROUP-B
add address=192.168.0.4 disabled=no list=GROUP-D
add address=192.168.0.3 disabled=no list=GROUP-C
add address=192.168.0.5 disabled=no list=GROUP-E
add address=0.0.0.0 disabled=no list=CLASS-A-SITES
add address=0.0.0.0 disabled=no list=CLASS-B-SITES
add address=0.0.0.0 disabled=no list=CLASS-C-SITES
add address=192.168.0.0/16 disabled=no list=ShaperExclude
add address=10.0.0.0/8 disabled=no list=ShaperExclude


Теперь когда мы закончили с фаерволом, пришло время заняться типами очередей и посадить печень построить дерево.

Создадим типы очередей

/queue type
add kind=pcq name=GROUP-A-DL pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000
add kind=pcq name=GROUP-B-DL pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000
add kind=pcq name=GROUP-C-DL pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000
add kind=pcq name=GROUP-D-DL pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000
add kind=pcq name=GROUP-E-DL pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000
add kind=pcq name=GROUP-A-UP pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=src-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=150 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000
add kind=pcq name=GROUP-B-UP pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=src-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=150 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000
add kind=pcq name=GROUP-C-UP pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=src-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=150 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000
add kind=pcq name=GROUP-D-UP pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=src-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=150 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000
add kind=pcq name=GROUP-E-UP pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=src-address pcq-dst-address-mask=32 pcq-dst-address6-mask=64 pcq-limit=150 pcq-rate=0 pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000


Обратите пристальное внимание что парамтр PCQ Rate ничем не ограничен, т.к. скорость подпотока я оставил на ваше усмотрение, по умолчанию максимальная скорость подпотока будет ограничена параметром Max.Limit деленого на количество подпотоков, разделенной по классам.

Строим дерево:

/queue tree
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=10M name=DOWNLOAD parent=global-out priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=10M name=UPLOAD parent=global-total priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-A-UP parent=UPLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AA-UP packet-mark=CLASS-A-GROUP-A-UP parent=GROUP-A-UP priority=1 queue=GROUP-A-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BA-UP packet-mark=CLASS-B-GROUP-A-UP parent=GROUP-A-UP priority=2 queue=GROUP-A-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CA-UP packet-mark=CLASS-C-GROUP-A-UP parent=GROUP-A-UP priority=3 queue=GROUP-A-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DA-UP packet-mark=CLASS-D-GROUP-A-UP parent=GROUP-A-UP priority=4 queue=GROUP-A-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-B-UP parent=UPLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AB-UP packet-mark=CLASS-A-GROUP-B-UP parent=GROUP-B-UP priority=2 queue=GROUP-B-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BB-UP packet-mark=CLASS-B-GROUP-B-UP parent=GROUP-B-UP priority=3 queue=GROUP-B-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CB-UP packet-mark=CLASS-C-GROUP-B-UP parent=GROUP-B-UP priority=4 queue=GROUP-B-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DB-UP packet-mark=CLASS-D-GROUP-B-UP parent=GROUP-B-UP priority=5 queue=GROUP-B-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-C-UP parent=UPLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AC-UP packet-mark=CLASS-A-GROUP-C-UP parent=GROUP-C-UP priority=3 queue=GROUP-C-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BC-UP packet-mark=CLASS-B-GROUP-C-UP parent=GROUP-C-UP priority=4 queue=GROUP-C-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CC-UP packet-mark=CLASS-C-GROUP-C-UP parent=GROUP-C-UP priority=5 queue=GROUP-C-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DC-UP packet-mark=CLASS-D-GROUP-C-UP parent=GROUP-C-UP priority=6 queue=GROUP-C-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-D-UP parent=UPLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AD-UP packet-mark=CLASS-A-GROUP-D-UP parent=GROUP-D-UP priority=4 queue=GROUP-D-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BD-UP packet-mark=CLASS-B-GROUP-D-UP parent=GROUP-D-UP priority=5 queue=GROUP-D-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CD-UP packet-mark=CLASS-C-GROUP-D-UP parent=GROUP-D-UP priority=6 queue=GROUP-D-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DD-UP packet-mark=CLASS-D-GROUP-D-UP parent=GROUP-D-UP priority=7 queue=GROUP-D-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-E-UP parent=UPLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AE-UP packet-mark=CLASS-A-GROUP-E-UP parent=GROUP-E-UP priority=5 queue=GROUP-E-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BE-UP packet-mark=CLASS-B-GROUP-E-UP parent=GROUP-E-UP priority=6 queue=GROUP-E-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CE-UP packet-mark=CLASS-C-GROUP-E-UP parent=GROUP-E-UP priority=7 queue=GROUP-E-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DE-UP packet-mark=CLASS-D-GROUP-E-UP parent=GROUP-E-UP priority=8 queue=GROUP-E-UP
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-A-DL parent=DOWNLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AA-DL packet-mark=CLASS-A-GROUP-A-DL parent=GROUP-A-DL priority=1 queue=GROUP-A-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BA-DL packet-mark=CLASS-B-GROUP-A-DL parent=GROUP-A-DL priority=2 queue=GROUP-A-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CA-DL packet-mark=CLASS-C-GROUP-A-DL parent=GROUP-A-DL priority=3 queue=GROUP-A-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DA-DL packet-mark=CLASS-D-GROUP-A-DL parent=GROUP-A-DL priority=4 queue=GROUP-A-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-B-DL parent=DOWNLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AB-DL packet-mark=CLASS-A-GROUP-B-DL parent=GROUP-B-DL priority=2 queue=GROUP-B-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BB-DL packet-mark=CLASS-B-GROUP-B-DL parent=GROUP-B-DL priority=3 queue=GROUP-B-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CB-DL packet-mark=CLASS-C-GROUP-B-DL parent=GROUP-B-DL priority=4 queue=GROUP-B-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DB-DL packet-mark=CLASS-D-GROUP-B-DL parent=GROUP-B-DL priority=5 queue=GROUP-B-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-C-DL parent=DOWNLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AC-DL packet-mark=CLASS-A-GROUP-C-DL parent=GROUP-C-DL priority=3 queue=GROUP-C-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BC-DL packet-mark=CLASS-B-GROUP-C-DL parent=GROUP-C-DL priority=4 queue=GROUP-C-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CC-DL packet-mark=CLASS-C-GROUP-C-DL parent=GROUP-C-DL priority=5 queue=GROUP-C-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DC-DL packet-mark=CLASS-D-GROUP-C-DL parent=GROUP-C-DL priority=6 queue=GROUP-C-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-D-DL parent=DOWNLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AD-DL packet-mark=CLASS-A-GROUP-D-DL parent=GROUP-D-DL priority=4 queue=GROUP-D-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BD-DL packet-mark=CLASS-B-GROUP-D-DL parent=GROUP-D-DL priority=5 queue=GROUP-D-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CD-DL packet-mark=CLASS-C-GROUP-D-DL parent=GROUP-D-DL priority=6 queue=GROUP-D-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DD-DL packet-mark=CLASS-D-GROUP-D-DL parent=GROUP-D-DL priority=7 queue=GROUP-D-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=GROUP-E-DL parent=DOWNLOAD priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-AE-DL packet-mark=CLASS-A-GROUP-E-DL parent=GROUP-E-DL priority=5 queue=GROUP-E-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-BE-DL packet-mark=CLASS-B-GROUP-E-DL parent=GROUP-E-DL priority=6 queue=GROUP-E-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-CE-DL packet-mark=CLASS-C-GROUP-E-DL parent=GROUP-E-DL priority=7 queue=GROUP-E-DL
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name=CLASS-DE-DL packet-mark=CLASS-D-GROUP-E-DL parent=GROUP-E-DL priority=8 queue=GROUP-E-DL


На этом можно сказать реализация закончена.

Еще я думаю стоит сказать о необходимости использования параметров Limit-at и Max-limit в каждой группе хотя бы из соображений того, что интернет нужен всем :) 
Так же полезно настроить профили групп, опять пну вас в сторону презентации от Мегиса в которой говорится о размере очереди, задержках и потерях пакетов.

Еще дополнительно для новичков скажу пару слов: Данный набор правил абсолютно бесполезен если не задать в корняхDOWNLOAD и UPLOAD значения Max-Limit
Значения Max-Limit стоит ставить МЕНЬШЕ реальной скорости вашего канала в интернет процентов на 5-10, в противном случае настройка будет абсолютно бессмысленной, т.к. ваш провайдер будет дропать или задерживать пакеты которые не помещаются в выходной поток.

В общих чертах все, все остальное делается на вкус и цвет, изменение приоритета производится сменой метки соединения и перемещением правила по списку.
Добавление нового определенного типа аналогичным способом или банальным копированием правила с последующим перемещением и редактированием.

При наличии нескольких каналов, в параметре Max.Limit задается сумма скоростей этих каналов.

Для вашего удобства выкладываю RSC файл импорта в систему, а так же скриншоты для более полного представления работы. Пользуйтесь на здоровье!

Mangle

image
Полноразмерная пикча

Queue

image
Полноразмерная пикча

Хочу выразить огромную благодарность всем тем гениальным людям, кто своими знаниями и ответами на форумах навел на правильные мысли и правильное направление. 
Данная статья может содержать некоторые неточности в описании, в силу отсутствия высокой квалификации автора и недостатка свободного времени. 

Буду очень рад вашим «Спасибо!» которые следует направлять лично мне, по координатам которые вы сможете найти в профиле.
Так же выслушаю и обдумаю конструктивную критику с вашей стороны, буду рад общению со специалистами работающими в подобном направлении, учту ваши поправки и дополнения.

Комментарии   

+1 #2 mrbublik 16.11.2013 01:42
Ага ... У нас есть такие приборы! Но мы вам о них не расскажем!!
Ну мы стараемся о приборах рассказывать )))))
И Вы ежели чего пишите на сайте...
0 #1 Дмитрий 16.11.2013 01:13
АААА!!!! Круть!! Автору ОГРОМНОЕ Спасибо!!!! Буду разбираться!!!

You have no rights to post comments