Есть linux шлюз, adsl модем 512/128, висящий на eth0 интерфейсе linux шлюза и eth1 интерфейс linux шлюза смотрит в локалку. Раздача инета происходит с помощью pptp сервера poptop.
Настройки iptables:
/sbin/iptables -A FORWARD -i eth0 -o ppp+ -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Раньше было если один клиент активно качает, то съедет весь канал и у остальных клиентов инет еле работает. Сейчас поставил шейпер: при запуске /etc/ppp/ip-{up,down}.local для всех ppp* выполняется:
tc qdisc delete dev $IFACE root
tc qdisc add dev $IFACE root handle 1: htb default 1
tc class add dev $IFACE parent 1: classid 1:1 htb rate $RATE
tc qdisc add dev $IFACE parent 1:1 sfq
Где RATE = (512/число_ppp_интерфейсов + гарантированая_полоса_пропускания).
Но осталась проблемма связанная с следующим: есть клиенты которые активно качают, а есть клиенты которые подключены, но особо ничего не качают - соответсвенно канал используется не полностью. В принципе можно подобрать параметр гарантированая_полоса_пропускания - но всё равно получается не очень хорошо.
Как я понял мне лучше исползовать IMQ, перенаправлять всё с ppp* интерфейсов на imq0 и соответсвенно поднимать шейпер на imq0.
И соответственно как я понимаю следует использовать следующие настройки:
iptables:
/sbin/iptables -t mangle -A PREROUTING -i ppp+ -j IMQ --todev 0
/sbin/iptables -A FORWARD -i eth0 -o ppp+ -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Шейпер:
tc qdisc add dev imq0 handle 1: root htb
tc class add dev imq0 parent 1: classid 1:1 htb rate 512kbit
tc class add dev imq0 parent 1:1 classid 1:$[10+0] htb rate $[512/число_ppp_интерфейсов]kbit ceil 512kbit
..........................
tc class add dev imq0 parent 1:1 classid 1:$[10+число_ppp_интерфейсов] htb rate $[512/число_ppp_интерфейсов]kbit ceil 512kbit
tc qdisc add dev imq0 parent 1:10 sfq
..........................
tc qdisc add dev imq0 parent 1:$[10+число_ppp_интерфейсов] sfq
tc filter add dev imq0 parent 1:0 protocol ip prio 0 u32 match ip src a.b.c.d/32 flowid 1:$[10+0]
..........................
tc filter add dev imq0 parent 1:0 protocol ip prio 0 u32 match ip src e.f.g.h/32 flowid 1:$[10+число_ppp_интерфейсов]
Где a.b.c.d/32, e.f.g.h/32 и т. д. - ip клиентов на разных ppp интерфейсах.
Тогда вопросы следующие:
1. Имеет ли смысл использовать imq в моём случае? Или есть решение попроще?
2. Правильны ли вышеприведённы настройки для шейпера используя imq?