|
Главная | Оборудование | Программное обеспечение | Поддержка | О фирме | Контакты |
Делим Интернет или QoS на MikrotikПринцип делить все и вся существует столько, сколько миллиардов лет существует Вселенная. Чаще всего объекты делятся в одинаковых пропорциях и неравный отхваченный кусок кем или чем-либо вызывает недовольство поделенных. Подобные ситуации часто возникают тогда, когда объект деления имеет весомое значение в системе. Перенесемся в 21 век. Наблюдая процессы в обществе и, в первую очередь в информационной сфере, можно заметить, что разумно делить все-таки научились. И, порой алгоритмы настолько неподдельны и устойчивы, что не оставляют никакой возможности взять больше или меньше дозволенного. Применив все вышеизложенное к передаче данных можно понять о чем идет речь. Современное общество и каждый человек в нем требует к себе одинакового отношения во всех сферах, что зачастую становится головной болью для тех, кто предоставляет услуги. В частности касаясь предоставления услуг доступа к Интернету за последние несколько лет произошел огромный прорыв, позволивший решить ряд проблем, порожденных появлением всемирной паутины у нас в домах и на работе, превратив ее из некого деликатеса в фаст-фуд для сотен тысяч людей. Несколько раньше на нашем сайте мы опубликовали статью о RouterOS Mikrotik, в которой говорилось о возможностях, установке и первоначальной настройке этой операционной системы. Судя по количеству вопросов и ответов на нашем форуме стало ясно, что в Интернет тема настройки и управления системой раскрыта плохо и не полно. Не секрет, что зачастую администраторам, в особенности начинающим, сложно разобраться во всех приведенных алгоритмах и принципах работы шейпера, вынуждая учиться методом проб и зачастую не безобидных ошибок. Так сложилось, что для этой категории пользователей очень мало простой и доступной русскоязычной документации, одним из первых начинаний которой и станет эта статья. Теория Для начала рассмотрим несколько понятий, которыми мы будем пользоваться в дальнейшем. Технология, которая позволяет ограничивать скорость и качество доступа в Интернет, называется шейпинг (от англ. Shape - форма). Образно говоря - это технология придания некой формы графику загрузки канала. Шейпер - это алгоритм, который помимо управления очередностью пакетов позволяет отбрасывать не удовлетворяющие условиям. К таковым относятся алгоритмы PCQ и HTB (о них поговорим несколько позже). Существует ещё один тип алгоритмов, используемых для управления движением пакетов внутри шейпера Schedulers. Их задача состоит только в формировании очередей согласно приоритетам пакетов, адресу источника, получателя и другим параметрам. К этому типу алгоритмов относятся PFIFO, BFIFO,SFQ, PCQ, RED. Под-очередь - очередь, сформированная из пакетов по тому или иному признаку. Queuing discipline (qdisc - дисциплина очереди) - алгоритм, который захватывает пакеты и точно определяет в каком порядке и каким образом они будут двигаться. HTB В основе шейпинга, используемого в Mikrotik, лежит дисциплина очереди HTB, реализованная во многих Linux-системах. Ее изучение является достаточно сложной, однако необходимой задачей для новичка, потому как без этих знаний дальше неудачных попыток и копирования правил из документации мало кто заходит. Список основных возможностей по управлению трафиком в Mikrotik выглядит следующим образом:
Ключевым понятием для HTB является класс. Приставка Hierarhical в аббревиатуре HTB означает, что дисциплина позволяет строить иерархию классов. Схематически иерархию классов (для упрощения будем называть классы правилами) HTB можно представить в виде некого гибридного разделенного уровнями дерева, конечными вершинами которого являются клиенты. Классы, которые не имеют дочерних, будем называть клиентами или листьями. Обычно они находятся на нулевом уровне иерархии и первыми захватывают относящийся к ним трафик, передавая его родителям. Два или более класса, имеющие одного прямого родителя находятся на одном уровне и подсоединены к одной локальной выходной очереди.
Схематическое изображение структуры HTB На схеме выше изображена иерархия классов, в которую из файервола (Filter) поступают пакеты с данными. В зависимости от приоритета, параметров классов и загрузки канала они попадают или в локальные очереди (Self Feed), или передаются в очереди родительских классов (Inner Feed). Класс характеризуют следующие параметры:
Класс может находиться в одном из трех состояний:
Пользуясь уже даже этими данными, можно составлять правила, однако на практике некоторые вещи могут выглядеть несколько иначе. В Mikrotik предусмотрены два типа правил, разнесенные на разные закладки в графической утилите Winbox (с ее помощью можно конфигурировать Mikrotik из-под Windows):
О них мы поговорим несколько позже, а сейчас рассмотрим несколько примеров работы HTB Создадим несколько правил
1. Рассмотрим первый случай, когда клиенты 1 и 2 передают данные со скоростью меньше, чем указано в параметре limit-at, а клиент 3 не работает.
Как видим, пакеты с данными от leaf1 и leaf2 (клиенты) не передаются в родительские классы, а выстраиваются в локальную очередь в соответствии со своими приоритетами 2. Сейчас посмотрим что будет, в случае если клиент leaf2 будет передавать данные со скоростью больше limit-at, но меньше max-limit указанных в его параметрах и меньше limit-at в параметрах ClassB, к которому он прикреплен. Одновременно с ним leaf1 будет передавать данные со скоростью не превышающей limit-at.
В данном случае получается интересная ситуация: клиент leaf1 будет иметь больший приоритет, чем leaf2, хотя в параметрах последнего указан больший приоритет. Это связано с тем, что передавая данные со скоростью более limit-at leaf2 подключился к родительскому классу, имеющему приоритет 8. При этом существует правило, что на нижних уровнях приоритет пакетов при одинаковых условиях больше, чем на верхних. 3. Рассмотрим следующий пример: скорости передачи данных для leaf1 превысила допустимое max-limit, клиент leaf2 передает данные на скорости больше limit-at и меньше max-limit, клиент leaf3 работает на скорости меньше limit-at.
Это весьма интересный случай. В данной ситуации видно, что ClassA перегружен данными из Leaf1, поэтому ClassB не получит разрешения на передачу.В результате работоспособным окажется только клиент leaf3, подключенный в локальную очередь на нулевом уровне. 4. Теперь рассмотрим пример, когда данные будут одновременно передавать leaf1, leaf2, leaf3, ClassB будет желтым, а ClassA зеленым.
В результате этого на втором уровне leaf2 попадет в очередь первым (так как имеет больший приоритет), а leaf1 и leaf3 подвергнутся случайному выбору для определения порядка следования. Как видим алгоритм работы HTB весьма логичен и не так уж сложен, как могло показаться сразу. Он был принят многими производителями программного и аппаратного обеспечения за свою гибкость, надежность и отсутствие свойственных его предшественникам недостатков. Благодаря огромной универсальности с помощью него можно строить практически любые возможные иерархии правил, в точности разграничивая и давая возможность управлять потоками данных на достаточно низком уровне. Bursts Часто возникает необходимость выдать так называемую пиковую скорость клиенту на определенный промежуток времени. К примеру, иногда требуется ускорить загрузку страниц, оставив при этом среднюю скорость на закачку файлов не выше отведенной. Или нужно редко посылать запросы и принимать данные, но делать это с максимальной скоростью. Глупо было бы в таком случае выдавать клиенту большую скорость, так как в один прекрасный момент из-за неосторожности или злого умысла остальные пользователи могут остаться или вовсе без Интернета, или получать его не таким, каких хотелось и за сколько заплачено. Разработчики Mikrotik предоставили в распоряжение все необходимые инструменты для управления описанной выше пиковой скоростью. Следующие параметры характеризуют ее поведение:
Момент, когда клиенту или классу нужно выдать максимальную скорость, определяется следующим образом. Раз в 1/16 времени burst-time вычисляется загрузка канала на указанное число секунд. Если средняя загрузка составила менее burst-threshold, то клиенту или классу выделяется указанная в burst-limit скорость до тех пор, пока она не превысит burst-threshold. После этого действует ограничение max-limit до тех пор, пока снова не случится понижение скорости менее burst-threshold. Установим следующие параметры limit-at=128000/128000, max-limit=256000/256000, burst-limit=512000/512000, burst-treshold=192000/192000, burst-time=8, и понаблюдаем что случится с графиком загрузки канала от одного клиента:
Данный график характерен для случая с закачкой большого файла по протоколу http. После первой секунды средняя загрузка канала будет равна (0+0+0+0+0+0+0+512)/8=64 kbps, что менее установленного нами параметра burst-threshold. После второй секунды средняя скорость будет равна (0+0+0+0+0+0+512+512)/8=128kbps. После третьей секунды средняя скорость превысит показатель burst-threshold. В этот момент скорость резко упадет до значения параметра max-limit и будет держаться на этом уровне до тех пор, пока средняя загрузка канала не станет меньше burst-threshold и снова не произойдет выдача burst скорости. Schedulers Рассмотрим алгоритмы так называемых Schedulers, о которых упоминалось выше. Обычно они применяются вкупе с шейперами, однако некоторые из них так же обладают функциями ограничения скорости. Физически Scheduler предшествует шейперу и представляет ему уже подготовленные очереди пакетов, к которым следует применять ограниения. PFIFO/BFIFO Packet/Bytes (FIFO) алгоритм, основанный на принципе первый пришел-первый ушел. Используется для ethernet-интерфейсов. Единственный параметр, используемвый для конфигурирования данного алгоритма, - это pfifo-limit (bfifo-limit). Он указывает на количество байт, которые могут храниться в выходном буфере. Не попавшие в буфер пакеты будут разрушаться. Графически алгоритм можно изобразить с помощью следующей схемы. По сути дела PFIFO/BFIFO ничего особенного из себя не представляет и никаких приемуществ не дает. Он просто есть и используется там, где его использовать целесообразно…
SFQ SFQ (Stochastic Fairness Queuing) – этот алгоритм можно назвать "случайно-честным". Он применятся тогда, когда требуется предоставить всем TCP/UDP-подключениям одинаковую возможность по передаче данных. Для конфигурирования SFQ используется два параметра:
SFQ работает по следующему принципу: алгоритм изымания пакетов из под-очередей одновременно выпускает в выходной интерфейс pcq-allot количество байт, а хэширующий алгоритм добавляет к каждый под-очереди pcq-allot байт, сохраняя при этом равновесие и одинаковую длину всех подочередей. Схему работы SFQ можно сравнить с мясорубкой, в которой через выходную решетку одновременно изо всех дырок в одинаковом количестве выходит фарш :).
Алгоритм SFQ рекомендуется использовать в случаях, когда канал сильно загружен и необходимо предоставить приложениям одинаковую возможность по передаче данных. Единственным его недостатком является то, что одно приложение, открыв много потоков, может заглушить остальные подключения. PCQ PCQ (Per Connection Queuing) является частным случаем SFQ за тем исключением, что формирование потоков в под-очереди будет происходить в соответствии с неким правилом. Это может быть адрес источника/получателя и порт источника/получателя. Таким образом можно равномерно распределить скорость между участниками вне зависимости от количества открытых подключений. Алгоритм предоставляет следующие параметры для конфигурирования:
Данный алгоритм является основным при необходимости разделить пропускную способность поровну между классами или клиентами. С его помощью можно организовать динамический шейпинг, о котором много где говорят, но толковая реализация автору ещё не встречалась ни в одном продукте. Классифицировав под-очереди по адресу источника мы получим отдельную очередь для каждого адреса, соответственно количество потоков с одного адреса не будет играть роли при доступе к выходному интерфейсу. Стоит отметить гибкость такой классификации. Применив ее по источнику к внешнему интерфейсу, в под-очереди будут попадать внешние адреса, так как в этом случае параметр src-address будет все равно содержать адрес, являющийся источником передачи данных. Применив эту же классификацию к внутреннему интерфейсу, в очереди попадут адреса клиентов или классов. Таким образом задав два правила, отличающиеся одним параметром, можно разделить поровну как входящий так и исходящий каналы. RED RED (Random Early Detection) – алгоритм, призванный выравнивать пропускную способность и сглаживать скачки, контролируя средний размер очереди. Когда ее размер достигает значения red-min-threshold алгоритм удаляет случайно выбранный пакет. Число удаленных пакетов растет с увеличением среднегого размера очереди. Если размер достигает значения red-max-threshold все пакеты удаляются. Однако случаются ситуации, когда реальный размер очереди (не средний) значительно больше red-max-threshold. В таком случае все пакеты, выходящие за рамки предела red-limit, удаляются.
Использование алгоритма крайне не желательно при присутствии UDP-трафика, так как в связи с неразборчивостью алгоритма при удалении пакетов из очереди и принципом работы UDP-протокола, данные могут не дойти до получателя. От теории к практике Сейчас мы знаем все необходимое для того, чтобы построить необходимые нам правила. Так как на практике применение алгоритмов SFQ и RED используется крайне редко, то на примерах их работы мы останавливаться не будем. Queue Trees Queue Trees - особый тип очередей, который прямо отражает устройство шейпера HTB. Он позволяет строить деревья правил (классов) и на самом низком уровне управлять пакетами. Вкратце объясним значение основных элементов управления, присутствующих в Queue Trees:
Примеры I. Итак, создадим правило, которое позволит получить клиентам локальной или виртуальной сети максимальную скорость и минимальное время отклика при обращении к сайту www.drivermania.ru , однако разделит скорость между всеми поровну. 1. Пометим все пакеты идущие от пользователей на адрес 66.148.73.54 и обратно. Для этого нужно создать 4 правила, два из которых пометят подключения в прямом и обратом направлении, а другие два пометят пакеты в этих подключениях. Необходимо обратить внимание, что очереди работают именно с пакетами, а не помеченными подключениями. Зачастую это создает у новичков вопросы плана: "Я пишу все правильно, а оно не работает. Может это глюки?" Для таких шаманов ниже приведен пример, как нужно делать, чтобы ОНО работало.
2. Создадим два типа PCQ очереди, подключения в одной из которых мы будем классифицировать по входящему, а другие по исходящему адресу.
3. Создадим очереди для входящего и исходящего трафика
Как видим, пара правил и такая сложная задача, как динамический шейпинг на определенные адреса с предоставлением пиковой скорости была реализована. На практике обычно приходится применять более сложные правила в сочетании друг с другом, однако для демонстрации возможностей этот очень хорошо подошел. Практически в Queue Trees мы можем оперировать только ограничением скорости. Остальные параметры, такие как адрес источника, получателя, время суток, протокол, порты и т.д. указываются в разделе Mangle-файервола. Подобным способом также можно сделать хороший пинг на определенные адреса, даже во время серьезной загрузки канала. Приведем пример таких правил для сервера www.cybernet.by. Для этого нужно создать четыре правила в Firewall:
Следующим шагом создадим два правила в Queue Trees: одно для входящего потока, другое для исходящего.
Вышеописанные действия позволят пакетам, приходящим и уходящим с адреса 195.222.70.250, попадать в приоритетные очереди и всегда иметь гарантированные 50 Kbit/s. Пользуясь вышеописанным примером можно выделить для всех онлайн игр фиксированную гарантированную скорость и создать иерархию классов (правил), распределив таким образом пропускную способность между всеми поровну. Simple Queues Рассмотрим тип очередей Simple Queues. Эти очереди являются простыми, а если быть точнее, то упрощенными. В самом деле для их использования не нужно применять промаркированные пакеты из Firewall, однако при этом теряется некоторая гибкость. Здесь в качестве основных параметров, к которым следует применять правило, относятся адреса источника и получателя. На вкладке Advanced утилиты Winbox можно обнаружить и некоторые другие параметры, однако они не относятся к списку обязательных к заполнению.
Список текущих возможностей простых очередей выглядит следующим образом:
Стоит отметить, что начиная с версии Mikrotik 2.9 в Simple Queues стало возможным указывать параметр Parent для простых очередей. Таким образом можно строить практически аналогичные деревья классов, как и для Queue Trees за тем исключением, что здесь оперировать будем не пакетами и потоками, а адресами. Стоит так же помнить, что Simple Queues не что иное, как частный случай Queue Trees. Поэтому создавая новые правила стоит обращать внимание не существует ли уже что-то подобное, оперирующее с теми же адресами, портами или другими параметрами. В случае сходства, приоритет окажется на стороне Queue Trees и ваши простые очереди просто не будут работать. Перед началом составления правил в Simple Queues необходимо понять что есть входящий и исходящий трафик для нашего провайдера, нашего роутера и наших клиентов. На рисунке выше изображена стандартная схема направления потоков трафика от провайдера к нашему роутеру и от роутера к клиенту. Стоит обратить внимание, что исходящий трафик клиента для нашего роутера будет являться входящим и наоборот. То же самое можно сказать про нашего провайдера-исходящий трафик для него-это входящий для нас.
Список параметров для конфигурирования простых очередей в Mikrototik 2.9.7 выглядит следующим образом:
Весьма интересной является возможность управлять входящим и исходящим трафиком вместе. Это позволяет клиентам максимально использовать проплаченный канал. Примеры Сэмулируем для нашего клиента канал с 64/42 kbit/s с гарантированной скоростью 32/32 kbit/s в будние дни и 256/128 kbit/s с гарантированной скоростью 64/64 kbit/s в выходные. Результатом нашей работы будет два правила:
В нашем случае первая цифра в паре 32000/32000 означает входящий канал для клиента, а вторая - исходящий. Воспользовавшись нижеприведенной схемой можно инвертировать параметры относительно нашего роутера.
При желании можно позаботиться о быстром открытии страниц, добавив параметры burst-limit и burst-time. Данное правило можно было бы несколько видоизменить, разделив указанную скорость между всей сетью 192.168.11.0.24. В этом случае для параметра queue нужно указать тип очереди pcq-download, приведенный выше в примере с Queue Trees. Простые очереди позволяют достаточно просто реализовать возможность предоставления на определенные адреса неограниченной скорости. Добавим к вышеприведенным правилам ещё одно, которое будет выглядеть следующим образом:
В результате чего клиент с адресом 192.168.11.1 получит доступ к адресу 84.201.225.124 со скоростью от 1 до 2 мегабит. При выделении гарантированной пропускной способности нужно помнить, что сумма limit-at всех клиентов должна быть меньше или равна общей пропускной способности канала. Только в этом случае можно говорить о какой-то гарантированной скорости. Если у вашего сервера неправильно установлены часы или, к примеру, села батарейка на материнской плате, то можно воспользоваться встроенной в Mikrotik возможностью синхронизации времени с внешним источником. Ещё одно замечание связанно с тем, что напрямую вписать URI-адрес в поле ввода IP-адреса не представляется возможным, но иногда необходимо, так как многие сайты имеют динамические адреса. Данную проблему можно решить, прописав необходимый адрес ресурса в разделе /ip firewall address-list и дав ему имя, по которому в последствии можно обратиться.
Вывод Возможности по управлению трафиком в Mikrotik 2.9 претерпели некоторые изменения по сравнению с предыдущими версиями. Это позволило стать этой операционной системе рядом и даже несколько потеснить аппаратные решения от Cisco, сохранив при этом удобство и огромную гибкость в конфигурировании. Объединив Mikrotik и биллинг с поддержкой протокола Radius, можно получить мощную систему, подходящую как для сети среднего провайдера, так и в качестве сервера, раздающего Интернет внутри локальной домашней сети или сети предприятия. Стоит отметить, что вышеописанные возможности шейпинга можно применить не только к разделению доступа в интернет, но и к созданию резервных каналов связи. В сочетании с беспроводными технологиями RouterOS может превратить груду уже никому не нужного металлолома и нескольких беспроводных сетевых карт в мощную Wi-Fi соту с разделением доступа и предоставлением гарантированной полосы пропускания своим клиентам. Автор: Александр Кузьмицкий Источник: drivermania.ru
|
|