шейпер

нужно на маршрутизаторе под арчем поднять шейпер, каждому отдать некоторую полосу.
пока смотрю в сторону htb.init. как я понял можно в цепочке FORWARD маркировать трафик (например 1 - полный доступ, 2 - одна скорость, 3 - другая) а в правилах уже указывать какой трафик обрабатывать. так? как в таком случае поведет себя шейпер при нескольких клиентах с маркером “2”? поделит поровну канал?
Shaman
как в таком случае поведет себя шейпер при нескольких клиентах с маркером “2”? поделит поровну канал?
А как настроишь - так и будет. ;-) По умолчанию - там fifo очередь, т.е. полоса делится в зависимости от частоты пакетов и их величины.
На опеннете есть хорошая дока по шейпингу - перевод lartc.
О.. шейпер, знакомая вещь, когда то я курил маны по нему, могу если надо скинуть свой шейпер для примера, сейчас его не юзаю. :)
было бы не плохо, а то голова кипит уже :)
Что то я его найти не могу :D .. сейчас получше поищу..

Нашел, вот скрипт:
#!/bin/bash
##########################################################################
DOWNLINK=896
UPLINK=512
OUT_DEV="ppp0"
IN_DEV="eth1"
OUT_QLEN=30
IN_QLEN=1000
OUT_MTU=1492
LOCAL_RATE="100mbit"
LOCAL_IP="192.168.1.1"
LAN_IP_RANGE="192.168.1.0/27"
ALL_IP_RANGE="0.0.0.0/0"
#192.168.1.1 - 192.168.1.6 кормпьютеры в сети
HIGH_RATING_RANGE="192.168.1.0/29"
#9-14
HIGH_MEDIUM_RATING_RANGE="192.168.1.0/28"
#17-30
#LAN_IP_RANGE == HIGH_MEDIUM_LOW_RATING_RANGE="192.168.1.0/27"
ICMP="match ip protocol 1 0xff"
TCP="match ip protocol 6 0xff"
UDP="match ip protocol 17 0xff"
SRC="match ip src"
DST="match ip dst"
DPORT="match ip dport"
SPORT="match ip sport"
U32="protocol ip u32"
IP="protocol ip"
##########################################################################
tc qdisc del dev $OUT_DEV root        2> /dev/null > /dev/null
tc qdisc del dev $OUT_DEV ingress     2> /dev/null > /dev/null
tc qdisc del dev $IN_DEV root        2> /dev/null > /dev/null
tc qdisc del dev $IN_DEV ingress     2> /dev/null > /dev/null
##########################################################################
#Входящий трафик - необходимо несколько уменьшить поступающий из интернета
#трафик в скорости, это предотвратит задержку пакетов в очереди у провайдера
#присоединяю входной ограничитель 
tc qdisc add dev $OUT_DEV handle ffff: ingress
#и сбразываю все сподряд на черезчур большой входящей скорости скорости
tc filter add dev $OUT_DEV parent ffff: protocol ip prio 50 u32 match ip src $ALL_IP_RANGE flowid :1 police rate ${DOWNLINK}kbit \
burst 10k mpu 0 action drop/continue
##########################################################################
#Исходящий трафик тоже нужно ограничить, чтобы не создавать очередей в 
#ADSL модеме (то есть мы создаем очереди у себя, до передачи пакетов модему)
#Установка размера очереди и MTU на ppp0
#ip link set dev $OUT_DEV qlen $OUT_QLEN mtu $OUT_MTU
#Установка корневой дисциплины обработки очереди HTB, трафик по умолчанию идет в 1:350
tc qdisc add dev $OUT_DEV root handle 1: htb default 350
    #root class
    tc class add dev $OUT_DEV parent 1: classid 1:1 htb rate ${UPLINK}kbit ceil ${UPLINK}kbit
        #high priority class (SSH, DNS, ICMP..), с жестким ограничением в 2/10 доступной полосы (icmp)
        tc class add dev $OUT_DEV parent 1:1 classid 1:10 htb rate $[1*$UPLINK/10]kbit ceil $[2*$UPLINK/10]kbit
            #SSH, DNS.. 51.2kbit - 102.4kbit
            tc class add dev $OUT_DEV parent 1:10 classid 1:110 htb rate $[1*$UPLINK/20]kbit ceil $[2*$UPLINK/10]kbit prio 0
                tc qdisc add dev $OUT_DEV parent 1:110 handle 110: pfifo #limit 10
            #ICMP limited.. 25.6kbit - 51.2kbit
            tc class add dev $OUT_DEV parent 1:10 classid 1:120 htb rate $[1*$UPLINK/20]kbit ceil $[1*$UPLINK/10]kbit prio 1
                tc qdisc add dev $OUT_DEV parent 1:120 handle 120: pfifo #limit 10
        #medium priority class (трафик от маршрутизатора, с битами TOS..)
        tc class add dev $OUT_DEV parent 1:1 classid 1:20 htb rate $[2*$UPLINK/10]kbit ceil ${UPLINK}kbit
            #TOS="minimize delay"
            tc class add dev $OUT_DEV parent 1:20 classid 1:210 htb rate $[1*$UPLINK/10]kbit ceil ${UPLINK}kbit prio 2
                tc qdisc add dev $OUT_DEV parent 1:210 handle 210: sfq perturb 10
            #TOS="maximize-throughput", SYN-запросы
            tc class add dev $OUT_DEV parent 1:20 classid 1:220 htb rate $[1*$UPLINK/10]kbit ceil ${UPLINK}kbit prio 2
                tc qdisc add dev $OUT_DEV parent 1:220 handle 220: sfq perturb 10
            #другой трафик, генерируемый на маршрутизаторе
            tc class add dev $OUT_DEV parent 1:20 classid 1:230 htb rate $[1*$UPLINK/10]kbit ceil $[5*$UPLINK/10]kbit prio 2
                tc qdisc add dev $OUT_DEV parent 1:230 handle 230: sfq perturb 10
        #low priority class (трафик от клиентов локальной сети)
        tc class add dev $OUT_DEV parent 1:1 classid 1:30 htb rate $[7*$UPLINK/10]kbit ceil ${UPLINK}kbit
            #HTTP port 80, HTTPS port 443, ICQ, основные биты TOS..
            tc class add dev $OUT_DEV parent 1:30 classid 1:310 htb rate $[2*$UPLINK/10]kbit ceil ${UPLINK}kbit prio 3
                tc qdisc add dev $OUT_DEV parent 1:310 handle 310: sfq perturb 10
            #POP3 port 110, SMTP port 25
            tc class add dev $OUT_DEV parent 1:30 classid 1:320 htb rate $[2*$UPLINK/10]kbit ceil ${UPLINK}kbit prio 3
                tc qdisc add dev $OUT_DEV parent 1:320 handle 320: sfq perturb 10
            #FTP port 21
            tc class add dev $OUT_DEV parent 1:30 classid 1:330 htb rate $[1*$UPLINK/10]kbit ceil ${UPLINK}kbit prio 4
                tc qdisc add dev $OUT_DEV parent 1:330 handle 330: sfq perturb 10
            #TOS="minimize cost"
            tc class add dev $OUT_DEV parent 1:30 classid 1:340 htb rate $[1*$UPLINK/10]kbit ceil ${UPLINK}kbit prio 4
                tc qdisc add dev $OUT_DEV parent 1:340 handle 340: sfq perturb 10
            #default
            tc class add dev $OUT_DEV parent 1:30 classid 1:350 htb rate $[1*$UPLINK/10]kbit ceil ${UPLINK}kbit prio 5
                tc qdisc add dev $OUT_DEV parent 1:350 handle 350: sfq perturb 10
