Считается что IFB идеологически более правильная реализация псевдо-устройства, чем IMQ.
IFB по умолчанию доступна в дистре Fedora Core 6.
IMQ требует патчить ядро, по умолчанию не доступна.
Насколько я понял идеологически
IFB - это скорее для iproute2
IMQ - iptables
Документация по IFB в исходниках iproute doc/actions/
или по адресу: http://linux-net.osdl.org/index.php?title=IFB
Отличные картинки с местоположением IMQ:
http://www.abclinuxu.cz/clanky/site/traffic-shaping-2-imq-a-uvod-do-shapingu
# СБРОС ПРАВИЛ -----------------------------
tc qdisc del dev eth0 root
tc qdisc del dev eth0 ingress
tc qdisc del dev ifb0 root
tc qdisc del dev ifb0 ingress
modprobe ifb
ip link set dev ifb0 up
service iptables restart
# ------------------------------------------
# IFB включение ----------------------------
modprobe ifb
ip link set dev ifb0 up
# ------------------------------------------
## ПОЛЕЗНЫЕ КОМАНДЫ-------------------------
tc -s filter show parent ffff: dev eth0
tc -s qdisc
ifconfig ifb0
tc -s filter show dev ifb0 parent 1:
tc -s qdisc show dev ifb0
######################################################
# ПРИМЕР ограничения входящего трафика
# маркировка IPTABLES недоступна
######################################################
### IFB --------------------------------------------------------------
tc qdisc add dev ifb0 root handle 1: prio
tc qdisc add dev ifb0 parent 1:1 handle 10: tbf rate 80kbit buffer 1600 limit 3000
tc qdisc add dev ifb0 parent 1:2 handle 20: tbf rate 160kbit buffer 1600 limit 3000
## выделили закачку исходников ядра
## wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.gz
tc filter add dev ifb0 parent 1: protocol ip prio 1 u32 match ip src 204.152.191.37/32 flowid 1:1
## выделили закачку исходников fedora core 6
## wget ftp://ftp.muug.mb.ca/pub/fedora/linux/core/6/i386/iso/FC-6-i386-DVD.iso
tc filter add dev ifb0 parent 1: protocol ip prio 2 u32 match ip src 130.179.31.46/32 flowid 1:2
### eth0 --------------------------------------------------------------
# перенаправлять входящие пакеты с eth0 в ifb0
tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: protocol ip \
u32 match u32 0 0 action mirred egress redirect dev ifb0
## TESTING -------------------------------------------------------------
оцените скорость и т.д.
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.gz
######################################################
# ПРИМЕР ограничения исходящего трафика
# маркировка IPTABLES доступна но
# filter работает на уровне iproute2 match ip dst
######################################################
Выполните СБРОС ПРАВИЛ и включите IFB (если выкл.)
### IFB --------------------------------------------------------------
tc qdisc add dev ifb0 root handle 1: prio
tc qdisc add dev ifb0 parent 1:1 handle 10: tbf rate 80kbit buffer 1600 limit 3000
tc qdisc add dev ifb0 parent 1:2 handle 20: tbf rate 160kbit buffer 1600 limit 3000
# закачка большого файла с хх.хх.хх.хх
tc filter add dev ifb0 parent 1: protocol ip prio 2 u32 match ip dst хх.хх.хх.хх/32 flowid 1:2
### eth0 --------------------------------------------------------------
# перенаправлять выходящие пакеты с eth0 в ifb0
tc qdisc add dev eth0 root handle 2: prio
tc filter add dev eth0 parent 2: protocol ip \
u32 match u32 0 0 action mirred egress redirect dev ifb0
## TESTING -------------------------------------------------------------
закачивайте большой файла на хх.хх.хх.хх оцените скорость и т.д.
tc -s filter show parent ffff: dev eth0
tc -s qdisc
ifconfig ifb0
tc -s filter show dev ifb0 parent 1:
tc -s qdisc show dev ifb0
######################################################
# ПРИМЕР ограничения исходящего трафика
# маркировка IPTABLES доступна
# filter работает на уровне маркировке пакетов в IPTABLES
######################################################
Выполните СБРОС ПРАВИЛ и включите IFB (если выкл.)
### IFB --------------------------------------------------------------
tc qdisc add dev ifb0 root handle 1: prio
tc qdisc add dev ifb0 parent 1:1 handle 10: tbf rate 80kbit buffer 1600 limit 3000
tc qdisc add dev ifb0 parent 1:2 handle 20: tbf rate 160kbit buffer 1600 limit 3000
tc filter add dev ifb0 parent 1:0 prio 0 protocol ip handle 10 fw flowid 1:1
tc filter add dev ifb0 parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:2
### eth0 --------------------------------------------------------------
# перенаправлять выходящие пакеты с eth0 в ifb0
tc qdisc add dev eth0 root handle 2: prio
tc filter add dev eth0 parent 2: protocol ip \
u32 match u32 0 0 action mirred egress redirect dev ifb0
tc qdisc add dev eth0 root handle 2: prio
tc filter add dev eth0 parent 2: protocol ip \
u32 match u32 0 0 action mirred egress redirect dev ifb0
# поставить в IPTABLES метку
iptables -t mangle -A OUTPUT -p tcp -d 85.254.228.6/32 -j MARK --set-mark 10
## TESTING -------------------------------------------------------------
закачивайте большой файла на хх.хх.хх.хх оцените скорость и т.д.
Источник статьи
|