LINUX.ORG.RU
ФорумAdmin

Реализация HTB


0

0

В общем случае имеется сеть. Доступ абонентов осуществляется через ВПН (pptp)
internet <- host1 <-> host2 -> абоненты Схема приблизительно такая. Хочется разграничивать
траффик: с одной скростью давать интернет и с другой к сетям в точке обмена трафиком =))
Пытаюсь реализовать все это на HTB. Где-то ошибка в правилах =(. Рисовал их, насколько понял
документацию по iproute2


############
# 1: #
############
|
############
# 1:1 #
############
|
|
тарифиц --------------- не тарифиц. + скор *2
10Mbit | | 2Mbit
############## #############
# 1:10 # # 1:11 #
############## #############
| |
############## #############
# 10: # # 20: #
############## #############
| | | | | | | | | | | | |



/sbin/iptables -A FORWARD -t mangle -s 192.168.1.1 -d 195.114.129.0/24 -j MARK --set-mark 1
/sbin/iptables -A FORWARD -t mangle -s 192.168.1.1 -d 195.114.129.0/24 -j ACCEPT
/sbin/iptables -A FORWARD -t mangle -s 192.168.1.1 -d 0.0.0.0/0 -j MARK --set-mark 2
/sbin/iptables -A FORWARD -t mangle -s 192.168.1.1 -d 0.0.0.0/0 -j ACCEPT

/sbin/tc qdisc add dev eth0 root handle 1: htb default 999
/sbin/tc class add dev eth0 parenet 1: classid 1:1 htb rate 12Mbit ceil 12Mbit
/sbin/tc class add dev eth0 parent 1:1 classid 1:10 htb rate 10Mbit ceil 12Mbit
/sbin/tc class add dev eth0 parent 1:1 classid 1:11 htb rate 2Mbit ceil 12Mbit

/sbin/tc filter add dev eth0 protocol ip parent 1:1 prio 1 u32 match ip dst 195.114.129.0/24 \
flowid 1:11
/sbin/tc filter add dev eth0 protocol ip parent 1:1 prio 1 u32 match ip dst 0.0.0.0/0 \
flowid 1:10

/sbin/tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
/sbin/tc qdisc add dev eth0 parent 1:11 handle 20: sfq perturb 10

/sbin/tc class add dev eth0 parent 10: classid 10:1 rate 32kbit ceil 32kbit cburst 1500
/sbin/tc filter add dev eth0 protocol ip parent 10: prio 5 handle 2 fw classid 10:1
....

/sbin/tc class add dev eth0 parent 20: classid 20:1 rate 128kbit ceil 128kbit cburst 1500
/sbin/tc filter add dev eth0 protocol ip parent 20: prio 5 handle 1 fw classid 20:1
......
/sbin/tc qdisc add dev eth0 parent 1:1 handle 10: htb

anonymous

Поиск рулил? :) lartc.org рулил? :) Что такое eth0? Если клиенты на vpn, то без imq дела не будет.

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

Смотрел я статьи на опеннет =(. На счет ВПН клиентов понял =)) но я хочу резать исходящий трафик клиента на сервере host2, а входящий трафик на host 1. Не понял одного получается я делаю вначале классфул очередь после нее классификатор потом фильтр, затем еще очередь и в этой очереди создавать очереди уже для клиентов и в них направлять трафик в соответствии с маркировкой в iptables.

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

>Не понял одного получается я делаю вначале классфул очередь после нее классификатор потом фильтр, затем еще очередь и в этой очереди создавать очереди уже для клиентов и в них направлять трафик в соответствии с маркировкой в iptables.

вот этого я тоже не понял :) Чуть иначе сформулируй плз :)

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

сделал немного по-другому =)
Т.е. у меня уже есть файл с данными
ip speed
написал вот такой скрипт
cat make_shaper a_shaper]#
#!/usr/bin/perl
#################
# mY shaper =)))#
#################
$od_net = 'cfg/odessa';
$cfg = 'cfg/gtwshaper2.cfg';
$DEV = 'eth0';
$DOWNRATE = '40Mbit';
$INETRATE = '10Mbit';
$ODRATE = '30Mbit';
$cburst = 1500;
$koef_od = 4; # koeficient dlya ubelicheniya skorosti po odesskomy kanalu

######################
# Nachalnie usloviya #
######################
`/sbin/iptables -F FORWARD -t mangle`;
`/sbin/tc qdisc del dev $DEV root`;

