Hi all
after some read I came up with this script please I need your help to correct or improve it
hey ecroy please tell me something
Here I assume that "eth1" is my interface to Internet & "eth0" interface to my clients
and with a total Bandwidth of 3Mbits/s Download and 1Mbits/s Upload
Let go inside the script "/etc/init.d/shaping"
Code: Select all
#!/sbin/runscript
# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
depend() {
need net
after firewall
}
start() {
ebegin "Starting shaping"
#!/bin/bash
# Author Maxwell
##HTB Tree
# +-----------+
# | root 1: |
# +-----------+
# |
# +---------------------------------------+
# | class 1:1 |
# +---------------------------------------+
# | | | | |
# +----+ +----+ +----+ +----+ +----+
# |1:10| |1:11| |1:12| |1:13| |1:14|
# +----+ +----+ +----+ +----+ +----+
# Location of the commands
TC=/sbin/tc
# interfaces
IFCUSTOMER=eth0
IFINTERNET=eth1
#Maximum Speed UP & Down
# Upload Ceil "MAX_SPEED_UP" 95% of Upload (1024kbits/s * 95% =973)
MAX_SPEED_UP=973
#Download Ceil "MAX_SPEED_DOWN" 95% of Download (3072kbits/s * 95% =2920)
MAX_SPEED_DOWN=2920
#Flush existing rules
echo "flush existing rules";
$TC qdisc del dev $IFINTERNET root >/dev/null 2>&1
$TC qdisc del dev $IFINTERNET ingress >/dev/null 2>&1
$TC qdisc del dev $IFCUSTOMER root >/dev/null 2>&1
$TC qdisc del dev $IFCUSTOMER ingress >/dev/null 2>&1
echo "start classify";
#add qdisc to both interfaces
# On creer une qdisc racine sur les peripheriques eth0 & eth1 avec identifiant (handle) 1: qui utilise htb
#ainsi tout traffic non classe ira vers la classe ayant le numero mineur 14 (1:14)
#Any classless traffic will automaticly bind with the minor number 14 (1:14)
$TC qdisc add dev $IFCUSTOMER root handle 1: htb default 14
$TC qdisc add dev $IFINTERNET root handle 1: htb default 14
#Parent class wich contains others Classes
$TC qdisc add dev $IFCUSTOMER parent 1: classid 1:1 htb rate ${MAX_SPEED_DOWN}kbit ceil ${MAX_SPEED_DOWN}kbit
$TC qdisc add dev $IFINTERNET parent 1: classid 1:1 htb rate ${MAX_SPEED_UP}kbit ceil ${MAX_SPEED_UP}kbit
#class 1:10 with max prio 40% of bandwith [ssh,dns,http,https,Packets with bit SYN enable...]
$TC qdisc add dev $IFINTERNET parent 1:1 classid 1:10 htb rate 384kbit ceil 640kbit prio 0
$TC qdisc add dev $IFCUSTOMER parent 1:1 classid 1:10 htb rate 1168kbit ceil 1536kbit prio 0
#class 1:11 with 25% of bandwith [Sip,IAX & NAT Services ]
$TC qdisc add dev $IFINTERNET parent 1:1 classid 1:11 htb rate 244kbit ceil ${MAX_SPEED_UP}kbit prio 1
$TC qdisc add dev $IFCUSTOMER parent 1:1 classid 1:11 htb rate 730kbit ceil ${MAX_SPEED_DOWN}kbit prio 1
#class 1:12 with 20% of bandwith [pop3,smtp & TOS Minimize-cost]
$TC qdisc add dev $IFINTERNET parent 1:1 classid 1:12 htb rate 192kbit ceil ${MAX_SPEED_UP}kbit prio 2
$TC qdisc add dev $IFCUSTOMER parent 1:1 classid 1:12 htb rate 584kbit ceil ${MAX_SPEED_DOWN}kbit prio 2
#class 1:13 with 10% of bandwith [TOS Maximize-Throughput & Internal Local Process...]
$TC qdisc add dev $IFINTERNET parent 1:1 classid 1:13 htb rate 97kbit ceil ${MAX_SPEED_UP}kbit prio 3
$TC qdisc add dev $IFCUSTOMER parent 1:1 classid 1:13 htb rate 292kbit ceil ${MAX_SPEED_DOWN}kbit prio 3
#class 1:14 with 5% of bandwith [P2P]
$TC qdisc add dev $IFINTERNET parent 1:1 classid 1:14 htb rate 48kbit ceil ${MAX_SPEED_UP}kbit prio 4
$TC qdisc add dev $IFCUSTOMER parent 1:1 classid 1:14 htb rate 146kbit ceil ${MAX_SPEED_DOWN}kbit prio 4
##Some of these classes will have a sfq queue discipline attached to them to dispatch their packets
#IFINTERNET
$TC qdisc add dev $IFINTERNET parent 1:12 handle 120: sfq perturb 10
$TC qdisc add dev $IFINTERNET parent 1:13 handle 130: sfq perturb 10
$TC qdisc add dev $IFINTERNET parent 1:14 handle 140: sfq perturb 10
#IFCUSTOMER
$TC qdisc add dev $IFCUSTOMER parent 1:12 handle 120: sfq perturb 10
$TC qdisc add dev $IFCUSTOMER parent 1:13 handle 130: sfq perturb 10
$TC qdisc add dev $IFCUSTOMER parent 1:14 handle 140: sfq perturb 10
#Let classify packets
$TC filter add dev $IFCUSTOMER parent 1:0 protocol ip prio 1 handle 1 fw classid 1:10
$TC filter add dev $IFCUSTOMER parent 1:0 protocol ip prio 2 handle 2 fw classid 1:11
$TC filter add dev $IFCUSTOMER parent 1:0 protocol ip prio 3 handle 3 fw classid 1:12
$TC filter add dev $IFCUSTOMER parent 1:0 protocol ip prio 4 handle 4 fw classid 1:13
$TC filter add dev $IFCUSTOMER parent 1:0 protocol ip prio 5 handle 5 fw classid 1:14
eend $?
}
stop() {
ebegin "Stopping shaping"
eend $?
}
and this is the part I pretend to add to my firewall script "/etc/init.d/firewall" on Mangle section
Code: Select all
#!/sbin/runscript
# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
depend() {
need net
}
start() {
ebegin "Starting firewall"
#!/bin/bash
# Author Maxwell
##Mangle Section
##We use RETURN to avoid packets to cross the entire rules
##PREROUTING
$IPTABLES -t mangle -A PREROUTING -p icmp -j MARK --set-mark 0x1
$IPTABLES -t mangle -A PREROUTING -p icmp -j RETURN
#TOS Marks
$IPTABLES -t mangle -A PREROUTING -m tos --tos Minimize-delay -j MARK --set-mark 0x1
$IPTABLES -t mangle -A PREROUTING -m tos --tos Minimize-delay -j RETURN
$IPTABLES -t mangle -A PREROUTING -m tos --tos Minimize-cost -j MARK --set-mark 0x2
$IPTABLES -t mangle -A PREROUTING -m tos --tos Minimize-cost -j RETURN
$IPTABLES -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x3
$IPTABLES -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j RETURN
#ssh,dns,http,https
$IPTABLES -t mangle -A PREROUTING -p tcp -m multiport --sports 22,53,80,443 -j MARK --set-mark 0x1
$IPTABLES -t mangle -A PREROUTING -p tcp -m multiport --sports 22,53,80,443 -j RETURN
#dns udp
$IPTABLES -t mangle -A PREROUTING -p udp -m udp --sport 53 -j MARK --set-mark 0x1
$IPTABLES -t mangle -A PREROUTING -p tcp -m udp --sport 53 -j RETURN
#Prioritize packets with SYN bit enable
$IPTABLES -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 0x1
$IPTABLES -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j RETURN
#Sip,IAX,H323
$IPTABLES -t mangle -A PREROUTING -p tcp -m multiport --sports 389,1503,1718,1719,1720,1721,4569,5004,5060,5061,7060,10000 -j MARK --set-mark 0x2
$IPTABLES -t mangle -A PREROUTING -p tcp -m multiport --sports 389,1503,1718,1719,1720,1721,4569,5004,5060,5061,7060,10000 -j RETURN
#POP3,SMTP,IMAP."ssl"...
$IPTABLES -t mangle -A PREROUTING -p tcp -m multiport --sports 25,110,143,993,995 -j MARK --set-mark 0x3
$IPTABLES -t mangle -A PREROUTING -p tcp -m multiport --sports 25,110,143,993,995 -j RETURN
#P2P
$IPTABLES -t mangle -A PREROUTING -m ipp2p --kazaa --gnu --edk --dc --bit --apple --soul --winmx --ares -j MARK --set-mark 0x5
$IPTABLES -t mangle -A PREROUTING -m ipp2p --kazaa --gnu --edk --dc --bit --apple --soul --winmx --ares -j RETURN
$IPTABLES -t mangle -A PREROUTING -j MARK --set-mark 0x5
##OUTPUT
$IPTABLES -t mangle -A OUTPUT -p icmp -j MARK --set-mark 0x1
$IPTABLES -t mangle -A OUTPUT -p icmp -j RETURN
#TOS Marks
$IPTABLES -t mangle -A OUTPUT -m tos --tos Minimize-delay -j MARK --set-mark 0x1
$IPTABLES -t mangle -A OUTPUT -m tos --tos Minimize-delay -j RETURN
$IPTABLES -t mangle -A OUTPUT -m tos --tos Minimize-cost -j MARK --set-mark 0x2
$IPTABLES -t mangle -A OUTPUT -m tos --tos Minimize-cost -j RETURN
$IPTABLES -t mangle -A OUTPUT -m tos --tos Maximize-Throughput -j MARK --set-mark 0x3
$IPTABLES -t mangle -A OUTPUT -m tos --tos Maximize-Throughput -j RETURN
#ssh,dns,http,https
$IPTABLES -t mangle -A OUTPUT -p tcp -m multiport --dports 22,53,80,443 -j MARK --set-mark 0x1
$IPTABLES -t mangle -A OUTPUT -p tcp -m multiport --dports 22,53,80,443 -j RETURN
#dns udp
$IPTABLES -t mangle -A OUTPUT -p udp -m udp --dport 53 -j MARK --set-mark 0x1
$IPTABLES -t mangle -A OUTPUT -p tcp -m udp --dport 53 -j RETURN
#Prioritize packets with SYN bit enable
$IPTABLES -t mangle -A OUTPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 0x1
$IPTABLES -t mangle -A OUTPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j RETURN
#Sip,IAX,H323
$IPTABLES -t mangle -A OUTPUT -p tcp -m multiport --dports 389,1503,1718,1719,1720,1721,4569,5004,5060,5061,7060,10000 -j MARK --set-mark 0x2
$IPTABLES -t mangle -A OUTPUT -p tcp -m multiport --dports 389,1503,1718,1719,1720,1721,4569,5004,5060,5061,7060,10000 -j RETURN
#POP3,SMTP,IMAP."ssl"...
$IPTABLES -t mangle -A OUTPUT -p tcp -m multiport --dports 25,110,143,993,995 -j MARK --set-mark 0x3
$IPTABLES -t mangle -A OUTPUT -p tcp -m multiport --dports 25,110,143,993,995 -j RETURN
#"P2P" As I were using ipp2p before will use it to mark p2p traffic
$IPTABLES -t mangle -A OUTPUT -m ipp2p --kazaa --gnu --edk --dc --bit --apple --soul --winmx --ares -j MARK --set-mark 0x5
$IPTABLES -t mangle -A OUTPUT -m ipp2p --kazaa --gnu --edk --dc --bit --apple --soul --winmx --ares -j RETURN
$IPTABLES -t mangle -A OUTPUT -j MARK --set-mark 0x5
.........
> very strange but is it normal to have default class on local interface (eth0) ? and what about Output stuff?
anyway let me know your comment ,analyse and add about this shaping script
