Как исключить диапазоны портов через ematch в управлении трафиком Linux (tc)?

В настоящее время я сталкиваюсь с проблемой в моем коде.

В основном я эмулирую соединение между двумя компьютерами, подключенными через Ethernet-мост (Raspberry Pi, Raspbian). Таким образом, я могу влиять на параметры этого соединения (такие как пропускная способность, задержка и многое другое) через tc qdisc. Это отлично работает, как вы можете видеть в коде ниже.


А теперь о моей проблеме:


Я также пытаюсь исключить определенные диапазоны портов, что означает порты, на которые не влияют заданные мной параметры (задержка и т. д.).

Для этого я создал две прио-группы. Приоритетная полоса 0 (более высокий приоритет) обрабатывает мое исключение порта (уже в родительском корне). Затем в приоритетном диапазоне 1 (более низкий приоритет) я уменьшаю задержку через netem.
Весь трафик данных будет проходить через мой приоритетный диапазон 1, остальные (исключенные данные) будут проходить без влияния через приоритетный диапазон 0.

Я не получаю ошибок ядра при выполнении моего кода !
Но я получаю filter parent 1: protocol ip pref 1 basic только после ввода sudo tc filter show dev eth1. Мой матч даже не упоминается.

Что я сделал не так?
Можете ли вы объяснить мне, почему я не получаю ожидаемого результата?



ЭТО МОЙ КОД (в правильном порядке выполнения):

РОДИТЕЛЬСКИЙ КОРЕНЬ

sudo tc qdisc add dev eth1 root handle 1: prio bands 2 priomap 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  • Это создает два приобанда (1:1 и 1:2)

ДИАПАЗОН 0 [ИСКЛЮЧЕНИЕ ПОРТА | порт 100 - 800]

sudo tc qdisc add dev eth1 parent 1:1 handle 10: tbf rate 512kbit buffer 1600 limit 3000

  • Создает tbf (фильтр Token Bucket Filter) для установки пропускной способности

sudo tc filter add dev eth1 parent 1: protocol ip prio 1 handle 0x10 basic match "cmp(u16 at 0 layer transport lt 100) and cmp(u16 at 0 layer transport gt 800)" flowid 1:1

  • Создает фильтр с определенным дескриптором, исключающий порты с 100 по 800 из приоритетного диапазона 1 (на которые влияют пакеты данных)

ДИАПАЗОН 1 [ЭМУЛЯЦИЯ СЕТИ]

sudo tc qdisc add dev eth1 parent 1:2 handle 20: tbf rate 1024kbit buffer 1600 limit 3000

  • Сравните с ТБФ выше

sudo tc qdisc add dev eth1 parent 20:1 handle 21: netem delay 200ms

  • Создает через netem задержку в 200 мс

Здесь вы можете увидеть мою иерархию в виде изображения

Еще раз вопрос:
Мое совпадение с фильтром даже не упоминается.

Что я сделал не так?
Можете ли вы объяснить мне, почему я не получаю ожидаемого результата?



Я ценю любую помощь! Спасибо за ваши старания!
~ротсечс


person Rotsechs96    schedule 29.02.2016    source источник


Ответы (1)


Кажется, я должен пренебречь недостающим выводом! Тем не менее, он работает идеально.
Я установил SSH-соединение с моим мостом Ethernet (через MobaXterm).
После этого я установил задержку в 400 мс. Ввод консоли замедлился, как и ожидалось.
Наконец я создал фильтр и исключил диапазон портов от 20 до 24 (SSH имеет порт 22).

Задержка моего SSH-соединения сразу исчезла!

person Rotsechs96    schedule 02.03.2016
comment
есть ли шанс, что вы могли бы опубликовать основы ваших окончательных сценариев в этом ответе? - person thinktt; 01.05.2020