Я хочу снизить приоритет конкретного сетевого трафика с помощью tc
, в частности tc-u32
на моем сервере Linux. Другими словами, весь другой трафик должен иметь более высокий приоритет, чем трафик с указанным IP-протоколом.
Я пытаюсь применить это правило фильтра tc, чтобы сделать исходящий трафик ICMP более низким приоритетом:
tc f a dev eno1 parent 1: prio 2 u32 match ip protocol 1 0xff
Но он возвращает эту ошибку:
RTNETLINK answers: Invalid argument
We have an error talking to the kernel
] Вот некоторые вещи, которые мне все еще неясны относительно tc в этом контексте:
1:
, 2:
и т. Д.? Что означает 0xff
? Должен ли я явно указывать поле classid
? Это можно сделать так, как я описываю ниже.
Сначала мы должны изменить корневую дисциплину интерфейса (обычно pfifo_fast
) на prio
:
tc q a dev eno1 root handle 1: prio
Эта команда создает qdisc на eno1
с 3
классов по умолчанию (1:1
- самый высокий приоритет, 1:2
- средний, 1:3
- самый низкий приоритет) . Обычно весь обычный трафик идет на 1:2
, трафик с наивысшим приоритетом (например, через ToS/DSCP) идет на 1:1
.
Мы можем проверить результат через:
tc -d -s class show dev eno1
Затем мы можем добавить правило фильтрации для направления всего трафика с IP-протоколом = 1 в 3-й (более низкий приоритет) класс:
tc f a dev eno1 parent 1: prio 1 u32 match ip protocol 1 0xff flowid 1:3
parent 1:
- этот фильтр прикреплен к qdisc. На основе результатов фильтрации qdisc решает, к какому классу следует направить этот трафик.
prio 1
- приоритет этого фильтра (в первую очередь используются фильтры с более низким приоритетом - конкретно в данном случае не имеет значения, т.к. фильтр всего один)
u32
- классификатор трафика
match ip protocol 1 0xff
— срабатывание фильтра при поступлении пакетов с IP-протоколом 1. 0xff
- битовая маска для соответствия протоколу IP.
flowid 1:3
— используемый класс.
Вы можете инициировать трафик ICMP и просмотреть результаты Отправлено
через:
watch -d -n1 'tc -d -s class show dev eno1'