# Formiruem koren dereva
`/sbin/tc qdisc add dev $DEV root handle 1: htb default 11111`;
`/sbin/tc class add dev $DEV parent 1: classid 1:1 htb rate $DOWNRATE`;
# Sozdaem 2 klassa dlya inet trafica i dlya odesskogo
`/sbin/tc class add dev $DEV parent 1:1 classid 1:2 htb rate $INETRATE ceil $INETRATE cburst $cburst`;
`/sbin/tc class add dev $DEV parent 1:1 classid 1:3 htb rate $ODRATE ceil $ODRATE cburst $cburst`;

#################################################
# Formiruem 2 massiva polzovatelei i ih skorost #
#################################################
$i = 1;
open (RATEIP, $cfg) || print "file whith ip and rate not found!: $cfg";
while (<RATEIP>)
{
($ip_cl, $rate_cl) = split(" ",$_);
$ip_cl =~ s/\s+//g; chomp($ip_cl); $ip_cl[$i] = $ip_cl;
$rate_cl =~ s/\s+//g; chomp($rate_cl); $rate_cl[$i] = $rate_cl;
$i++;
}
#########################
# Massiv l'gotnih setei #
#########################
$i = 1;
open(ODNET, $od_net) || print "file whith od_net no found!: $od_net";
while (<ODNET>)
{
chomp($_);
$odnet[$i] = $_;
$i++;
}
################################
# Zadaem pravila dlya IPtables #
################################
$kolvo_clientov = @ip_cl;
$kolvo_odnet = @odnet;
$k = 1; $j = 1;
for ( $k = 1; $k < $kolvo_clientov; $k++ )
{
for ( $j = 1; $j < $kolvo_odnet; $j++ )
{
chomp($ip_cl[$k]); chomp($odnet[$j]);
`/sbin/iptables -A FORWARD -t mangle -d $ip_cl[$k] -s $odnet[$j] -j MARK --set-mark $k`;
# print "`/sbin/iptables -A FORWARD -t mangle -d $ip_cl[$k] -s $odnet[$j] -j MARK --set-makr $k\n`";
`/sbin/iptables -A FORWARD -t mangle -d $ip_cl[$k] -s $odnet[$j] -j ACCEPT`;
}
# `/sbin/iptables -A FORWARD -t mangle -d $ip_cl[$k] -s 0.0.0.0/0 -j MARK --set-mark $mark`;

# Sozdaem class dlya kazdogo klienta v vetvi odessa i zadaem filtr dlya classa
{ #Dly togo chobi descriptori ne peresekalis i ne zaviseli ot
# kokretnogo chisla classid raschitivaem vot tak
$id_odnet = $kolvo_clientov + 10 + $k;
$classid_odnet = "1:" . $id_odnet;
$rate_od = $rate_cl[$k] * $koef_od;
$rate_od = $rate_od . "kbit";
`/sbin/tc class add dev $DEV parent 1:3 classid $classid_odnet htb rate $rate_od ceil $rate_od cburst $cburst`;
`/sbin/tc filter add dev $DEV protocol ip parent 1:0 prio 1 handle $k fw flowid $classid_odnet`;
}{ # Sozdaem class dlya kazdogo klienta d vetvi internet i zadaem filtr dlya classa
$id_inet = 10 + $k;
$classid_inet = "1:" . $id_inet;
$rate_cl[$k] = $rate_cl[$k] . "kbit";
`/sbin/tc class add dev $DEV parent 1:2 classid $classid_inet htb rate $rate_cl[$k] ceil $rate_cl[$k] cburst $cburst`;
`/sbin/tc filter add dev $DEV protocol ip parent 1:0 prio 2 u32 match ip src 0.0.0.0/0 match ip dst $ip_cl[$k] flowid $classid_inet`;
# `/sbin/tc filter add dev $DEV parent 1:0 prio 1 protocol ip handle $k fw flowid $classid_inet`;
}
}
Урезали только входящий для абонента трафик. Напомню схему соединения с интернетом. интернет - хост 1 -------- хост 2 ---- локальная сеть
т.е. эти правила действительны на сетевой карте хоста1, которая в свою очередь смотрит на хост2.
Спасибо за внимание =)) пойду переделывать этот скрипт для второго хоста =)

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

=(( Говорят есть ограничение на количество правил в Iptables =\((( А по такой схеме получится достаточно много правил. Если сетей с льготным трафиком достаточно большое количество =(. Получится кол-во сетей на кол-во пользователей и на 2 =((( Буду переделывать =)

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

>Говорят есть ограничение на количество правил в Iptables

3-5к правил вроде бы работает нормально (сам не проверял), даже о 10к вроде кто-то вспоминал. Думается, что если еще и с умом разбить все это по цепочкам, проблем быть не должно (если машина не p133).

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