Разобрался.
Использовал HTB.
Перечитал кучу статей, но понял что к чему только после этой
http://www.dgr.su/t826863.htmlСкрипт HTB.INIT не обновлялся с 2004 года. в силу поставленных задач, требований и целей, пришлось чуть поправить-допилить его до современного состояния утилиты tc, итак что имеем на сегодня:
Собственно сам модифицированный скрипт HTB.INIT , также "для особых случаев" web интерфейс шейпера для webmin'a модифицированный модуль HTB-WEBMIN
Представленный модуль вебмина будет корректно работать только с представленным скриптом HTB.INIT
Пример использования в консоли
имеем интерфейсы eth0 смотрит в инет, и eth1 смотрит в локаль
Стоит заметить что в силу ограничения самой технологии управление возможно только исходящим трафиком относительно интерфейса , тоесть с eth0 в сторону инета и с eth1 в сторону локали.
Получаем и кладём файл скрипта HTB.INIT в /etc/init.d/ , делаем его исполняемым
cd /etc/init.d
wget ....
chmod +x htb.init
Создаём папку файлов конфигурации шейпера и файл кеша шейпера
mkdir /etc/sysconfig/htb
touch /var/cache/htb.init
Создаём файл с именем интерфейса на котором будем резать
touch /etc/sysconfig/htb/eth0
Таким образом мы инициализировали интерфейс для шейпера
Обозначаем в файле класс трафика по умолчанию, тоесть в какой класс будет падать тот трафик который не попадёт ни в один класс описанный нами далее для шейпинга,
ВАЖНО указать этот параметр, иначе весь трафик по умолчанию пойдёт через корневой класс
echo "DEFAULT=90" >> /etc/sysconfig/htb/eth0
Указываем параметр отношения точности/скорости работы шейпера
echo "R2Q=100" >> /etc/sysconfig/htb/eth0
Создаём файл корневого класса шейпера, здесь описывается общая толщина канала который мы будем распределять для определённых классов
touch /etc/sysconfig/htb/eth0-2.root
Будем считать что у нас широкополосный доступ с с толщиной канала 25 мегабит
Так как более корневых классов не будем создавать то выделим всю полосу для данного корневого класса
Указываем параметр RATE - определяем минимум для данного корневого класса
echo "RATE=25Mbit" >> /etc/sysconfig/htb/eth0-2.root
Указываем CEIL - определяем доступное для данного корневого класса
echo "CEIL=25Mbit" >> /etc/sysconfig/htb/eth0-2.root
Создаём файл класса для особо приоритетного трафика, пусть это будет голосовой трафик VOIP телефонии(порт сигнализации 5060, порты голосовых пакетов 2******0, протокол UDP, направление (dest ip) трафика 1.1.1.1)
touch /etc/sysconfig/htb/eth0-2.10.voip
Здесь цифра 10 - порядковый номер класса в который попадает трафик, естественно классы проверяются от меньшего к большему
Выделяем минимальную полосу 2 мегабита для такого трафика, тоесть застолбим у канала данную полосу под наш определённый трафик
echo "RATE=2Mbit" >> /etc/sysconfig/htb/eth0-2.10.voip
Выделяем доступную полосу 10 мегабит для такого трафика(тоесть если будут обнаружены свободные ресурсы канала, то этот трафик заберёт 10 мегабит из свободных например 15 ти мегабит)
echo "CEIL=10Mbit" >> /etc/sysconfig/htb/eth0-2.10.voip
Указывем приоритет для данного класса трафика относительно других классов , от 1 до 7, 1- самый высокий, 7- самый низкий
echo "PRIO=1" >> /etc/sysconfig/htb/eth0-2.10.voip
Указываем правила фильтрации
Указываем протокол трафика
echo "PROTO=UDP" >> /etc/sysconfig/htb/eth0-2.10.voip
Указываем правила RULE: - ip и port назначения, следует заметить что если после порта поставить запятую то это будут исходящие адреса:порты, а не адреса:порты назначения, правил RULE может быть несколько в одном классе...
echo "RULE=1.1.1.1:5060" >> /etc/sysconfig/htb/eth0-2.10.voip
echo "RULE=1.1.1.1:2******0" >> /etc/sysconfig/htb/eth0-2.10.voip
Указывем очерёдность обслуживания , тоесть если очерёдность не указана - используется pfifo(первый пришёл-первый ушёл), и если активность голосового трафика будет 100% и он займёт все ресурсы класса(голосовой протокол RTP - реалтайм протокол) то под сигнализацию на порт 5060 ничего не останется , не дадим ему этого делать и будем обрабатывать трафик в классе по принципу русской рулетки(round robin)SFQ, тоесть почти по очереди, быстро и качественно.
echo "LEAF=sfq" >> /etc/sysconfig/htb/eth0-2.10.voip
Указываем расписание для изменения правил RATE и CEIL, если надо
echo "TIME=124/14:20-16:50;128kbit,256kbit" >> /etc/sysconfig/htb/eth0-2.10.voip
Что означает в 1(понедельник) 2 (вторник) 4 (четверг) с 14:20 до 16:50 будет применён RATE (;128kbit) и CEIL (,256kbit)
Правил TIME также мжет быть несколько в одном классе, однако если одно правило перекрывает другое, то выполняться будет первое совпадение правил
Отмечу также - чтобы правила ТIME вступали в силу с точностью до минуты , надо в минутный крон добавить команду запуска проверки параметров TIME, для HTB.INIT это параметр "timecheck"
/etc/init.d/htb.init timecheck
Теперь создаём файл класса по умолчанию указанный при инициализации интерфейса eth0, сюда будет попадать весь трафик не попадающий в правила 10 выше
touch /etc/sysconfig/htb/eth0-2.90.default
установим минимум для неклассифицируемого трафика
echo "RATE=1Kbit" >> /etc/sysconfig/htb/eth0-2.90.default
установим макимум для неклассифицируемого трафика при простое ресурсов
echo "CEIL=10Mbit" >> /etc/sysconfig/htb/eth0-2.90.default
укажем как распределим неклассифицируемый трафик (почти по очереди)
echo "LEAF=sfq" >> /etc/sysconfig/htb/eth0-2.90.default
приоритет неклассифицируемого трафика будет 6
echo "PRIO=6" >> /etc/sysconfig/htb/eth0-2.90.default
Генерим правила командой
/etc/init.d/htb.init compile
Стартуем шейпер
/etc/init.d/htb.init start nocache
Пользователь добавил сообщение 24 Марта 2019, 14:05:26:
не получилось по началу нормально написать правила, была проблема с "рулями".
проблема в том что:
RULE=*,192.168.83.13 - работает
RULE=103.13.64.0/24,192.168.83.0/24 - тоже работает
,а RULE=*,192.168.83.0/24 - нет.
нужно писать так RULE=0.0.0.0/0,192.168.83.0/24
PS:192.168.83.0/24 моя локалка.