LINUX.ORG.RU
ФорумAdmin

Ограничение входящего трафика при помощи tc


0

0

Задача стоит самая элементарная - ограничить весь входящий трафик на устройстве eth0 на моей машине. Но с этими классами, дисциплинами и фильтрами уже все мозги поломал. Читал темы на лоре(и не только), но как правило, рассматриваются более сложнае задачи. Поделитесь plz готовым скриптом, если у кого есть, или направьте на путь истинный.

#!/bin/bash

ETH="eth0"

# чистим
tc qdisc del dev ${ETH} handle ffff: ingress

# ставим
tc qdisc add dev ${ETH} handle ffff: ingress
tc filter add dev ${ETH} parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate 64Kbit burst 5k drop flowid :1

serjio28
()
Ответ на: комментарий от serjio28

Спасибо огромное! Так лаконично и даже понятно.

nixtrian
() автор топика

А насколько сложно при этом сделать, чтобы трафик из локальной сети оставался нетронутым?

nixtrian
() автор топика
Ответ на: комментарий от nixtrian

Вам посоветовали не лучший вариант с ingress police, там просто дропаются пакеты.
ИМХО, если у вас достаточно современный дистрибутив, у вас должна быть поддержка IFB.
Проверьте это так, сначала "modprobe ifb".
Потом команда "ip link show" должна показать сетевые интерфейсы ifb0 и ifb1.
Если такие интерфейсы есть, то вместо предложенного варианта лучше так:

#!/bin/bash

export TC="/sbin/tc"
$TC qdisc del dev eth0 root
$TC qdisc del dev eth0 ingress
$TC qdisc del dev ifb0 root
$TC qdisc del dev ifb0 ingress

$TC qdisc add dev ifb0 root tbf mpu 64 rate 220kbit latency 50ms burst 10000

ip link set dev ifb0 up

$TC qdisc add dev eth0 ingress
$TC filter add dev eth0 parent ffff: protocol ip prio 5 u32 \
  flowid 1:1 match ip src 10.0.0.0/24
$TC filter add dev eth0 parent ffff: protocol ip prio 10 u32 \
  flowid 1:1 match u32 0 0 \
  action mirred egress redirect dev ifb0

Здесь вместо 10.0.0.0/24 должен быть адрес вашей локальной сети 
и таких правил (фильтров) можно написать несколько, если локалка большая.

mky ★★★★★
()
Ответ на: комментарий от mky

> Вам посоветовали не лучший вариант с ingress police, там просто дропаются пакеты.

Возражу. Дропать лишние пакеты - не самое плохое решение. Дропаньем пакетов достигается нормальный отклик. Я даже где-то видал благодарность провайдеру, за то что он пользует именно полисинг для ограничения полосы, а не шейпинг.

azure ★★
()
Ответ на: комментарий от azure

>> Вам посоветовали не лучший вариант с ingress police, там просто дропаются пакеты.

>Возражу. Дропать лишние пакеты - не самое плохое решение.

Это сильно зависит от места и условий, где пакеты дропаются. Если перед вами "широкий" канал, а за вами узкий, приоритезировать траффик для уменшения латентности невозможно, то можно дропать. А если узкий канал перед вами, то дропать пакеты, которые с "трудом" уже прошли через этот канал, не очень хорошо, ИМХО. Шейпинг дает больший простор для манёвра, думаю, что автор топика рано или поздно приедёт к созданию классов и фильтров.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.