Начало Вход/Регистрация Помощ Tazi stranica s latinski bukwi
Области
 Новини
 Актуална тема
 Linux портали
 Какво е Линукс?
 Въпроси-отговори
 Форуми
   •Трудова борса
   •Конкурс
 Статии
 Дистрибуции
   •Поръчка на CD
 Made In BG
 Файлове
 Връзки
 Галерия
 Конференции
Настройки
 Външен вид
 Предложения
 Направи си сам
И още ...
 За нас
 Линукс за българи ЕООД
 Линк към нас
 Предложения

Подкрепяно от:
TelePoint - Място за хора със свободни идеи

SiteGround

initLab

Adsys Group

SAP Bulgaria

Въпроси отговори
Въпрос: cqb script
[Търси: ]

ВНИМАНИЕ: Използвайте форумите на сайта за дa зададете вашите въпроси.

Към началото |Добави въпрос |Отговори
 
Въпрос
От: usr Дата: 03/14/2007
 Преди време бях намерил скрипт за cbq, който му задаваш
 колко Kbit да има на дадено ip от цял клас мрежа C. И
 скрипта прави за всички ip-та от 1-255 по примерно
 100Kbit/s. Но за съжаление не си спомням как се казва
 скрипта. Идеята е да не си играя да пиша 255 едни и същи
 работи на мрежа ( ако имаш 10  мрежи си идва доста тегаво )
:) Някакви идеи 
Благодаря предварително



Отговор #1
От: MadMaxIII Дата: 03/14/2007
#!/bin/bash

E=/sbin/tc

case $1 in start | stop)
a1=`ifconfig | grep eth | awk '{ print $1 }'`
n1=`echo $a1 | wc -w`
for i in `seq $n1`; do
d=`echo $a1 | awk -v s=$i '{ print $s }'`
#$E qdisc del dev $d root
done
$E qdisc del dev eth0 root
$E qdisc del dev eth1 root
;;
*) echo "Usage: myhtb [start|stop]"
esac

case $1 in start)

MY_IP=/path/to/rules/rules.txt
#rules.txt --> Файл с информация за потребителите
IN_DEV=eth1
MY_NET='192.168.0.'
#Мрежова карта и IP адрес на вътрешната мрежа
#ВНИМАНИЕ - адреса е от първите ТРИ цифри + ЧЕТИРИ точки

 #===========================READ MY RULES AND
USERS============================
ip_count=0;N=`wc $MY_IP | awk '{ print $1 }'`
for i in `seq $N`; do rules=`head -n $i $MY_IP | tail -n 1`
mat=`expr match "$rules" '#'`; if [ "$mat" -eq 0 ];then
ip_count=`expr $ip_count + 1`
ip=`echo $rules | awk '{ print $1 }'`
#--------------------------------------------
my_ips[$ip_count]=$ip
my_set[$ip_count]=$rules
my_usr[$ip_count]=$MY_NET$ip
#--------------------------------------------
fi; done


DEV=eth0
NET=x.x.x.x/24
# Мрежова карта и IP адрес на външната мрежа

RATE1=10000
CEIL1=10000
RATE2=500
CEIL2=500

ID1=1:3
ID2=1:4

$E qdisc add dev $DEV root handle 1 htb default 99

 $E class add dev $DEV parent 1: classid 1:2 htb rate
100Mbit
 $E class add dev $DEV parent 1:2 classid 1:10 htb rate
100Mbit
 $E filter add dev $DEV parent 1:0 protocol ip prio 100 u32
match ip src $NET match ip dst $NET classid 1:10

 $E class add dev $DEV parent 1: classid $ID1 htb rate
$RATE1"kbit" ceil $CEIL1"kbit"

for i in `seq $ip_count`; do
j=${my_ips[$i]}
r=`echo ${my_set[$i]} | awk '{print($7)}'`
c=`echo ${my_set[$i]} | awk '{print($8)}'`

 $E class add dev $DEV parent $ID1 classid 1:$j htb rate
