Шейпинг iptables IPMARK + htb

Ниже приведен еще один способ массово ограничить (shaping) скорость для нескольких тысяч абонентов с помошью IPMARK +HTB.

Допустим ip адреса клиентов из диапазона 192.168.0.0/16

1. Метим весь трафик (внутренний и внешний) с помошью IPMARK, используя для маркировки последние два октета

$IPT -t mangle -A POSTROUTING -o eth0 -j IPMARK --addr src --and-mask 0xffff --or-mask 0x10000

$IPT -t mangle -A POSTROUTING -o eth1 -j IPMARK --addr dst --and-mask 0xffff --or-mask 0x10000

–or-mask 0?10000 – указывает первую родительсткую дисциплину HTB

–and-mask 0xfff указывает на то, что метим последними двумя октетами

Пример: 192.168.136.2 получит метку 8802 (136 в десятичной системе это 88h в шестнадцатеричной, 2 так и останется 02)

2. Теперь создадим скриптик в который поместим правила HTB по ограничению скорости для всех необходимых IP адресов.


#!/bin/bash
dev_int="eth1"
dev_ext="eth0"

# Чистим очереди от предыдущих данных
tc qdisk del dev $dev_ext root
tc qdisk del dev $dev_int root

# Добавляем родительскую дисциплину для обоих интерфейсов
tc qdisc add dev $dev_ext root handle 1: htb
tc qdisc add dev $dev_int root handle 1: htb

# Добавляем фильтр fw (без параметров помещает пакет по указанными при помощи ipmark parent:classid в нужный класс.
)
tc filter add dev $dev_ext parent 1:0 protocol ip fw
tc filter add dev $dev_int parent 1:0 protocol ip fw

#########################################################
# SAMPLE CLIENT 1
# 192.168.136.1 -> 8801 (88: 136 hex; 01 - 1 hex)
#########################################################

tc class replace dev $dev_ext parent 1: classid 1:8801 htb rate 1024kbit
tc class replace dev $dev_int parent 1: classid 1:8801 htb rate 2048kbit

#########################################################
# SAMPLE CLIENT 2
# 192.168.136.2 -> 8802 (88: 136 hex; 02 - 2 hex)
#########################################################
tc class replace dev $dev_ext parent 1: classid 1:8802 htb rate 4090kbit
tc class replace dev $dev_int parent 1: classid 1:8802 htb rate 8192kbit

Собственно вот и все.


Источник статьи