LINUX.ORG.RU
ФорумAdmin

vpn+шейпер


0

0

Есть 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?







anonymous

Вроде я немного ошибся - правильнее как я понимаю будет использовать следующие настройки: iptables: /sbin/iptables -t mangle -A PREROUTING -i ppp+ -j IMQ --todev 0 /sbin/iptables -t mangle -A POSTROUTING -o ppp+ -j IMQ --todev 1 /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

Шейпер для исходящего трафика на ppp+ интерфейсах (через imq1): tc qdisc add dev imq1 handle 1: root htb tc class add dev imq1 parent 1: classid 1:1 htb rate 512kbit tc class add dev imq1 parent 1:1 classid 1:$[10+0] htb rate $[512/число_ppp_интерфейсов]kbit ceil 512kbit .......................... tc class add dev imq1 parent 1:1 classid 1:$[10+число_ppp_интерфейсов] htb rate $[512/число_ppp_интерфейсов]kbit ceil 512kbit tc qdisc add dev imq1 parent 1:10 sfq .......................... tc qdisc add dev imq1 parent 1:$[10+число_ppp_интерфейсов] sfq tc filter add dev imq1 parent 1:0 protocol ip prio 0 u32 match ip dst a.b.c.d/32 flowid 1:$[10+0] .......................... tc filter add dev imq0 parent 1:0 protocol ip prio 0 u32 match ip dst e.f.g.h/32 flowid 1:$[10+число_ppp_интерфейсов]

И для входящего трафика на ppp+ интерфейсах (через imq0): tc qdisc add dev imq0 handle 1: root htb tc class add dev imq0 parent 1: classid 1:1 htb rate 128kbit tc class add dev imq0 parent 1:1 classid 1:$[10+0] htb rate $[128/число_ppp_интерфейсов]kbit ceil 128kbit .......................... tc class add dev imq0 parent 1:1 classid 1:$[10+число_ppp_интерфейсов] htb rate $[128/число_ppp_интерфейсов]kbit ceil 128kbit 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_интерфейсов]

anonymous
()
Ответ на: комментарий от anonymous

Вроде я немного ошибся - правильнее как я понимаю будет использовать
следующие настройки:
iptables: 
/sbin/iptables -t mangle -A PREROUTING -i ppp+ -j IMQ --todev 0 
/sbin/iptables -t mangle -A POSTROUTING -o ppp+ -j IMQ --todev 1 
/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 

Шейпер для исходящего трафика на ppp+ интерфейсах (через imq1): 
tc qdisc add dev imq1 handle 1: root htb 
tc class add dev imq1 parent 1: classid 1:1 htb rate 512kbit 
tc class add dev imq1 parent 1:1 classid 1:$[10+0] htb rate $[512/число_ppp_интерфейсов]kbit ceil 512kbit 
.......................... 
tc class add dev imq1 parent 1:1 classid 1:$[10+число_ppp_интерфейсов] htb rate $[512/число_ppp_интерфейсов]kbit ceil 512kbit 
tc qdisc add dev imq1 parent 1:10 sfq 
.......................... 
tc qdisc add dev imq1 parent 1:$[10+число_ppp_интерфейсов] sfq 
tc filter add dev imq1 parent 1:0 protocol ip prio 0 u32 match ip dst a.b.c.d/32 flowid 1:$[10+0] 
.......................... 
tc filter add dev imq0 parent 1:0 protocol ip prio 0 u32 match ip dst e.f.g.h/32 flowid 1:$[10+число_ppp_интерфейсов]

И для входящего трафика на ppp+ интерфейсах (через imq0):
tc qdisc add dev imq0 handle 1: root htb 
tc class add dev imq0 parent 1: classid 1:1 htb rate 128kbit 
tc class add dev imq0 parent 1:1 classid 1:$[10+0] htb rate $[128/число_ppp_интерфейсов]kbit ceil 128kbit 
.......................... 
tc class add dev imq0 parent 1:1 classid 1:$[10+число_ppp_интерфейсов] htb rate $[128/число_ppp_интерфейсов]kbit ceil 128kbit 
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_интерфейсов]

anonymous
()

>1. Имеет ли смысл использовать imq в моём случае?

да

>Или есть решение попроще?

нет

>/sbin/iptables -t mangle -A PREROUTING -i ppp+ -j IMQ --todev 0

Эта команда разве что-то дает?

>tc qdisc add dev imq0 parent 1:10 sfq

я так понял, у тебя каждого клиента создается класс. В этом случае, эта команда в принципе может и отсутствовать - пусть что хочет, то и качает, и как хочет.

>2. Правильны ли вышеприведённы настройки для шейпера используя imq?

Оно-то может и правильно, но при большом количестве интерфейсов надо бы еще и с r2q поиграться. Как минимум.

fagot ★★★★★
()
Ответ на: комментарий от fagot

>/sbin/iptables -t mangle -A PREROUTING -i ppp+ -j IMQ --todev 0

>Эта команда разве что-то дает?

Ну по-моему отправляет трафик на imq0, на котором происходит шейпинг входящего ( с ppp+ интерфейсов) трафика.

>>tc qdisc add dev imq0 parent 1:10 sfq

>я так понял, у тебя каждого клиента создается класс. В этом случае, эта команда в принципе может и отсутствовать - пусть что хочет, то и качает, и как хочет.

Это понятно - просто вроде как все рекомендуют использовать sfq вместо fifo_fast.

>2. Правильны ли вышеприведённы настройки для шейпера используя imq?

> Оно-то может и правильно, но при большом количестве интерфейсов надо бы еще и с r2q поиграться. Как минимум.

Ну в принципе как я понимаю надо уменьшить значение по умолчанию 10 до 1. А как максимум что ещё можно сделать?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.