#filters for root qdisc
tc filter add dev $OUT_DEV parent 1: prio 2 $IP handle 1 fw classid 1:110     #22-SSH, 53-DNS
tc filter add dev $OUT_DEV parent 1: prio 1 $IP handle 2 fw classid 1:120    #ICMP #tc filter add dev $OUT_DEV parent 1: prio 1 $U32 $ICMP classid 1:120
#
tc filter add dev $OUT_DEV parent 1: prio 5 $IP handle 3 fw classid 1:210    #TOS="Minimize delay"
tc filter add dev $OUT_DEV parent 1: prio 4 $IP handle 4 fw classid 1:220    #SyN-запросы, TOS="Maximize-Throughput"
tc filter add dev $OUT_DEV parent 1: prio 3 $IP handle 5 fw classid 1:230    #Иной трафик, генерируемый локальными процессами маршрутизатора..
#
tc filter add dev $OUT_DEV parent 1: prio 6 $IP handle 6 fw classid 1:310    ##SyN-запросы, TOS="Maximize-Throughput", TOS="Minimize delay"
tc filter add dev $OUT_DEV parent 1: prio 7 $U32 $SRC $LAN_IP_RANGE $TCP $DPORT 80 0xffff classid 1:310
tc filter add dev $OUT_DEV parent 1: prio 8 $U32 $SRC $LAN_IP_RANGE $TCP $SPORT 80 0xffff classid 1:310
tc filter add dev $OUT_DEV parent 1: prio 9 $U32 $SRC $LAN_IP_RANGE $TCP $DPORT 443 0xffff classid 1:310
tc filter add dev $OUT_DEV parent 1: prio 10 $U32 $SRC $LAN_IP_RANGE $TCP $SPORT 443 0xffff classid 1:310
tc filter add dev $OUT_DEV parent 1: prio 11 $U32 $SRC $LAN_IP_RANGE $TCP $SPORT 5190 0xffff classid 1:310
tc filter add dev $OUT_DEV parent 1: prio 12 $U32 $SRC $LAN_IP_RANGE $TCP $DPORT 3128 0xffff classid 1:310
#tc filter add dev $OUT_DEV parent 1: prio 3 $U32 $SRC $LAN_IP_RANGE $TCP $DPORT 8080 0xffff classid 1:310
tc filter add dev $OUT_DEV parent 1: prio 13 $U32 $SRC $LAN_IP_RANGE $TCP $DPORT 110 0xffff classid 1:320
tc filter add dev $OUT_DEV parent 1: prio 14 $U32 $SRC $LAN_IP_RANGE $TCP $SPORT 110 0xffff classid 1:320
tc filter add dev $OUT_DEV parent 1: prio 15 $U32 $SRC $LAN_IP_RANGE $TCP $DPORT 25 0xffff classid 1:320
tc filter add dev $OUT_DEV parent 1: prio 16 $U32 $SRC $LAN_IP_RANGE $TCP $SPORT 25 0xffff classid 1:320
tc filter add dev $OUT_DEV parent 1: prio 17 $U32 $SRC $LAN_IP_RANGE $TCP $DPORT 21 0xffff classid 1:330
tc filter add dev $OUT_DEV parent 1: prio 18 $U32 $SRC $LAN_IP_RANGE $TCP $SPORT 21 0xffff classid 1:330
tc filter add dev $OUT_DEV parent 1: prio 19 $IP handle 8 fw classid 1:340    #TOS="Minimize-Cost"
##########################################################################
#Ограничение скорости для локальной сети
ip link set dev $IN_DEV qlen $IN_QLEN
#Обрезаю исходящую от меня в локальную сеть скорость
tc qdisc add dev $IN_DEV root handle 1: htb default 13
    #root class 1
    tc class add dev $IN_DEV parent 1: classid 1:1 htb rate ${DOWNLINK}kbit ceil ${DOWNLINK}kbit
        #high priority
        tc class add dev $IN_DEV parent 1:1 classid 1:11 htb rate 128kbit ceil 160kbit prio 1
            tc qdisc add dev $IN_DEV parent 1:11 handle 11: sfq perturb 10
        tc class add dev $IN_DEV parent 1:1 classid 1:14 htb rate 512kbit ceil 768kbit prio 1
            tc qdisc add dev $IN_DEV parent 1:14 handle 14: sfq perturb 10
        #medium priority
        tc class add dev $IN_DEV parent 1:1 classid 1:12 htb rate 64kbit ceil 128kbit prio 2
            tc qdisc add dev $IN_DEV parent 1:12 handle 12: sfq perturb 10
        #default
        tc class add dev $IN_DEV parent 1:1 classid 1:13 htb rate 64kbit ceil 64kbit prio 3
            tc qdisc add dev $IN_DEV parent 1:13 handle 13: sfq perturb 10
    #root class 2
    tc class add dev $IN_DEV parent 1: classid 1:2 htb rate $LOCAL_RATE prio 4
        tc qdisc add dev $IN_DEV parent 1:2 handle 120: pfifo
