steryddd pisze:
W końcu jak to macie?
Witam,
Przyłącze sie do dyskusji...
1. plik imq_inter wgrywamy do /etc/rc.d
#! /bin/sh
# Podnoszenie interfejsów wirtulanych IMQ
#
case "$1" in
start)
#
echo ""
echo " Wirtualne interfejsy IMQ ----- WŁACZONE ------> ON "
echo ""
/sbin/modprobe imq numdevs=6 &>/dev/null
/sbin/ifconfig imq0 up &>/dev/null
/sbin/ifconfig imq1 up &>/dev/null
/sbin/ifconfig imq2 up &>/dev/null
/sbin/ifconfig imq3 up &>/dev/null
/sbin/ifconfig imq4 up &>/dev/null
/sbin/ifconfig imq5 up &>/dev/null
#
;;
stop)
#
echo ""
echo " Wirtualne interfejsy IMQ ----- WYŁACZONE -----> OFF "
echo ""
/sbin/ifconfig imq0 down &>/dev/null
/sbin/ifconfig imq1 down &>/dev/null
/sbin/ifconfig imq2 down &>/dev/null
/sbin/ifconfig imq3 down &>/dev/null
/sbin/ifconfig imq4 down &>/dev/null
/sbin/ifconfig imq5 down &>/dev/null
/sbin/rmmod imq &>/dev/null
#
;;
restart)
$0 stop
$0 start
;;
*)
echo ""
echo "U¿ycie: rc.imq [ start | stop | restart ]"
echo ""
exit
;;
esac
2. plik imq_p2p_eth wgrywamy do /etc/rc.d
#!/bin/bash
# shape_p2p
ECHO="/bin/echo"
MODUL="/sbin/modprobe"
TC="/sbin/tc"
i="/usr/sbin/iptables"
WANINT=eth0
LANINT=eth1
case "$1" in
start)
$ECHO ""
$ECHO " Kolejkowanie P2P ----ON---- "
$ECHO ""
ul=0
dl=0 #zerowanie
godz=`date +%H%M`
if [ $godz -ge "0100" -a $godz -lt "0700" ];then
ul=16 # 32-4KB
dl=64 # 128-16KB
pora=noc
fi
if [ $godz -ge "0700" -a $godz -lt "1600" ];then
ul=16 # 2KB
dl=64 # 4KB
pora=ranek
fi
if [ $godz -ge "1600" -a $godz -lt "2300" ];then
ul=16 # 2KB
dl=64 # 4KB
pora=dzien
fi
if [ $godz -ge "2300" -o $godz -lt "0100" ];then
ul=16 # 2KB
dl=64 # 4KB
pora=wieczor
fi
echo " "
echo "---------------------------------------"
echo " "$pora" UL-"$((ul/8))""KB/s" DL-"$((dl/8))"KB/s"
echo " "$ul"kbit "$dl"kbit"
echo "---------------------------------------"
$i -t mangle -A PREROUTING -p tcp -j CONNMARK --restore-mark
$i -t mangle -A PREROUTING -p tcp -m mark ! --mark 0 -j ACCEPT
$i -t mangle -A PREROUTING -m ipp2p --ipp2p -j MARK --set-mark 0x999
$i -t mangle -A PREROUTING -p tcp -m mark --mark 0x999 -j CONNMARK --save-mark
$i -t mangle -A POSTROUTING -o eth0 -m mark --mark 0x999 -j IMQ --todev 2
$i -t mangle -A POSTROUTING -o eth1 -m mark --mark 0x999 -j IMQ --todev 3
$TC qdisc add dev imq2 root handle 4:0 htb default 103 r2q 1
$TC qdisc add dev imq3 root handle 5:0 htb default 103 r2q 1
$TC class add dev imq2 parent 4:0 classid 4:1 htb rate $((ul/1))kbit burst 6k cburst 3k
$TC class add dev imq3 parent 5:0 classid 5:1 htb rate $((dl/1))kbit burst 6k cburst 3k
#ul
$TC class add dev imq2 parent 4:1 classid 4:101 htb rate 1kbit ceil ${ul}kbit quantum 1500 burst 0k cburst 0k prio 7
$TC filter add dev imq2 parent 4:0 protocol ip prio 7 handle 0x999 fw classid 4:101
# $TC qdisc add dev imq2 parent 4:101 sfq perturb 16 quantum 1500
#dl
$TC class add dev imq3 parent 5:1 classid 5:101 htb rate 1kbit ceil ${dl}kbit quantum 1500 burst 0k cburst 0k prio 7
$TC filter add dev imq3 parent 5:0 protocol ip prio 7 handle 0x999 fw classid 5:101
# $TC qdisc add dev imq3 parent 5:101 sfq perturb 16 quantum 1500
################################## ---p2p-- rozwala upload niceshapera - restartuj----
sleep 2
/usr/bin/niceshaper stop
sleep 5
/usr/bin/niceshaper start
################################## -------------- restart niceshapera! ---------------
#
;;
stop)
#
$ECHO ""
$ECHO " Kolejkowanie P2P ----OFF---- "
$ECHO ""
#
iptables -t mangle -D PREROUTING -p tcp -j CONNMARK --restore-mark
iptables -t mangle -D PREROUTING -p tcp -m mark ! --mark 0 -j ACCEPT
iptables -t mangle -D PREROUTING -m ipp2p --ipp2p -j MARK --set-mark 0x999
iptables -t mangle -D PREROUTING -p tcp -m mark --mark 0x999 -j CONNMARK --save-mark
iptables -t mangle -D POSTROUTING -o eth0 -m mark --mark 0x999 -j IMQ --todev 2
iptables -t mangle -D POSTROUTING -o eth1 -m mark --mark 0x999 -j IMQ --todev 3
$TC qdisc del dev imq2 root
$TC qdisc del dev imq3 root
#
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
$ECHO ""
$ECHO " U¿ycie kolejkowanie P2P [ start | stop | restart ] "
$ECHO ""
exit
;;
esac
wartości UL oraz DL dopisujemy w zależności od potrzeb.
3. w pliku rc.local po linijce # Tutaj umiesc komendy uruchamiajace twoje programy. dopisujemy:
/etc/rc.d/imq_inter start
sleep 30
niceshaper start
/etc/rc.d/imq_p2p_eth start
4. no i na koniec w pliku /etc/rc.conf musialem dopisac(poprawic) linijke odpowiedzialna za ladowanie modułów na cos takiego:
MODULES=(eth0 !ide-scsi ip_tables ip_nat_ftp ip_nat_irc iptable_nat ip_conntrack ip_conntrack_ftp ip_conntrack_irc ipt_ipp2p 8139too ip_tables ip_conntrack iptable_mangle ipt_LOG ipt_owner)
oczywiscie u was moze ona wygladac inaczej ale na pewno moduły:
ip_tables ip_nat_ftp ip_nat_irc iptable_nat ip_conntrack ip_conntrack_ftp ip_conntrack_irc ipt_ipp2p ip_tables ip_conntrack iptable_mangle ipt_LOG ipt_owner
powinny tam sie znalezc. bez tych wpisów niestety u mnie nie chcialo dzialac a mam najnowsze nnd i w miare nowe pakiety.
PS. co prawda w/w skrypt nie markuje wszystkich pakietów p2p (np. bearshare) i w tym przypadku trzeba zastosowac inne metody ... albo markowanie po portach (ale to jest zabawa na dlugie zimowe wieczory) albo zastosowac leayer7 (jak narazie mam go w fazie testów).
Pozdrawiam
Zbyszek