Уменьшить приоритет сетевого трафика в Linux

Я хочу снизить приоритет конкретного сетевого трафика с помощью 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. Нужно ли мне какое-то другое правило, чтобы сообщить Linux что-то вроде «весь остальной трафик идет с 1 приоритет » или это делается по умолчанию?
  3. Какова основная логика такого именования - 1: , 2: и т. Д.? Что означает 0xff ? Должен ли я явно указывать поле classid ?
1
задан 23 November 2020 в 16:30
1 ответ

Это можно сделать так, как я описываю ниже.

Сначала мы должны изменить корневую дисциплину интерфейса (обычно 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'
3
ответ дан 23 November 2020 в 10:48

Теги

Похожие вопросы