LINUX.ORG.RU

История изменений

Исправление BOOBLIK, (текущая версия) :

Своим скриптом ты шейпишь явно только исходящий трафик. Для того, чтобы пользователи внутри сети не сажали тебе внешний канал при закачках нужно вешать ingress шэйпинг на внешний интерфейс и просить его дропать пакеты при превышении лимита. TCP-протоколы это вполне переживают и у юзера просто снижается скорость закачки. Например так:

DOWNLINK=25000
DEV=eth1

tc qdisc add dev $DEV handle ffff: ingress

tc filter add dev $DEV parent ffff: protocol ip prio 50 \
           u32 match ip src 0.0.0.0/0 \
           match ip protocol 6 0xff \
           match ip sport 80 0xffff \
           police rate $((8*${DOWNLINK}/10))kbit \
           burst 10k drop flowid :1

tc filter add dev $DEV parent ffff: protocol ip prio 50 \
           u32 match ip src 0.0.0.0/0 \
           match ip protocol 6 0xff \
           match ip dport 80 0xffff \
           police rate $((8*${DOWNLINK}/10))kbit \
           burst 10k drop flowid :1

Где eth1 — внешний интерфейс сервера реализующего nat для внутренней сети.

Исходная версия BOOBLIK, :

Своим скриптом ты шейпишь явно только исходящий трафик. Для того, чтобы пользователи внутри сети не сажали тебе внешний канал при закачках нужно вешать ingress шэйпинг на внешний интерфейс и просить его дропать пакеты при превышении лимита. TCP-протоколы это вполне переживают и у юзера просто снижается скорость закачки. Например так:

DOWNLINK=25000
DEV=eth1

tc qdisc add dev $DEV handle ffff: ingress
 tc filter add dev $DEV parent ffff: protocol ip prio 50 \
           u32 match ip src 0.0.0.0/0 \
           match ip protocol 6 0xff \
           match ip sport 80 0xffff \
           police rate $((8*${DOWNLINK}/10))kbit \
           burst 10k drop flowid :1

        tc filter add dev $DEV parent ffff: protocol ip prio 50 \
           u32 match ip src 0.0.0.0/0 \
           match ip protocol 6 0xff \
           match ip dport 80 0xffff \
           police rate $((8*${DOWNLINK}/10))kbit \
           burst 10k drop flowid :1

Где eth1 — внешний интерфейс сервера реализующего nat для внутренней сети.