Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Динамический шейпер с приоритетом

    Scheduled Pinned Locked Moved Russian
    11 Posts 4 Posters 2.4k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • werterW Offline
      werter
      last edited by

      Доброе.
      Исп. лимитер.

      1 Reply Last reply Reply Quote 0
      • J Offline
        jam-s
        last edited by

        То есть это реализуемо? А то в англоязычной ветке, мне перец сказал, что это никак не реализуется, мол гибкие лимиты не установить.

        1 Reply Last reply Reply Quote 0
        • D Offline
          danethz
          last edited by

          Приветствую :)

          Нужно настроить шейпер так, чтобы канал использовался на 100% до тех пор, пока в сети не появляются особые клиенты, после чего соотношение скорости падает - 90% особым клиентам, и 10% - остальным.

          Можно реализовать с помощью HFSC-очередей, но только максимум будет только в 80%.
          Если известен IP VIP-клиента, то можно:

          1. Создать очередь qVIP, которая будет иметь 79% realtime bandwidth.
          2. Создать правило Floating, которое будет Match'ить пакеты от одного или нескольких IP VIP-клиентов.
          3. У остальных очередей realtime bandwidth вообще не указываем, а ставим только Upper Limit.
            Таким образом пакеты, маркированные qVIP будут гарантировано иметь  79% канала.

          P. S. Есть мнение, что HFSC работают криво и с артифактами. Мой опыт в этом пока мал, но у меня заработало.
          Проверял на http и https с 3-х машин.

          1 Reply Last reply Reply Quote 0
          • J Offline
            jam-s
            last edited by

            @danethz:

            Приветствую :)

            Нужно настроить шейпер так, чтобы канал использовался на 100% до тех пор, пока в сети не появляются особые клиенты, после чего соотношение скорости падает - 90% особым клиентам, и 10% - остальным.

            Можно реализовать с помощью HFSC-очередей, но только максимум будет только в 80%.
            Если известен IP VIP-клиента, то можно:

            1. Создать очередь qVIP, которая будет иметь 79% realtime bandwidth.
            2. Создать правило Floating, которое будет Match'ить пакеты от одного или нескольких IP VIP-клиентов.
            3. У остальных очередей realtime bandwidth вообще не указываем, а ставим только Upper Limit.
              Таким образом пакеты, маркированные qVIP будут гарантировано иметь  79% канала.

            P. S. Есть мнение, что HFSC работают криво и с артифактами. Мой опыт в этом пока мал, но у меня заработало.
            Проверял на http и https с 3-х машин.

            Спасибо, попробую так сделать.

            1 Reply Last reply Reply Quote 0
            • D Offline
              danethz
              last edited by

              Спасибо, попробую так сделать.

              Вот, что мне помогло понять как оно работает:

              1. Небольшой пример, который можно адаптировать https://knasys.ru/8-pfsense-%D0%BE%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D0%BA%D0%BE%D1%80%D0%BE%D1%81%D1%82%D0%B8-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5/
              2. Тут основные принципы: https://calomel.org/pf_hfsc.html
              1 Reply Last reply Reply Quote 0
              • J Offline
                jam-s
                last edited by

                Попробовал настроить так, пока на практике нет возможности проверить, хочется узнать ваше мнение - верная или нет настройка.

                queue root_em0 on em0 bandwidth 50Mb priority 0 {qInternet}
                queue  qInternet on em0 bandwidth 50Mb hfsc( red ecn upperlimit 50Mb ) {qACK, qDefault, qP2P}
                queue  qACK on em0 bandwidth 10Mb hfsc( red ecn )
                queue  qDefault on em0 bandwidth 5Mb hfsc( red ecn default )
                queue  qP2P on em0 bandwidth 2.50Mb hfsc( red ecn upperlimit 2.50Mb )
                queue root_em1 on em1 bandwidth 100Mb priority 0 {qLink, qInternet}
                queue  qLink on em1 bandwidth 20Mb qlimit 500 hfsc( red ecn default )
                queue  qInternet on em1 bandwidth 50Mb hfsc( red ecn upperlimit 50Mb ) {qACK, qP2P}
                queue  qACK on em1 bandwidth 10Mb hfsc( red ecn )
                queue  qP2P on em1 bandwidth 2.50Mb hfsc( red ecn upperlimit 2.50Mb )

                Не знаю как правильно сюда скопировать конфиг. В общем настроил следующим образом - распихал випы и невипы по пулам, создал в файрволле плавающие правила для каждой группы с соответствующей очередью (qACK для випов, qP2P для обычных. qP2P взял для примера). Для правила qACK параметр real time и 80% от канала, приоритет 7. Для qP2P - параметр upper в 100%, приоритет 5.

                1 Reply Last reply Reply Quote 0
                • D Offline
                  danethz
                  last edited by

                  qACK для випов

                  Вот именно qACK стоит использовать по назначению, чтобы не путаться, а именно:
                  ACK-пакеты в TCP-сессии, это подтверждение получателя о полученном пакете, поэтому стоит этой очереди выдать realtime в 20-40% вне зависимости от статуса пользователя.
                  HFSC-очереди вообще не используют параметр Priority, на него можно не обращать внимания.
                  Относительно qP2P: тут вопрос как ловить этот трафик, визарды ловят его по диапазону портов, но сейчас торрент-клиенты хитрые, некоторые используют нестандартные порты, вплоть до 443.
                  Я пока не знаю как грамотно шейпить трафик P2P, поэтому просто отдаю ему оставшийся после шейпинга канал.
                  Вот очереди, которые я использую в работе с 2 WAN:

                   altq on em3 hfsc bandwidth 19Mb queue {  qInternet  } 
                   queue qInternet on em3 bandwidth 19Mb hfsc (  ecn  , linkshare 19Mb  , upperlimit 19Mb  )  {  qACK,  qDefault  } 
                   queue qACK on em3 bandwidth 20% hfsc (  ecn  , linkshare 20%  )  
                   queue qDefault on em3 bandwidth 10% hfsc (  ecn  , default  )  
                  
                   altq on em1 hfsc bandwidth 19Mb queue {  qInternet  } 
                   queue qInternet on em1 bandwidth 19Mb hfsc (  ecn  , linkshare 19Mb  , upperlimit 19Mb  )  {  qACK,  qDefault  } 
                   queue qACK on em1 bandwidth 20% hfsc (  ecn  , linkshare 20%  )  
                   queue qDefault on em1 bandwidth 10% hfsc (  ecn  , default  )  
                  
                   altq on em2 hfsc bandwidth 38Mb queue {  qLink,  qACK,  qMAIL,  q1C,  qRUK,  qLSN,  qHTTP-S  } 
                   queue qLink on em2 bandwidth 2Mb qlimit 500 hfsc (  default  , upperlimit 37Mb  )  
                   queue qACK on em2 bandwidth 8Mb hfsc (  realtime 8Mb , upperlimit 12Mb  )  
                   queue qMAIL on em2 bandwidth 4Mb hfsc (  realtime 4Mb , upperlimit 30Mb  )  
                   queue q1C on em2 bandwidth 8Mb hfsc (  realtime 8Mb , upperlimit 12Mb  )  
                   queue qRUK on em2 bandwidth 4Kb hfsc (  realtime 2Mb , upperlimit 30Mb  )  
                   queue qLSN on em2 bandwidth 4Mb hfsc (  realtime (4Mb, 2000, 2Mb)  , upperlimit 30Mb  )  
                   queue qHTTP-S on em2 bandwidth 8Mb hfsc (  realtime (4Mb, 2000, 3Mb)  , upperlimit 5Mb  )  
                  

                  Здесь qRUK и qLSN как раз VIP-пользователи, а em2 - Локальный интерфейс.
                  Так же есть один нюанс:
                  если в правилах Firewall->Rules, пакет проходит по всем правилам сверху вниз до первого совпадения, затем выходит из таблицы, то в правилах Floating пакет пройдет по всем правилам, даже если каждое ему подходит (за исключением, если в каком-либо правиле ты поставишь галочку Quick). Таким образом получается разница:

                  1. Firewall Rules - частные правила вверху, общие внизу.
                  2. Floating - наоборот. Частные внизу, общие вверху.
                    Пример моих правил Floating во вложении.
                    Всё же очень рекомендую ознакомиться с документом: https://calomel.org/pf_hfsc.html, поможет.

                  Floating.jpg_thumb
                  Floating.jpg

                  1 Reply Last reply Reply Quote 0
                  • P Offline
                    pigbrother
                    last edited by

                    2 danethz

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

                    1 Reply Last reply Reply Quote 0
                    • J Offline
                      jam-s
                      last edited by

                      Захотел сейчас настроить по примеру, но в прошлый раз видать так нахеревертил, что даже шейпер теперь не удаляется, и очереди тоже, даже не выключаются. Через конфиг бестолку. Приплыли  :-\


                      Проблему с неудаляемым шейпером решил - сделал бэкап, удалил вручную <shaper>…</shaper>.

                      1 Reply Last reply Reply Quote 0
                      • J Offline
                        jam-s
                        last edited by

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

                         queue root_em1 on em1 bandwidth 1Gb priority 0 {qLink, qInternet}
                        queue  qLink on em1 bandwidth 200Mb qlimit 500 hfsc( red ecn default ) 
                        queue  qInternet on em1 bandwidth 50Mb hfsc( red ecn upperlimit 50Mb ) {qACK, qVIP}
                        queue   qACK on em1 bandwidth 8Mb hfsc( red ecn realtime 8Mb upperlimit 12Mb ) 
                        queue   qVIP on em1 bandwidth 40Mb hfsc( red ecn realtime 35Mb upperlimit 37Mb )  
                        

                        И правила

                        match on em0 inet from any to <vip> label "USER_RULE" queue(qVIP, qACK)
                        match on em1 inet from any to <vip> label "USER_RULE" queue(qVIP, qACK)</vip></vip>
                        

                        Получается вип клиенты при работе будут иметь гарантированно 35 MB/sec, и максимум в 37 MB/sec. Как я понял, для остальных пользователей ни очередь, ни отдельный алиас с правилом в файрволле не нужны.

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post
                        Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.