Долго разбирался с вопросом шейпинга исходящего трафика и вот к чему пришел:
Если на интерфейсе висит nat, то и шейпить на нем исходящий трафик от клиентов не получится.
Что бы решить данную проблему, можно завернуть весь входящий трафик от клиентов на интерфейсе без nat-а в виртуальный интерфейс ifb0.
eth1 - локалка (клиенты)
eth2(nat) - мир
Для инициализации интерфейса ifb0 нужно сначала загрузить модуль управления интерфейсом:
/sbin/modprobe ifb
После успешной загрузки модуля нужно включить интерфейс:
/sbin/ip link set dev ifb0 up
Затем, после того, как интерфейс будет поднят, нужно организовать переадресацию всего исходящего трафика от пользователей на этот интерфейс:
/sbin/tc qdisc add dev eth0 ingress
/sbin/tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
Теперь можно смело начинать строить классы и фильтры для входящего к пользователям трафика на интерфейсе eth1, а исходящего – на интерфейсе ifb0.
conf.shКод:
#!/bin/sh
...
USE_MANAD=1
MANAD_PORT=4567
MANAD_INTERFACE_IN=eth1
MANAD_INTERFACE_OUT=ifb0
засунул редирект трафика на интерфейс ifb0 сюда:
init_manad.shКод:
#!/bin/sh
cd ${0%${0##*/}}.
. ./conf.sh
#clear all rules
/sbin/tc qdisc del dev $MANAD_INTERFACE_IN root 2> /dev/null
/sbin/tc qdisc del dev $MANAD_INTERFACE_OUT root 2> /dev/null
#redirect to ifb0
/sbin/tc qdisc add dev $MANAD_INTERFACE_IN ingress
/sbin/tc filter add dev $MANAD_INTERFACE_IN parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev $MANAD_INTERFACE_OUT
#root
/sbin/tc qdisc add dev $MANAD_INTERFACE_IN root handle 1: htb default ffff r2q 1
/sbin/tc qdisc add dev $MANAD_INTERFACE_OUT root handle 1: htb default ffff r2q 1
#default
/sbin/tc class add dev $MANAD_INTERFACE_IN parent 1:0 classid 1:ffff htb rate 100mbit burst 4k prio 3
/sbin/tc qdisc add dev $MANAD_INTERFACE_IN parent 1:ffff handle ffff: sfq perturb 10 quantum 1500
/sbin/tc class add dev $MANAD_INTERFACE_OUT parent 1:0 classid 1:ffff htb rate 100mbit burst 4k prio 3
/sbin/tc qdisc add dev $MANAD_INTERFACE_OUT parent 1:ffff handle ffff: sfq perturb 10 quantum 1500
старт виртуального интерфейса прописал в rc.local
/sbin/modprobe ifb
/sbin/ip link set dev ifb0 up