tc_htb
Table of Contents
Теория
| tc | это утилита для управления трафиком (шейпинг и приоритеты) |
| qdisc | это механизм управления очередями (cbq или htb или др.), кратко дисциплина |
| htb | это классовая дисциплина |
| шейпинг в htb | на основе алгоритма tbf, смотри tc-tbf |
| классы в htb | htb распределяет пакеты по классам для обработки, каждый из классов содержит другую дисциплину, по умолчанию: tc-pfifo, смотри tc-pfifo |
Практика
#Дисциплина
tc qdisc add dev ens160 root handle 1: htb default 12
#Родительский класс
tc class add dev ens160 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
#Дочерние классы
tc class add dev ens160 parent 1:1 classid 1:10 htb rate 40mbit ceil 100mbit
tc class add dev ens160 parent 1:1 classid 1:12 htb rate 60mbit ceil 100mbit
#Фильтры
tc filter add dev ens160 protocol ip parent 1:0 prio 1 \
u32 match ip src 192.168.150.0/24 flowid 1:10
Дисциплина
Создаем дисциплину
tc qdisc add dev ens160 root handle 1: htb default 12
| tc qdisc add | добавить дисциплину |
| dev ens160 | внутренний интерфейс, смотрит в локальную сеть, взят внутренний потому что обрабатывать можно только исходящие пакеты, так как входящие пакеты нужно еще принять перед обработкой. Исходящие пакеты от внутреннего интерфейса, как раз будут download для клиентов |
| root | корневая дисциплина или очередь, от нее идут другие очереди по классам |
| handle 1: | идентификатор дисциплины, где 1 это идентификатор дисциплины, у дисциплины всегда второе число после двоеточия 0, и второе число 0 можно не писать |
| htb | наименование дисциплины - механизма обработки очереди |
| default 12 | не классифицированному трафику будет назначен класс 1:12, где 1 это идентификатор дисциплины, а 12 идентификтор класса. Еще один класс с таким же названием (1:12) создать нельзя, выйдет ошибка RTNETLINK answers: File exists), разницы нет подключаете класс напрямую к дисциплине или к классу |
Родительский класс
Создаем родительский класс, чтобы его дочерние классы могли заимствовать друг у друга скорость
tc class add dev ens160 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
| tc class add | добавить класс |
| dev ens160 | сетевой адаптер ens160 |
| parent 1: | класс подключается либо напрямую к дисциплине, либо к классу, в данном случае к дисциплине 1: |
| classid 1:1 | идентификатор класса |
| htb | дисциплина htb |
| rate 100mbit | скорость класса |
| ceil 100mbit | максимальная скорость класса |
Дочерние классы
Распределяем трафик по классам
tc class add dev ens160 parent 1:1 classid 1:10 htb rate 40mbit ceil 100mbit tc class add dev ens160 parent 1:1 classid 1:12 htb rate 60mbit ceil 100mbit
| tc class add | добавить класс |
| dev ens160 | сетевой адаптер ens160 |
| parent 1:1 | класс подключается либо напрямую к дисциплине, либо к классу, в данном случае к классу 1:1 |
| classid 1:10 | идентификатор класса |
| htb | дисциплина htb |
| rate 40mbit | скорость класса |
| ceil 100mbit | максимальная скорость класса, если она заимствуется у другого родственного класса, у родственников один класс-родитель |
Фильтры
Здесь включаем фильтр, чтобы классифицировать трафик
tc filter add dev ens160 protocol ip parent 1:0 prio 1 \
u32 match ip src 192.168.150.0/24 flowid 1:10
| tc filter add | подключить фильтр |
| dev ens160 | сетевой адаптер ens160 |
| protocol ip | ipv4 |
| parent 1:0 | фильтр подключается к дисциплине 1:0 |
| prio 1 | влияет на порядок обращения к нескольким фильтрам, прикрепленным к одному и тому же родителю (чем ниже, тем раньше) |
| u32 | 32-битный фильтр контроля трафика |
| match ip src 192.168.150.0/24 | сравнить с IP адресом отправителя |
| flowid 1:10 | направить в очередь с классом 1:10 |
tc_htb.txt · Last modified: 2023/07/02 00:04 by admin