tc filter add dev $IN_DEV parent 1: prio 1 $U32 $DST $HIGH_RATING_RANGE flowid 1:11
tc filter add dev $IN_DEV parent 1: prio 2 $U32 $DST $HIGH_MEDIUM_RATING_RANGE flowid 1:14
#tc filter add dev $IN_DEV parent 1: prio 3 $U32 $DST 192.168.1.2 flowid 1:14
tc filter add dev $IN_DEV parent 1: prio 4 $U32 $SRC $LOCAL_IP classid 1:2
Лучше смотреть в geany.. честно говоря дело давно было, но если что спрашивайте - я объясню, так то он примитивный был и наверное много лишнего накручено..
в принципе более менее въезжать начал, что в htb есть rate и ceil. я пока разницы не могу понять
rate - гарантированная полоса. ceil - юзер может получить эту полосу, если есть возможность. То есть к примеру канал один мегабит, 4 юзера, по rate каждому максимум делаем 256КБ/с, в ceil у всех может быть до мегабита, можно 512 к примеру, как захотим. К тому же наличие свободной полосы не означает еще что юзер получит трафик свыше гарантированного, вперед него получит трафик тот, кто имеет более высокий приоритет (тут чем ниже значение - тем выше приоритет). Основное правило: сумма rate для всех не должна (и не может) быть больше пропускной способности на всех вместе взятых. Кстати, почитайте “Повесть о Линукс и управлении трафиком”, там очень это все хорошо расписано. Я понимать начал раза со второго - третьего прочтения =)
ага, понятно.
у меня ppp0 смотрит в инет, eth1 в сеть.
для ppp0 я создаю правила и режу исходящую скорость. это понятно. а на eth1 аналогичные правила задавать надо? что бы юзерам отдавать трафик по “тарифу”? или лучше ограничить вход на том же ppp0?
получится что-то типа буфера, на ppp0 режем исходящюю скорость (с точки зрения юзера), а на eth1 входящюю, опять таки с точки зрения юзера, так?
##########################################################################
#Ограничение скорости для локальной сети
ip link set dev $IN_DEV qlen $IN_QLEN
#Обрезаю исходящую от меня в локальную сеть скорость
tc qdisc add dev $IN_DEV root handle 1: htb default 13
    #root class 1
    tc class add dev $IN_DEV parent 1: classid 1:1 htb rate ${DOWNLINK}kbit ceil ${DOWNLINK}kbit
        #high priority
        tc class add dev $IN_DEV parent 1:1 classid 1:11 htb rate 128kbit ceil 160kbit prio 1
            tc qdisc add dev $IN_DEV parent 1:11 handle 11: sfq perturb 10
        tc class add dev $IN_DEV parent 1:1 classid 1:14 htb rate 512kbit ceil 768kbit prio 1
            tc qdisc add dev $IN_DEV parent 1:14 handle 14: sfq perturb 10
        #medium priority
        tc class add dev $IN_DEV parent 1:1 classid 1:12 htb rate 64kbit ceil 128kbit prio 2
            tc qdisc add dev $IN_DEV parent 1:12 handle 12: sfq perturb 10
        #default
        tc class add dev $IN_DEV parent 1:1 classid 1:13 htb rate 64kbit ceil 64kbit prio 3
            tc qdisc add dev $IN_DEV parent 1:13 handle 13: sfq perturb 10
    #root class 2
    tc class add dev $IN_DEV parent 1: classid 1:2 htb rate $LOCAL_RATE prio 4
        tc qdisc add dev $IN_DEV parent 1:2 handle 120: pfifo
