Настройка QOS для телефонии

Тема в разделе "Общий форум", создана пользователем Nemiroff_84, 6 ноя 2016.

  1. Nemiroff_84

    Nemiroff_84 Участник

    Добрый день!
    Подскажите, пожалуйста, правильно ли я понимаю настройку 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-телефонии. Моя логика следующая:
    1. Вначале я маркирую соединения, которые относятся к телефонии. Соответственно я вижу четыре способа: адрес источника сервер телефонии, адрес назначения сервер телефонии и UDP и TCP порты 5060-5080. TCP заявляет сам провайдер и поэтому я не спорю.
    2. Потом на основании четырех маркировок соединений, созданных выше я маркирую пакеты.
    /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
     
    Последнее редактирование: 7 ноя 2016
  2. Илья Князев

    Илья Князев Администратор Команда форума

    Неправильно. Причем абсолютно.
    Для начала, чтобы у вас в очереди заработала 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 и т.п.
     
  3. Nemiroff_84

    Nemiroff_84 Участник

    Илья, исправил все три варианта. Посмотрите, пожалуйста. Если я правильно понял, то по маркировке у Вас корректировок не возникло. 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
     
    Последнее редактирование: 8 ноя 2016
  4. Илья Князев

    Илья Князев Администратор Команда форума

    Ну поехали
    1. В Parent приоритет игнорируется.
    2. В самом верхнем паренте limit-at тоже не нужен.

    Если ты строишься на simple queue то у тебя таргет - конкретный хост. Пакет обрабатывается сверху вниз, пока не встретит подходящую очередь.
    Если у тебя Queue tree то логично делать две верхних очереди с parent=interface соответственно для WAN и для LAN и снизу крутить очереди разбирающие трафик. Так как очередь работает только с исходящими пакетами.
     
  5. Nemiroff_84

    Nemiroff_84 Участник

    Илья, похоже, что получилось, так, что я редактировал свои записи, а Вы в этот момент отвечали по старым.
    1. В Parent у меня приоритет нигде не указан.
    2. limit-at у меня то же нигде не указан (ни до редактирования, ни после)
    3. Queue Tree я как раз и редактировал и сделал две отдельные очереди на вход и выход.
    Вы пишете "Если ты строишься на simple queue то у тебя таргет - конкретный хост. Пакет обрабатывается сверху вниз, пока не встретит подходящую очередь.". Я думал, что здесь должна быть функция логического "И", т. е. должны совпасть все условия, т. е. пакет будет считаться совпавшим, если target=0.0.0.0 И connection-mark=marker. Т. е. пакет, который не совпадает с connection-mark=marker не попадет под это правило. Я прав или ошибаюсь?

    Илья, если Вам не тяжело, внесите корректировки в мои примеры, что бы было понятнее.

    P. S. я не хочу, что бы сделали за меня. Я хочу разобраться в сути, но не до конца понимаю Ваши ответы.
     
  6. Илья Князев

    Илья Князев Администратор Команда форума

    Так еще раз, в чем задача? Дать IP-телефонии приоритет?
    Опишите задачу, попробую ближе к ночи накидать с пояснениями.
     
  7. Nemiroff_84

    Nemiroff_84 Участник

    Илья, все верно.
    Задача дать приоритет IP-трафику.
     
  8. Илья Князев

    Илья Князев Администратор Команда форума

    Ну смотри. Есть 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 можно в построутинг выкинуть.
     
  9. Nemiroff_84

    Nemiroff_84 Участник

    Илья, есть несколько уточняющих вопросов:
    1. Что будет, если не указать 3-ю строчку (Users-Out и Users-In)? В таком случае не будет "выдавливания" приоритета для voip?
    2. И для UPLOAD и для DOWNLOAD Вы указали один и тот же тип очереди "queue-type=pcq-upload-default". Это опечатка или так должно быть?
    3. Вы написали "В принципе то же самое но на 10мбит.". Смущает НО, т. к. и для UPLOAD и для DOWNLOAD Вы указали 10 mb. Уточните, пожалуйста.
    4. Подскажите, пожалуйста, по поводу "simple queue". Я думал, что здесь должна быть функция логического "И", т. е. должны совпасть все условия, т. е. пакет будет считаться совпавшим, если target=0.0.0.0 И connection-mark=marker. Т. е. пакет, который не совпадает с connection-mark=marker не попадет под это правило. Я прав или ошибаюсь?
     
  10. Илья Князев

    Илья Князев Администратор Команда форума

    1. Да. Остальной трафик пойдет мимо очереди. Нечего будет приоритезировать.
    2. Опечатка. pcq-download-default конечно.
    3. Я сначала 100 указал.
    4. Да именно так. Когда совпадают все условия.
     
  11. Nemiroff_84

    Nemiroff_84 Участник

    Илья, а если, например, скорость у провайдера скачет, т. е. если поставить маленькое значение, то есть риск не воспользоваться случаями, когда дают больше скорости, а если поставить большое значение, то max-limit будет больше чем реальная скорость и смысл параметра max-limit пропадает.

    1. Можно ли не указывать скорости (max-limit и limit-at)?
    2. Правильно ли я поставил pcq-download-default и pcq-upload-default или их надо поменять местами?
    3. Вы указали параметр 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
     
    Последнее редактирование: 8 ноя 2016
  12. Илья Князев

    Илья Князев Администратор Команда форума

    А в этом и заключается основная проблема. НЕЛЬЗЯ.

    Собственно роутер знать не знает, что у него там канал скачет. И нет никакой возможности это узнать. Поэтому возможны три сценария

    1. У вас QoS поддерживается на ВСЕЙ длине канала. Например вы взяли VPN между офисами от провайдера и по договору там 10мбит гарантированной.

    Два остальных это некий псевдо-qos.
    2. Мы режем весь пользовательский трафик, рассчитывая что остатков хватит на критический. Т.е., например имея канал в 10 Мбит, мы явно юзерам выделяем 5 и 5 оставляем под телефонию.
    3. Мы замеряем несколько раз скорость между интересующими нас узлами. Потом отнимаем от нее процентов 30 и это считаем как max-limit парента.
    Сценарии 2 и 3 нифига не помогут в случае завала трафика, но как-то будут работать при нормальных условиях.
     
  13. Nemiroff_84

    Nemiroff_84 Участник

    У нас опять наложилось редактирование мной уже оставленного сообщения и Ваш ответ.
    Уточните, пожалуйста:
    1. Правильно ли я поставил pcq-download-default и pcq-upload-default или их надо поменять местами?
    2. Вы указали параметр limit-at=2m для "простых" данных. По логике гарантировать нужно телефонии, а остальным "как повезет". Или это надо читать следующим образом: голосовой трафик имеет больший приоритет чем обычный. При этом "обычному" трафику гарантируется 2 Мб не смотря на приоритет голосового. Т. е. в случае конфликта priority и limit-at преимущество будет у limit-at. Я правильно понял?
     
    Последнее редактирование: 8 ноя 2016
  14. Илья Князев

    Илья Князев Администратор Команда форума

    1. Да правильно. Но вот то что в паренте нет max-limit это неправильно. Роутеру неоткуда считать.
    2. Да у limit-at преимущество. Т.е. сначала независимо от приоритетов раздается limit-at, а потом max-limit с учетом приоритетов, пока не будет выбран max-limit парента.
     
  15. Nemiroff_84

    Nemiroff_84 Участник

    1. Правильно ли я поставил pcq-download-default и pcq-upload-default или их надо поменять местами?
    2. Допустим в порты маршрутизатора включены локальные устройства, которые объединены через коммутатор или мост. Не будет ли в таком случае трафик между ними резаться на скорости 5 Мб?
    3. Т. е., если я не хочу, гарантировать скорость "обычному" трафику, то конфигурация должна выглядеть, как приведено ниже?

    /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
     
    Последнее редактирование: 8 ноя 2016
  16. Илья Князев

    Илья Князев Администратор Команда форума

    Да. Похоже на правду
     
  17. Nemiroff_84

    Nemiroff_84 Участник

    А что скажете по поводу: Допустим в порты маршрутизатора включены локальные устройства, которые объединены через коммутатор или мост. Не будет ли в таком случае трафик между ними резаться на скорости 5 Мб?

    На сколько понимаю я, то если обмен идет через встроенный чип коммутации, то файервол ни при чем, а мост по умолчанию в файерволе участия не принимает и как результат ни в том ни втом случае трафик между локальными устройствами не должен будет "резаться". Так?
     
    Последнее редактирование: 8 ноя 2016
  18. Илья Князев

    Илья Князев Администратор Команда форума

    Именно так.
     
  19. Nemiroff_84

    Nemiroff_84 Участник

    Илья, большое Вам спасибо. Вы потратили очень много времени!

    Могли бы Вы еще раз взглянуть на правильность расстановки "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
     
  20. Илья Князев

    Илья Князев Администратор Команда форума

    Здесь вопрос классификатора в pcq
    pcq-download идет по dst=address т.е. все пакеты к одному dst-address засовываются в отдельную подочередь
    pcq=upload по src-address
    В указанном вами примере используются паренты global-in и global-out которых нет в 6 версии RouterOS

    Хотя у меня тоже ошибка. Там дважды pcq=download должно быть. Потому что очередь висит на интерфейсе, сработает на выходе из построутинга и все преобразования уже будут сделаны.
    Т.е. мы пилим только по dst-address.