$r"kbit" ceil $c"kbit" prio 5
 $E filter add dev $DEV parent 1:0 protocol ip prio 200
handle 10$j fw classid 1:$j

done

 $E class add dev $DEV parent 1: classid $ID2 htb rate
$RATE2"kbit" ceil $CEIL2"kbit"

for i in `seq $ip_count`; do
j=${my_ips[$i]}
r=`echo ${my_set[$i]} | awk '{print($9)}'`
c=`echo ${my_set[$i]} | awk '{print($10)}'`

 $E class add dev $DEV parent $ID2 classid 1:1$j htb rate
$r"kbit" ceil $c"kbit" prio 5
 $E filter add dev $DEV parent 1:0 protocol ip prio 200
handle 30$j fw classid 1:1$j

done

 $E class add dev $DEV parent 1:20 classid 1:99 htb rate
64kbit prio 7

DEV=eth1
NET=192.168.0.0/24
DEF=99
RATE1=12000
CEIL1=12000
RATE2=600
CEIL2=600

ID1=1:3
ID2=1:4

$E qdisc add dev $DEV root handle 1 htb default $DEF

 $E class add dev $DEV parent 1: classid 1:2 htb rate
100Mbit
 $E class add dev $DEV parent 1:2 classid 1:10 htb rate
100Mbit

 $E filter add dev $DEV parent 1:0 protocol ip prio 100 u32
match ip src $NET match ip dst $NET classid 1:10

 $E class add dev $DEV parent 1: classid $ID1 htb rate
$RATE1"kbit" ceil $CEIL1"kbit"

for i in `seq $ip_count`; do
j=${my_ips[$i]}
r=`echo ${my_set[$i]} | awk '{print($3)}'`
c=`echo ${my_set[$i]} | awk '{print($4)}'`

 $E class add dev $DEV parent $ID1 classid 1:$j htb rate
$r"kbit" ceil $c"kbit" prio 5
 $E filter add dev $DEV parent 1:0 protocol ip prio 200
handle 20$j fw classid 1:$j

done

 $E class add dev $DEV parent 1: classid $ID2 htb rate
$RATE1"kbit" ceil $CEIL1"kbit"

for i in `seq $ip_count`; do
j=${my_ips[$i]}
r=`echo ${my_set[$i]} | awk '{print($5)}'`
c=`echo ${my_set[$i]} | awk '{print($6)}'`

 $E class add dev $DEV parent $ID2 classid 1:1$j htb rate
$r"kbit" ceil $c"kbit" prio 5
 $E filter add dev $DEV parent 1:0 protocol ip prio 200
handle 40$j fw classid 1:1$j

done

 $E class add dev $DEV parent 1:20 classid 1:99 htb rate
8kbit prio 7

;;
esac
#=============END=========================



Струкура на файла rules.txt:

#IP UserName BG in      INT in      BG out      INT out 
2   User1	 512	2048	128	256	512	1024	64	128

IP - последната цифра от IP адреса на потребителя
Следват RATE & CEIL за входящ и изходящ трафик


#==========Този файл трябва да се стартира ПРЪВ !!!
# с него се разделя БГ и ВЪНШЕН нет
IPTABLES=/usr/local/sbin/iptables
EXTIF="eth0"
INTIF="eth1"
 echo
"----------------------------------------------------------------------"
echo "   External Interface:  $EXTIF"
echo "   Internal Interface:  $INTIF"
 echo "   Clearing any existing rules and setting default
policy.."
$IPTABLES -t mangle -F
$IPTABLES -t mangle -X

 echo
"----------------------------------------------------------------------"
echo
echo "   Read IP for routing"
USERS=/path/to/file/users.txt
MY_IP=/path/to/file/ip.txt
BG_IP=/path/to/file/bg_nets.txt
# Тук са описани БГ адресите

MY_NET='192.168.201.'

 #===========================READ MY RULES AND
