User Tools

Site Tools


tc_htb

Теория

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 влияет на порядок обращения к нескольким фильтрам, прикрепленным к одному и тому же родителю (чем ниже, тем раньше)
u3232-битный фильтр контроля трафика
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