Автор Тема: Traffic Control Decision  (Прочетена 3381 пъти)

believer

  • Гост
Traffic Control Decision
« -: Nov 05, 2008, 14:35 »
Искам да споделя опита си с вас как постигнах бързо и лесно трафик контрол на Убунту 8.10

eth0 - internet
eth1 - local

Настройваме мрежовите карти в etc/network/interfaces

След това инсталираме пакетите:

# apt-get install dnsmasq ipmasq firestarter

Изтегляме си пакета Shaper, който може да се намери за Убунту 8.04 и по стари версии.

В etc/shaper си правим съответните файлове с ограниченията за download.

Активираме във firestarter функцията NAT на eth1.

Ако всичко е наред вече имаме интернет на другите машини в локалната мрежа и те имат съответните ограничения посредством Shaper и необходимите правила посредством firestarter

За ограничаване на upload използваме следният скрипт, като го правим да се зарежда със стартирането на системата:

Код:
#!/bin/sh
#
# Simple init.d shell script that can to modified to fit your favorite distro
#
# All Rates are in Kbits, so in order to gets Bytes divide by 8
# e.g. 25Kbps == 3.125KB/s
#

TC=/sbin/tc
IPT=/sbin/iptables

# Tuk zadavame skorostite

DNLD=150Kbit   # DOWNLOAD Limit
DWEIGHT=15Kbit # DOWNLOAD Weight Factor ~ 1/10 of DOWNLOAD Limit
UPLD=250KBit    # UPLOAD Limit
UWEIGHT=20Kbit  # UPLOAD Weight Factor

tc_start() {
# $TC qdisc add dev eth1 root handle 11: cbq bandwidth 100Mbit avpkt 1000 mpu 64
# $TC class add dev eth1 parent 11:0 classid 11:1 cbq rate $DNLD weight $DWEIGHT allot 1514 prio 1 avpkt 1000 bounded
# $TC filter add dev eth1 parent 11:0 protocol ip handle 4 fw flowid 11:1

$TC qdisc add dev eth0 root handle 10: cbq bandwidth 10Mbit avpkt 1000 mpu 64
$TC class add dev eth0 parent 10:0 classid 10:1 cbq rate $UPLD weight $UWEIGHT allot 1514 prio 1 avpkt 1000 bounded
$TC filter add dev eth0 parent 10:0 protocol ip handle 3 fw flowid 10:1
}

tc_stop() {
$TC qdisc del dev eth0 root
$TC qdisc del dev eth1 root
}

tc_restart() {
tc_stop
sleep 1
tc_start
}

tc_show() {
echo ""
echo "eth0:"
$TC qdisc show dev eth0
$TC class show dev eth0
$TC filter show dev eth0
echo ""

echo "eth1:"
$TC qdisc show dev eth1
$TC class show dev eth1
$TC filter show dev eth1
echo ""
}

# Zadavame ip-tata za ogranichenie na download

#$IPT -t mangle -A FORWARD -s ! 192.168.1.0/24 -d 192.168.1.128/29 -j MARK --set-mark 4
#$IPT -t mangle -A FORWARD -s ! 192.168.1.0/24 -d 192.168.1.6 -j MARK --set-mark 4

# Zadavame ip-tata za ogranichenie na upload

#$IPT -t mangle -A FORWARD -s 192.168.1.128/29 -j MARK --set-mark 3
#$IPT -t mangle -A FORWARD -s 192.168.1.6 -j MARK --set-mark 3
$IPT -t mangle -A FORWARD -s 192.168.1.0/24 -j MARK --set-mark 3


case "$1" in
start)
echo -n "Starting bandwidth shaping: "
tc_start
echo "done"
;;

  stop)
echo -n "Stopping bandwidth shaping: "
  tc_stop
  echo "done"
  ;;

restart)
echo -n "Restarting bandwidth shaping: "
tc_restart
echo "done"
  ;;

show)
tc_show
  ;;

*)
echo "Usage: /etc/init.d/tc.sh {start|stop|restart|show}"
  ;;
esac

exit 0



Активен

believer

  • Гост
