Я новичок в использовании tc и netem . Я хочу отложить отправку пакетов на определенный IP-адрес. Однако приведенные ниже команды вызывают задержку всех пакетов в системе, а не только на IP-адрес 1.2.3.4:
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1: prio
tc qdisc add dev eth0 parent 1:1 handle 2: netem delay 500ms
tc filter add dev eth0 parent 1:0 protocol ip pref 55 handle ::55 u32 match ip dst 1.2.3.4 flowid 2:1
Я предполагаю, что мне нужен какой-то универсальный фильтр в конце, чтобы указать, что весь оставшийся трафик не должен проходить через netem. Но я ничего не могу заставить работать. Как бы мне заставить это работать?
источник
Выбранный ответ неверный / неполный. Я столкнулся с подобной проблемой, выбранный ответ дал некоторую помощь, но не достаточно.
Во-первых, следующая команда на самом деле не нужна.
Он «удалит» корневой qdisc, но сразу же будет заменен на pfifo_fast (так что вы не потеряете связь).
Вторая команда:
Заменит pdifo_fast qdisc на первичный. По умолчанию первичная очередь имеет 3 полосы (0, 1, 2), каждая из которых управляется одним классом (1: 1, 1: 2 и 1: 3).
Пакеты будут отправлены на один из этих диапазонов с использованием поля TOS пакета IP. Эта конфигурация отображается при выполнении:
глядя на значения «priomap».
Затем вы добавляете netem qdisc:
С помощью этой команды вы задерживаете весь трафик, идущий в полосу 1: 1 (пока фильтр не будет установлен).
Но есть две оговорки:
Следующее решило мою проблему, чтобы netem не был затронут, пока фильтр не применен. Вместо вышеуказанных шагов я сделал:
По умолчанию весь трафик будет отправляться на полосу 1: 3.
Затем я добавил правило для задержки трафика:
Это создает qdisc в полосе 0, но так как весь трафик идет в полосу 3, это не повлияло на меня.
После этого я добавил фильтр:
Теперь с фильтром будут затронуты только выбранный IP / порт, так как мы перенаправляем выбранный трафик в полосу 0.
Весь остальной трафик остается неизменным, поскольку он продолжает передаваться в полосу 3.
источник
Простой пример с https://wiki.linuxfoundation.org/networking/netem, который позволяет задерживать пакеты на заданный IP-адрес, не затрагивая другой трафик, даже во время настройки:
источник
Мне не удалось задержать трафик на один IP, сохраняя при этом нормальный трафик к другим IP-адресам с помощью метода, описанного в этой теме.
Однако мне удается это сделать с помощью следующих команд.
Чтобы задержать
15001ms
трафик на IP1.2.3.4
с хоста, на котором выполняется команда. Командаhostname -I
используется для получения основного IP-адреса хоста, но значение можно заменить непосредственно внутри команды.Мне пришлось добавить еще один фильтр с
0ms
задержкой, чтобы соответствовать трафику с хоста. Конечно, это не элегантно, но мне не удалось заставить что-то более хорошее работать.Последняя команда может быть заменена для соответствия одному порту.
Чтобы задержать трафик на порт
18583
вместо IP1.2.3.4
.Я также нашел второй метод в этом ответе, чтобы задержать трафик
1.2.3.4:18583
без влияния на другой трафик.источник