USERS============================
ip_count=0;N=`wc $MY_IP | awk '{ print $1 }'`
for i in `seq $N`; do rules=`head -n $i $MY_IP | tail -n 1`
mat=`expr match "$rules" '#'`; if [ "$mat" -eq 0 ];then
ip_count=`expr $ip_count + 1`
ip=`echo $rules | awk '{ print $1 }'`
#--------------------------------------------
my_ips[$ip_count]=$ip
my_set[$ip_count]=$rules
my_usr[$ip_count]=$MY_NET$ip
#--------------------------------------------
fi; done
 #===========================READ MY RULES AND
USERS============================

 echo
"----------------------------------------------------------------------"
echo
echo "Read IP for BG peering..."
$IPTABLES -t mangle -N bg-out
$IPTABLES -t mangle -N bg-in
$IPTABLES -t mangle -N int-out
$IPTABLES -t mangle -N int-in
line_count=`wc $BG_IP | awk '{ print $1 }'`

#line_count=10

for i in `seq $line_count`
do
a1=`head -n $i $BG_IP | tail -n 1`
mat=`expr match "$a1" '#'`
if [ "$mat" -eq 0 ]
then
$IPTABLES -t mangle -A FORWARD -s $a1 -j bg-in
$IPTABLES -t mangle -A POSTROUTING -d $a1 -j bg-out
echo $a1
fi
done
$IPTABLES -t mangle -A FORWARD -d $MY_NET"0/26" -j int-in
 $IPTABLES -t mangle -A POSTROUTING -s $MY_NET"0/26" -j
int-out

 #$IPTABLES -t mangle -A FORWARD -j LOG --log-prefix "
Unknow-OUT "
 #$IPTABLES -t mangle -A POSTROUTING -j LOG --log-prefix "
Unknow-IN "
 echo
"----------------------------------------------------------------------"
echo
echo "List of IP for service..."
echo '' > $USERS
for i in `seq $ip_count`; do

a1=${my_ips[$i]}
echo $a1 >> $USERS
ip2=${my_usr[$i]}'/32'

c1='BG_out_'$a1
c2='BG_in_'$a1

c3='INT_out_'$a1
c4='INT_in_'$a1

$IPTABLES -t mangle -N $c1
$IPTABLES -t mangle -N $c2
$IPTABLES -t mangle -N $c3
$IPTABLES -t mangle -N $c4

$IPTABLES -t mangle -A bg-in -d $ip2 -j $c2
$IPTABLES -t mangle -A bg-out -s $ip2 -j $c1

$IPTABLES -t mangle -A int-in -d $ip2 -j $c4
$IPTABLES -t mangle -A int-out -s $ip2 -j $c3

 $IPTABLES -t mangle -A $c1 -j MARK --set-mark 1`printf
"%03d" $a1`
 $IPTABLES -t mangle -A $c2 -j MARK --set-mark 2`printf
"%03d" $a1`
 $IPTABLES -t mangle -A $c3 -j MARK --set-mark 3`printf
"%03d" $a1`
 $IPTABLES -t mangle -A $c4 -j MARK --set-mark 4`printf
"%03d" $a1`

$IPTABLES -t mangle -A $c1 -j ACCEPT
$IPTABLES -t mangle -A $c2 -j ACCEPT
$IPTABLES -t mangle -A $c3 -j ACCEPT
$IPTABLES -t mangle -A $c4 -j ACCEPT

echo $ip2

done




<< Помощ (3 ) | как да си запиша клипче на десктопа (2 ) >>

 
© 2011-... Асоциация "Линукс за българи"
© 2007-2010 Линукс за българи ЕООД
© 1999-2006 Slavej Karadjov
Ако искате да препечатате или цитирате информация от този сайт прочетете първо това
Външния вид е направен от MOMCHE
Code Version: 1.0.8 H (Revision: 23-09-2011)
 
Изпълнението отне: 0 wallclock secs ( 0.06 usr + 0.02 sys = 0.08 CPU)