Добрый день! Подскажите, пожалуйста, правильно ли я понимаю настройку QoS IP-телефонии? Я вижу три варианта. Если возможно, то дайте, пожалуйста, комментарии по каждому из них. Правильно или не правильно. Если не правильно, то что именно. Или все правильно, но лучше было бы сделать другим способом и т. д. Заранее большое спасибо! Вариант №1 add name=queue1 priority=2/2 target=ip-address-of-telephony-server Вариант №2 add name=queue1 packet-marks=marker priority=2/2 target=ip-address-of-telephony-server Вариант №3 /queue tree add name=queue1 packet-mark=marker parent=WAN priority=2 queue=default add name=queue2 packet-mark=marker parent=LAN priority=2 queue=default Маркировка для варианта №2 и №3 Ниже я привел правила, как я их вижу, для маркировки траффика для IP-телефонии. Моя логика следующая: Вначале я маркирую соединения, которые относятся к телефонии. Соответственно я вижу четыре способа: адрес источника сервер телефонии, адрес назначения сервер телефонии и UDP и TCP порты 5060-5080. TCP заявляет сам провайдер и поэтому я не спорю. Потом на основании четырех маркировок соединений, созданных выше я маркирую пакеты. /ip firewall mangle add action=mark-packet chain=prerouting connection-mark=marker new-packet-mark=marker passthrough=no add action=mark-connection chain=prerouting new-connection-mark=marker passthrough=yes src-address=ip-address-of-telephony-server add action=mark-connection chain=prerouting dst-address=ip-address-of-telephony-server new-connection-mark=marker passthrough=yes add action=mark-connection chain=prerouting new-connection-mark=marker passthrough=yes port=5060-5080 protocol=udp add action=mark-connection chain=prerouting new-connection-mark=marker passthrough=yes port=5060-5080 protocol=tcp
Неправильно. Причем абсолютно. Для начала, чтобы у вас в очереди заработала Priority, надо иметь родительскую очередь. Т.е. грубо Parent = 10m/10m Child1 limit-at=5m/5m max-limit=10m/10m priority=8 Child2 limit-at=1m/1m max-limit=10m/10m priority=7 В этом случае при наихудшем сценарии child1 получит 5 мегабит и Child2 еще 5 Если одна из очередей не качает - вторая получает 10м. Логика Берется ВЕРХНЯЯ ОЧЕРЕДЬ потом у всех потомков распределяется limit-at независимо от приоритета Ваша задача, чтобы сумма limit-at всех чайлдов не превысила max-limit родителя. А вот после того, как раздался limit-at, раздаются max-limit на чайлдах в соответствии с приоритетами. И не рекомендую использовать слишком высокие приоритеты. Обычно 1 - менеджмент (telnte, ssh и т.п.) 2-3 мониторинг, динамическая маршрутизация и т.п. 4 и ниже клиентский трафик VoIP, Video и т.п.
Илья, исправил все три варианта. Посмотрите, пожалуйста. Если я правильно понял, то по маркировке у Вас корректировок не возникло. max-limit указывать не стал, т. к. он "скачет". Если я правильно понял, то можно обойтись и без него. Мне надо только для телефонного траффика сделать приоритет. Как правило не более 5-ти одновременных звонков. 2Мб - это с большим запасом. Вариант №1 add name="parent queue" target="" add limit-at=2M/2M max-limit=10M/10M name=queue1 parent="parent queue" priority=4/4 target=ip-address-of-telephony-server Вариант №2 add name="parent queue" target="" add limit-at=2M/2M max-limit=10M/10M name=queue1 packet-marks=marker parent="parent queue" priority=4/4 target=0.0.0.0/32 Вариант №3 add name=WAN parent=bridge-local add name=LAN parent=ether1-gateway add name=queue1 packet-mark=marker parent=LAN priority=4 queue=default add name=queue2 packet-mark=marker parent=WAN priority=4 queue=default Маркировка для вариантов №2 и №3 Маркировка не изменялась: /ip firewall mangle add action=mark-packet chain=prerouting connection-mark=marker new-packet-mark=marker passthrough=no add action=mark-connection chain=prerouting new-connection-mark=marker passthrough=yes src-address=ip-address-of-telephony-server add action=mark-connection chain=prerouting dst-address=ip-address-of-telephony-server new-connection-mark=marker passthrough=yes add action=mark-connection chain=prerouting new-connection-mark=marker passthrough=yes port=5060-5080 protocol=udp add action=mark-connection chain=prerouting new-connection-mark=marker passthrough=yes port=5060-5080 protocol=tcp
Ну поехали 1. В Parent приоритет игнорируется. 2. В самом верхнем паренте limit-at тоже не нужен. Если ты строишься на simple queue то у тебя таргет - конкретный хост. Пакет обрабатывается сверху вниз, пока не встретит подходящую очередь. Если у тебя Queue tree то логично делать две верхних очереди с parent=interface соответственно для WAN и для LAN и снизу крутить очереди разбирающие трафик. Так как очередь работает только с исходящими пакетами.
Илья, похоже, что получилось, так, что я редактировал свои записи, а Вы в этот момент отвечали по старым. В Parent у меня приоритет нигде не указан. limit-at у меня то же нигде не указан (ни до редактирования, ни после) Queue Tree я как раз и редактировал и сделал две отдельные очереди на вход и выход. Вы пишете "Если ты строишься на simple queue то у тебя таргет - конкретный хост. Пакет обрабатывается сверху вниз, пока не встретит подходящую очередь.". Я думал, что здесь должна быть функция логического "И", т. е. должны совпасть все условия, т. е. пакет будет считаться совпавшим, если target=0.0.0.0 И connection-mark=marker. Т. е. пакет, который не совпадает с connection-mark=marker не попадет под это правило. Я прав или ошибаюсь? Илья, если Вам не тяжело, внесите корректировки в мои примеры, что бы было понятнее. P. S. я не хочу, что бы сделали за меня. Я хочу разобраться в сути, но не до конца понимаю Ваши ответы.
Так еще раз, в чем задача? Дать IP-телефонии приоритет? Опишите задачу, попробую ближе к ночи накидать с пояснениями.
Ну смотри. Есть 2 интерфейса WAN 10Mb LAN 100Gb Создаем 2 штуки Queue Tree UPLOAD Out-Q max-limit=10m parent=wan-interface Voip-Out max-limit=10m packet-mark=voip priority=7 parent=Out-Q Users-Out max-limit=10m limit-at=2m packet-mark=no-mark queue-type=pcq-upload-default parent=Out-Q DOWNLOAD В принципе то же самое но на 10мбит. IN-Q max-limit=10m parent=lan-interface Voip-In max-limit=10m packet-mark=voip priority=7 parent=In-Q Users-In max-limit=10m limit-at=2m packet-mark=no-mark queue-type=pcq-upload-default parent=In-Q Теперь имеем 1. При появлении трафика voip он будет выдавливать юзеров из канала. 2. При наихудшем сценарии юзер получит 2мбит (limit-at) Используя тип очереди pcq для юзера мы пилим канал поровну между юзерами. Обрати внимание, что на Download я тоже поставил 10мбит, чтобы не перегружать вход. А маркировка у тебя в общем-то правильная. Разве что packet-mark можно в построутинг выкинуть.
Илья, есть несколько уточняющих вопросов: Что будет, если не указать 3-ю строчку (Users-Out и Users-In)? В таком случае не будет "выдавливания" приоритета для voip? И для UPLOAD и для DOWNLOAD Вы указали один и тот же тип очереди "queue-type=pcq-upload-default". Это опечатка или так должно быть? Вы написали "В принципе то же самое но на 10мбит.". Смущает НО, т. к. и для UPLOAD и для DOWNLOAD Вы указали 10 mb. Уточните, пожалуйста. Подскажите, пожалуйста, по поводу "simple queue". Я думал, что здесь должна быть функция логического "И", т. е. должны совпасть все условия, т. е. пакет будет считаться совпавшим, если target=0.0.0.0 И connection-mark=marker. Т. е. пакет, который не совпадает с connection-mark=marker не попадет под это правило. Я прав или ошибаюсь?
1. Да. Остальной трафик пойдет мимо очереди. Нечего будет приоритезировать. 2. Опечатка. pcq-download-default конечно. 3. Я сначала 100 указал. 4. Да именно так. Когда совпадают все условия.
Илья, а если, например, скорость у провайдера скачет, т. е. если поставить маленькое значение, то есть риск не воспользоваться случаями, когда дают больше скорости, а если поставить большое значение, то max-limit будет больше чем реальная скорость и смысл параметра max-limit пропадает. Можно ли не указывать скорости (max-limit и limit-at)? Правильно ли я поставил pcq-download-default и pcq-upload-default или их надо поменять местами? Вы указали параметр limit-at=2m для "простых" данных. По логике гарантировать нужно телефонии, а остальным "как повезет". Или это надо читать следующим образом: голосовой трафик имеет больший приоритет чем обычный. При этом "обычному" трафику гарантируется 2 Мб не смотря на приоритет голосового. Т. е. в случае конфликта priority и limit-at преимущество будет у limit-at. Я правильно понял? Т. е. сделать так: /queue tree add name=WAN parent=WAN-interface add name=queue2 packet-mark=marker parent=WAN priority=7 queue=default add name=queue4 parent=WAN queue=pcq-upload-default add name=LAN parent=LAN-interface add name=queue1 packet-mark=marker parent=LAN priority=7 queue=default add name=queue3 parent=LAN queue=pcq-download-default
А в этом и заключается основная проблема. НЕЛЬЗЯ. Собственно роутер знать не знает, что у него там канал скачет. И нет никакой возможности это узнать. Поэтому возможны три сценария 1. У вас QoS поддерживается на ВСЕЙ длине канала. Например вы взяли VPN между офисами от провайдера и по договору там 10мбит гарантированной. Два остальных это некий псевдо-qos. 2. Мы режем весь пользовательский трафик, рассчитывая что остатков хватит на критический. Т.е., например имея канал в 10 Мбит, мы явно юзерам выделяем 5 и 5 оставляем под телефонию. 3. Мы замеряем несколько раз скорость между интересующими нас узлами. Потом отнимаем от нее процентов 30 и это считаем как max-limit парента. Сценарии 2 и 3 нифига не помогут в случае завала трафика, но как-то будут работать при нормальных условиях.
У нас опять наложилось редактирование мной уже оставленного сообщения и Ваш ответ. Уточните, пожалуйста: Правильно ли я поставил pcq-download-default и pcq-upload-default или их надо поменять местами? Вы указали параметр limit-at=2m для "простых" данных. По логике гарантировать нужно телефонии, а остальным "как повезет". Или это надо читать следующим образом: голосовой трафик имеет больший приоритет чем обычный. При этом "обычному" трафику гарантируется 2 Мб не смотря на приоритет голосового. Т. е. в случае конфликта priority и limit-at преимущество будет у limit-at. Я правильно понял?
1. Да правильно. Но вот то что в паренте нет max-limit это неправильно. Роутеру неоткуда считать. 2. Да у limit-at преимущество. Т.е. сначала независимо от приоритетов раздается limit-at, а потом max-limit с учетом приоритетов, пока не будет выбран max-limit парента.
Правильно ли я поставил pcq-download-default и pcq-upload-default или их надо поменять местами? Допустим в порты маршрутизатора включены локальные устройства, которые объединены через коммутатор или мост. Не будет ли в таком случае трафик между ними резаться на скорости 5 Мб? Т. е., если я не хочу, гарантировать скорость "обычному" трафику, то конфигурация должна выглядеть, как приведено ниже? /queue tree add max-limit=5M name=WAN parent=WAN-interface add max-limit=5M name=queue2 packet-mark=marker parent=WAN priority=7 queue=default add max-limit=5M name=queue4 parent=WAN queue=pcq-upload-default add max-limit=5M name=LAN parent=LAN-interface add max-limit=5M name=queue1 packet-mark=marker parent=LAN priority=7 queue=default add max-limit=5M name=queue3 parent=LAN queue=pcq-download-default
А что скажете по поводу: Допустим в порты маршрутизатора включены локальные устройства, которые объединены через коммутатор или мост. Не будет ли в таком случае трафик между ними резаться на скорости 5 Мб? На сколько понимаю я, то если обмен идет через встроенный чип коммутации, то файервол ни при чем, а мост по умолчанию в файерволе участия не принимает и как результат ни в том ни втом случае трафик между локальными устройствами не должен будет "резаться". Так?
Илья, большое Вам спасибо. Вы потратили очень много времени! Могли бы Вы еще раз взглянуть на правильность расстановки "pcq-upload-default" и "pcq-downlaod-default"? Моя расстановка противоречит с этим: /ip firewall mangle add chain=prerouting action=mark-packet in-interface=ether2-LAN new-packet-mark=client_upload add chain=prerouting action=mark-packet in-interface=ether1-WAN new-packet-mark=client_download Отсюда: http://wiki.mikrotik.com/wiki/Manual:Queues_-_PCQ_Examples
Здесь вопрос классификатора в pcq pcq-download идет по dst=address т.е. все пакеты к одному dst-address засовываются в отдельную подочередь pcq=upload по src-address В указанном вами примере используются паренты global-in и global-out которых нет в 6 версии RouterOS Хотя у меня тоже ошибка. Там дважды pcq=download должно быть. Потому что очередь висит на интерфейсе, сработает на выходе из построутинга и все преобразования уже будут сделаны. Т.е. мы пилим только по dst-address.