#!/bin/sh
# TC shaping
# ADVANCED_SHAPING
# Version 1.002-htb
echo ======================================================================
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin
iptables -t mangle -F 2>/dev/null
iptables -t mangle -X 2>/dev/null
iptables -t mangle -N markov
iptables -t mangle -I PREROUTING -j markov
iptables -t mangle -N markov2
iptables -t mangle -I POSTROUTING -j markov2
unalias a
unalias s
unalias d
echo 'clear; tc -s class sh dev eth0 | grep p'> /usr/bin/a
echo 'clear; tc -s class sh dev eth1 | grep p'> /usr/bin/s
echo 'clear; tc -s class sh dev eth2 | grep p'> /usr/bin/d
chmod +x /usr/bin/a /usr/bin/s /usr/bin/d
alias s0='clear; tc -s class sh dev eth0 | grep p'
alias s1='clear; tc -s class sh dev eth1 | grep p'
alias s2='clear; tc -s class sh dev eth2 | grep p'
alias s3='clear; tc -s class sh dev eth3 | grep p'
alias z='clear; tc -s class sh dev '
tc qdisc del dev eth0 root >/dev/null 2>&1
tc qdisc del dev eth1 root >/dev/null 2>&1
tc qdisc del dev eth1.2 root >/dev/null 2>&1
tc qdisc del dev eth1.3 root >/dev/null 2>&1
tc qdisc del dev eth0 root >/dev/null 2>&1
tc qdisc del dev eth1 root >/dev/null 2>&1
# cely interface eth0 - 1024 kbps
tc qdisc add dev eth0 root handle 10: htb default 20
tc class add dev eth0 parent 10: classid 10:2 \
htb rate 1024Kbit
tc filter add dev eth0 parent 10: protocol ip prio 1 u32 \
match ip protocol 1 0xff match ip dst 212.24.132.66 match ip src 10.1.2.82 flowid 10:1
tc filter add dev eth0 parent 10: protocol ip prio 1 u32 \
match ip sport 22 0xffff match ip dst 212.24.132.66 match ip src 10.1.2.82 flowid 10:1
tc filter add dev eth0 parent 10: protocol ip prio 1 u32 \
match ip sport 12865 0xffff match ip dst 212.24.132.66 match ip src 10.1.2.82 flowid 10:1
tc filter add dev eth0 parent 10: protocol ip prio 1 u32 \
match ip sport 8764 0xffff match ip dst 212.24.129.30 match ip src 10.1.2.82 flowid 10:1
tc filter add dev eth0 parent 10: protocol ip prio 1 u32 \
match ip sport 123 0xffff match ip dst 212.24.132.2 match ip src 10.1.2.82 flowid 10:1
tc filter add dev eth0 parent 10: protocol ip prio 1 u32 \
match ip dst 0.0.0.0/0 flowid 10:2
# Odchozi podtrida pro eth1 - 1024 kbps
tc class add dev eth0 parent 10:2 classid 10:21 \
htb rate 1024Kbit
# Do ni dle marku
tc filter add dev eth0 parent 10:2 protocol ip prio 1 \
handle 1 fw classid 10:21
echo eth0 '-->' from eth1 total 1024 kbps, weight 102,
# nejrychlejsi
tc class add dev eth0 parent 10:21 classid 10:421 htb \
rate 256Kbit ceil 10000Kbit prio 1
tc qdisc add dev eth0 parent 10:421 pfifo
# stredni
tc class add dev eth0 parent 10:21 classid 10:521 htb \
rate 256Kbit ceil 10000Kbit prio 3
tc qdisc add dev eth0 parent 10:521 sfq perturb 15
# Filtry
tc filter add dev eth0 parent 10: protocol ip prio 1 u32 \
match ip dst 0.0.0.0/0 flowid 10:21
# 0x8 u ssh - scp do stredni
tc filter add dev eth0 parent 10:21 protocol ip prio 4 u32 \
match ip sport 22 0xffff match ip tos 0x8 0xff match ip dst 0.0.0.0/0 flowid 10:521
tc filter add dev eth0 parent 10:21 protocol ip prio 4 u32 \
match ip dport 22 0xffff match ip tos 0x8 0xff match ip dst 0.0.0.0/0 flowid 10:521
# ICMP
tc filter add dev eth0 parent 10:21 protocol ip prio 4 u32 \
match ip protocol 1 0xff match ip dst 0.0.0.0/0 flowid 10:421 \
# TOS 0x10 a 0x20 do 1.tridy
tc filter add dev eth0 parent 10:21 protocol ip prio 4 u32 \
match ip tos 0x10 0xff match ip dst 0.0.0.0/0 flowid 10:421
tc filter add dev eth0 parent 10:21 protocol ip prio 4 u32 \
match ip tos 0x20 0xff match ip dst 0.0.0.0/0 flowid 10:421
# Vybrane sluzby podle portu do 1.tridy
for i in 21 23 53 33434
do
tc filter add dev eth0 parent 10:21 protocol ip prio 4 u32 \
match ip dport $i 0xffff match ip dst 0.0.0.0/0 flowid 10:421
tc filter add dev eth0 parent 10:21 protocol ip prio 4 u32 \
match ip sport $i 0xffff match ip dst 0.0.0.0/0 flowid 10:421
done
# TCP ACKy bez payloadu - mensi nez 64 bajtu
tc filter add dev eth0 parent 10:21 protocol ip prio 4 u32 \
match ip protocol 6 0xff \
match u8 0x10 0xff at nexthdr+13 \
match u16 0x0000 0xffc0 at 2 \
flowid 10:421
# Stredne rychle sluzby
for i in 20 80 443 3128
do
tc filter add dev eth0 parent 10:21 protocol ip prio 4 u32 \
match ip sport $i 0xffff match ip dst 0.0.0.0/0 flowid 10:521
tc filter add dev eth0 parent 10:21 protocol ip prio 4 u32 \
match ip dport $i 0xffff match ip dst 0.0.0.0/0 flowid 10:521
done
# mail
for i in 25 110 143 465 993 995
do
tc filter add dev eth0 parent 10:21 protocol ip prio 4 u32 \
match ip sport $i 0xffff match ip dst 0.0.0.0/0 flowid 10:521
tc filter add dev eth0 parent 10:21 protocol ip prio 4 u32 \
match ip dport $i 0xffff match ip dst 0.0.0.0/0 flowid 10:521
done
# Zbytek do nejpomalejsi
tc filter add dev eth0 parent 10:21 protocol ip prio 4 u32 \
match ip dst 0.0.0.0/0 flowid 10:521
echo eth0 '-->' 1024 kbps total
# cely interface eth1 - 1024 kbps
tc qdisc add dev eth1 root handle 11: htb default 20
tc class add dev eth1 parent 11: classid 11:2 \
htb rate 1024Kbit
tc filter add dev eth1 parent 11: protocol ip prio 1 u32 \
match ip dst 0.0.0.0/0 flowid 11:2
# nejrychlejsi
tc class add dev eth1 parent 11:2 classid 11:42 htb \
rate 256Kbit ceil 10000Kbit prio 1
tc qdisc add dev eth1 parent 11:42 pfifo
# stredni
tc class add dev eth1 parent 11:2 classid 11:52 htb \
rate 256Kbit ceil 10000Kbit prio 3
tc qdisc add dev eth1 parent 11:52 sfq perturb 15
# Filtry
tc filter add dev eth1 parent 11: protocol ip prio 1 u32 \
match ip dst 0.0.0.0/0 flowid 11:2
# 0x8 u ssh - scp do stredni
tc filter add dev eth1 parent 11:2 protocol ip prio 4 u32 \
match ip sport 22 0xffff match ip tos 0x8 0xff match ip dst 0.0.0.0/0 flowid 11:52
tc filter add dev eth1 parent 11:2 protocol ip prio 4 u32 \
match ip dport 22 0xffff match ip tos 0x8 0xff match ip dst 0.0.0.0/0 flowid 11:52
# ICMP
tc filter add dev eth1 parent 11:2 protocol ip prio 4 u32 \
match ip protocol 1 0xff match ip dst 0.0.0.0/0 flowid 11:42 \
# TOS 0x10 a 0x20 do 1.tridy
tc filter add dev eth1 parent 11:2 protocol ip prio 4 u32 \
match ip tos 0x10 0xff match ip dst 0.0.0.0/0 flowid 11:42
tc filter add dev eth1 parent 11:2 protocol ip prio 4 u32 \
match ip tos 0x20 0xff match ip dst 0.0.0.0/0 flowid 11:42
# Vybrane sluzby podle portu do 1.tridy
for i in 21 23 53 33434
do
tc filter add dev eth1 parent 11:2 protocol ip prio 4 u32 \
match ip dport $i 0xffff match ip dst 0.0.0.0/0 flowid 11:42
tc filter add dev eth1 parent 11:2 protocol ip prio 4 u32 \
match ip sport $i 0xffff match ip dst 0.0.0.0/0 flowid 11:42
done
# TCP ACKy bez payloadu - mensi nez 64 bajtu
tc filter add dev eth1 parent 11:2 protocol ip prio 4 u32 \
match ip protocol 6 0xff \
match u8 0x10 0xff at nexthdr+13 \
match u16 0x0000 0xffc0 at 2 \
flowid 11:42
# Stredne rychle sluzby
for i in 20 80 443 3128
do
tc filter add dev eth1 parent 11:2 protocol ip prio 4 u32 \
match ip sport $i 0xffff match ip dst 0.0.0.0/0 flowid 11:52
tc filter add dev eth1 parent 11:2 protocol ip prio 4 u32 \
match ip dport $i 0xffff match ip dst 0.0.0.0/0 flowid 11:52
done
# mail
for i in 25 110 143 465 993 995
do
tc filter add dev eth1 parent 11:2 protocol ip prio 4 u32 \
match ip sport $i 0xffff match ip dst 0.0.0.0/0 flowid 11:52
tc filter add dev eth1 parent 11:2 protocol ip prio 4 u32 \
match ip dport $i 0xffff match ip dst 0.0.0.0/0 flowid 11:52
done
# Zbytek do nejpomalejsi
tc filter add dev eth1 parent 11:2 protocol ip prio 4 u32 \
match ip dst 0.0.0.0/0 flowid 11:52
iptables -t mangle -A markov -i eth1 -j MARK --set-mark 1
echo eth1 '-->' 1024 kbps total
echo ======================================================================