Re: Traffic Control Decision
« Отговор #1 -: Nov 15, 2008, 22:21 »
Скоро открих и по-елегантно решение на задачката. :)
Ползваме същите пакети, като вместо firestarter ползваме пакета webmin и посредством него конфигурираме iptables firewall, като пускаме и NAT.
Ето и как изглежда при мен конфигурационния файл на защитната стена, който се намира в /etc/iptables.up.rules
Код:
# Generated by webmin
*filter
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -o eth1 -j LOG  --log-level 7 --log-prefix BANDWIDTH_OUT:
-A OUTPUT -o eth1 -j LOG  --log-level 7 --log-prefix BANDWIDTH_OUT:
-A INPUT -i eth1 -j LOG  --log-level 7 --log-prefix BANDWIDTH_IN:
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A INPUT -p tcp -m state -m tcp --dport 21 --state NEW -j ACCEPT
-A INPUT -p tcp -m state -m tcp --dport 22 --state NEW -j ACCEPT
-A INPUT -p tcp -m state -m tcp --dport 25 --state NEW -j ACCEPT
-A INPUT -p tcp -m state -m tcp --dport 53 --state NEW -j ACCEPT
-A INPUT -p udp -m state -m udp --dport 53 --state NEW -j ACCEPT
-A INPUT -p tcp -m state -m tcp --dport 80 --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp -m state --dport 110 --state NEW -j ACCEPT
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -i eth0 -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
-A INPUT -p tcp -m state -m tcp --dport 443 --state NEW -j ACCEPT
-A FORWARD -j REJECT
-A INPUT -p udp -m udp -m state --dport 443 --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp -m state --dport 8080 --state NEW -j ACCEPT
-A INPUT -j REJECT
COMMIT
# Generated by webmin
*mangle
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed
# Generated by webmin
*nat
:OUTPUT ACCEPT [0:0]
:PREROUTING DROP [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
-A POSTROUTING -o eth1 -j MASQUERADE
# svetla
-A PREROUTING -s 192.168.1.204 -j ACCEPT
# filopov
-A PREROUTING -s 192.168.1.200 -j ACCEPT
# irina
-A PREROUTING -s 192.168.1.201 -j ACCEPT
# kostadin
-A PREROUTING -s 192.168.1.202 -j ACCEPT
# direktor
-A PREROUTING -s 192.168.1.205 -j ACCEPT
# canko
-A PREROUTING -s 192.168.1.206 -j ACCEPT
# canko1
-A PREROUTING -s 192.168.1.227 -j ACCEPT
# vania
-A PREROUTING -s 192.168.1.228 -j ACCEPT
# market
-A PREROUTING -s 192.168.1.209 -j ACCEPT
# marii
-A PREROUTING -s 192.168.1.210 -j ACCEPT
# tania
-A PREROUTING -s 192.168.1.211 -j ACCEPT
# anatoli
-A PREROUTING -s 192.168.1.212 -j ACCEPT
# hristov
-A PREROUTING -s 192.168.1.213 -j ACCEPT
# lab
-A PREROUTING -s 192.168.1.214 -j ACCEPT
# schet
-A PREROUTING -s 192.168.1.218 -j ACCEPT
# velo
-A PREROUTING -s 192.168.1.219 -j ACCEPT
# velo
-A PREROUTING -s 192.168.1.220 -j ACCEPT
# tihomir
-A PREROUTING -s 192.168.1.203 -j ACCEPT
COMMIT
# Completed

Тук решението е без DHCP като е разрешен nat само на точно определени IP разрешени са само базовите портове, основните неща. Който иска относно защитата може да се заиграе още.

Ето и как трябва да изглежда /etc/rc.local
Код:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

sysctl -w net.ipv4.ip_forward=1

exit 0

Ето и само най-необходимото в файла upload, който направихме да се стартира с пускането на системата.
Код:
#!/bin/sh

TC=/sbin/tc
IPT=/sbin/iptables

$TC qdisc add dev eth0 root handle 10: cbq bandwidth 10Mbit avpkt 1000 mpu 64
$TC class add dev eth0 parent 10:0 classid 10:1 cbq rate 200kbit weight 20 allot 1514 prio 1 avpkt 1000 bounded
$TC filter add dev eth0 parent 10:0 protocol ip handle 3 fw flowid 10:1
       
$IPT -t mangle -A FORWARD -s 192.168.1.206 -j MARK --set-mark 3
$IPT -t mangle -A FORWARD -s 192.168.1.227 -j MARK --set-mark 3
$IPT -t mangle -A FORWARD -s 192.168.1.228 -j MARK --set-mark 3
$IPT -t mangle -A FORWARD -s 192.168.1.212 -j MARK --set-mark 3
$IPT -t mangle -A FORWARD -s 192.168.1.213 -j MARK --set-mark 3
$IPT -t mangle -A FORWARD -s 192.168.1.214 -j MARK --set-mark 3
$IPT -t mangle -A FORWARD -s 192.168.1.202 -j MARK --set-mark 3
$IPT -t mangle -A FORWARD -s 192.168.1.204 -j MARK --set-mark 3

exit 0

Много ще се радвам ако това е било полезно на някого :)
Активен

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Traffic Control Decision
« Отговор #2 -: Nov 15, 2008, 22:38 »
Ето ти моето решение - можеш да почерпиш някои идеи:
http://openfmi.net/projects/flattc/
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Linux i Traffic Control
Хардуерни и софтуерни проблеми
foxy 4 3391 Последна публикация Jun 11, 2002, 20:59
от
Traffic control
Хардуерни и софтуерни проблеми
mike2 1 2214 Последна публикация Jun 08, 2003, 22:57
от Gorbachov
Помощ за traffic control tc
Настройка на програми
PERMANENT 3 2428 Последна публикация Jan 05, 2007, 15:49
от PERMANENT
Въпрос за traffic control
Хардуерни и софтуерни проблеми
neko 1 1826 Последна публикация Jan 20, 2007, 18:41
от edmon
[decision] intel video / kubuntu 10.10 not enable desktop effects after restart.
Настройка на хардуер
c111100101 6 2578 Последна публикация Dec 30, 2010, 22:24
от cybercop