tc filter add dev $IN_DEV parent 1: prio 1 $U32 $DST $HIGH_RATING_RANGE flowid 1:11
tc filter add dev $IN_DEV parent 1: prio 2 $U32 $DST $HIGH_MEDIUM_RATING_RANGE flowid 1:14
#tc filter add dev $IN_DEV parent 1: prio 3 $U32 $DST 192.168.1.2 flowid 1:14
tc filter add dev $IN_DEV parent 1: prio 4 $U32 $SRC $LOCAL_IP classid 1:2

Вот эта секция у меня и нарезает скорость для клиентов локалки, как легко заметить IN_DEV=“eth1”, у меня было так же ppp0 смотрит в инет, eth1 смотрит в локалку.. суть в том, что с точки зрения компа, eth1 - интерфейс, с которого от нас идет трафик в локальную сеть, мы по определению не может шейпить входящий трафик, потому что мы не контролируем его, что пришло - то пришло, можно только отбрасывать пакеты, но они все равно придут. Ну в общем резать скорость для клиентов локалки вам надо на eth1. К тому же как вы ограничтите трафик для юзеров на ppp0? Сдается мне никак. потому что на него поступает трафик, сгенерированный запросами юзеров с локалки, которые сидят за NAT-ом, то есть фактически с инета ответы идут не на адреса юзеров а на адрес вашео компа, который уже потом ето дело фасует по юзерам (или я сморозил глупость? оО). Кстати, вы вообще можете ничего не резать на ppp0 из того что от нас идет в инет, прок от этого на глаз не виден.. Но с другой стороны, если есть потребность обрезать юзерам исходящий канал, то тода да.. резать на ppp0 как вы правильно сказали. Как итог - вы уже верно поставили задачу:
получится что-то типа буфера, на ppp0 режем исходящюю скорость (с точки зрения юзера), а на eth1 входящюю, опять таки с точки зрения юзера, так?
тк юзеры любят всякие торренты, то смысл резать в обе стороны есть, или как минимум делить. спасиб :)
 
Зарегистрироваться или войдите чтобы оставить сообщение.