Linux за българи: Форуми

Linux секция за напреднали => Хардуерни и софтуерни проблеми => Темата е започната от: Yavor в Dec 03, 2006, 23:32



Титла: Traffic shaping
Публикувано от: Yavor в Dec 03, 2006, 23:32
Здравейте!

За първи път ми се налага да се боря с разпределяне на трафик. Четох доста статии вкл. Използване на IPSET, IPTABLES и IPMARK и Оптимизация на iptables и tc правила. Както и

*  http://lartc.org
* man iptables
* man tc

и още

A practical HOWTO on basic traffic-shaping

Не мога да кажа, че нещата са ми все още Съвсем Тъмна Индия, но определено ме обърква разделянето на трафика на български и международен, както и самото делене на каналите на подканали за двата "интернета"  B).

Чудя се дали няма някой (няколко) "генерален" ;) скрипт, който да адаптирам или трябва да измислям наново колелото (iptables/ipsets + tc). Защото при всички доставчици става дума за едно и също - 1 основен канал с N групи от по M IPs и N x 2 (BG, INT) (максимални, при споделен канал) скорости плюс честно разпределяне на общата честотната лента в подканалите между намиращите се в тях (подканалите)  в момента.

И още нещо - кой е най-надежния източник на българските мрежи? Какво показва
Примерен код
cat /etc/bgnets
от Използване на IPSET, IPTABLES и IPMARK

Ще съм благодарен за всякакви насоки как да направя разпределяне на трафик в 5 групи от последователни IP адреси, с максимална BG и INT, по възможност с HTB.

Благодаря!

 B)


Титла: Traffic shaping
Публикувано от: VladSun в Dec 04, 2006, 01:16
Ето ти и инициализиращия скрипт към статиите. Скриптът за добавяне на трафик контрол за ИП го имаш в статиите.
Примерен код

#!/usr/bin/perl

########################################################################################
#   Config
#
#
#
#   Global traffic rates

    $TRAFF_ALL_UL = "250Mbit";
    $TRAFF_BG_UL  = "200Mbit";
    $TRAFF_INT_UL = "28Mbit";
    
    $TRAFF_ALL_DL = "250Mbit";
    $TRAFF_BG_DL  = "200Mbit";
    $TRAFF_INT_DL = "28Mbit";
    
#
#
########################################################################################

print "Init TC shaper... ";

# Empty shaper
`tc qdisc del dev eth0 root 2>/dev/null`;
`tc qdisc del dev eth1 root 2>/dev/null`;

if ($ARGV[0] eq 'stop')
{
    print "Stopping \n";
    exit;
}

# Add rates for: ALL, BG, INT (UPLOAD)
`tc qdisc add dev eth0 root handle 1 htb default 10000`;
`tc class add dev eth0 parent 1: classid 1:3 htb rate $TRAFF_ALL_UL`;
`tc class add dev eth0 parent 1:3 classid 1:15 htb rate $TRAFF_BG_UL`;
`tc class add dev eth0 parent 1:3 classid 1:25 htb rate $TRAFF_INT_UL`;

# Add rates for: ALL, BG, INT (DOWNLOAD)
`tc qdisc add dev eth1 root handle 1 htb default 10000`;
`tc class add dev eth1 parent 1: classid 1:2 htb rate $TRAFF_ALL_DL`;
`tc class add dev eth1 parent 1:2 classid 1:10 htb rate $TRAFF_BG_DL`;
`tc class add dev eth1 parent 1:2 classid 1:20 htb rate $TRAFF_INT_DL`;

# Add filters based on MARK property
`tc filter add dev eth0 parent 1:0 protocol ip prio 200 fw`;
`tc filter add dev eth1 parent 1:0 protocol ip prio 200 fw`;

print "OK \n";



A, ето ти и един скрипт за дърпане на българските мрежови префикси:
Примерен код

#!/bin/bash

wget -q -O /etc/bgnets.new.1 "http://ip.ludost.net/cgi/process?country=1&country_list=bg&format_template=prefix&format_name=&format_target=&format_default="
grep -v "#" /etc/bgnets.new.1 > /etc/bgnets.new
rm /etc/bgnets.new.1

oldlc=`wc -l /etc/bgnets | awk '{print $1}'`;
newlc=`wc -l /etc/bgnets.new | awk '{print $1}'`;

if [ $newlc -gt $oldlc ]
then
        cp /etc/bgnets /etc/bgnets.bak
        mv /etc/bgnets.new /etc/bgnets
fi