Page 2 of 17 FirstFirst 123412 ... LastLast
Results 16 to 30 of 248

Thread: Приоритезация трафика (shaping) для разных провайдеров, тарифов и целей

  1. #16
    Quote Originally Posted by leniviy View Post
    Например в egress скорость указывается в классе. А в ingress скорость указывается в фильтре
    Потому что ingress class-less (т.е. безклассовый).

  2. #17
    Join Date
    Jun 2007
    Location
    Санкт-Петербург
    Posts
    244

    есть готовый скрипт, но тестировать времени нет (см. ник)

    Last edited by leniviy; 15-03-2008 at 14:49.

  3. #18
    Quote Originally Posted by leniviy View Post
    shape-test filter vlan1 2 d 1 "protocol ip prio 10 u32 match ip dport 80 0xffff"
    А не sport?

  4. #19
    Join Date
    Jun 2007
    Location
    Санкт-Петербург
    Posts
    244
    у меня скорость закачки без шейпинга 120 килобайт. сайты не открываются.
    с шейпингом 110 килобайт и резко проседает, когда скачивается страничка. сайты открываются быстро

    ABATAPA, нет. dport
    shape-test filter vlan1 2 d
    все равно фильтрует исходящие пакеты

    для приоритизации скачиваний я использую задержку ACK пакетов.
    Но соотношение ACKCOEF зависит от количества активных соединений.
    Чем их больше, тем мельче входящие пакеты.
    Если в ACK пакете указан размер входящего пакета, то эту проблему можно решить. Если нет, то только следить за сетевой активностью и перезапускать shape-test с разными параметрами.
    Last edited by Omega; 08-01-2012 at 21:51. Reason: fixed

  5. #20
    Quote Originally Posted by leniviy View Post
    ABATAPA, нет. dport
    shape-test filter vlan1 2 d
    все равно фильтрует исходящие пакеты
    Для upload и download - dport?

  6. #21
    Join Date
    Jun 2007
    Location
    Санкт-Петербург
    Posts
    244
    ну что тут непонятного?
    Чтобы заставить ту сторону слать нам пакеты медленнее мы задерживаем пакеты с подтверждением доставки. У пакетов с подтверждением мы - ОТПРАВИТЕЬ, а тот, с кого мы качаем - ПОЛУЧАТЕЛЬ

    Quote Originally Posted by ABATAPA View Post
    Проще собрать модуль ipt_owner для iptables и ядра, и отслеживать все соединения от нужных PID.
    я буду очень признателен, если кто-нибудь подскажет, ответ
    Где обычно берут эти модули?
    Нужно ли перекомпилировать iptables?
    можно ли собрать этот модуль на роутере или надо ставить тулчейн?
    Last edited by Omega; 08-01-2012 at 21:47. Reason: fixed

  7. #22
    Quote Originally Posted by leniviy View Post
    ну что тут непонятного?
    Чтобы заставить ту сторону слать нам пакеты медленнее мы задерживаем пакеты с подтверждением доставки. У пакетов с подтверждением мы - ОТПРАВИТЕЬ, а тот, с кого мы качаем - ПОЛУЧАТЕЛЬ

    Интересно... И что, в обоих случаях destination port = 80?!
    Или же все же речь тут идет о трафике ОТ 80 порта на удаленной стороне, и с любого порта на локальной стороне К 80 порту удаленной?

    Quote Originally Posted by leniviy View Post
    я буду очень признателен, если кто-нибудь подскажет, ответ
    Где обычно берут эти модули?
    Обычно там же, где и другие. Но в прошивках Олега этот модуль не собран.

    Quote Originally Posted by leniviy View Post
    можно ли собрать этот модуль на роутере или надо ставить тулчейн?
    О сборке для роутера есть немало тем, почитайте их.
    Last edited by Omega; 08-01-2012 at 21:53. Reason: fixed

  8. #23
    Join Date
    Jun 2007
    Location
    Санкт-Петербург
    Posts
    244

    Приоритезация трафика (shaping) для разных провайдеров, тарифов и целей

    Тема QoS иногда всплывает, но все ограничивается советом использовать слабенький wshaper. Если на роутере не стоит качалка, то можно этим и ограничиться. Но у многих эта качалка есть.
    Предлагаю заняться этим вопросом. На первую страницу будем класть ссылки на реально работающие инструкции, как настроить шейпинг.

    например так:
    Авангард СПб http://wl500g.info/showthread.php?p=88238#post88238

    Здесь лежит скрипт для удобного просмотра скоростей по классам http://wl500g.info/showthread.php?p=101369#post101369
    Last edited by leniviy; 25-06-2008 at 18:57.

  9. #24
    Join Date
    Jun 2007
    Location
    Санкт-Петербург
    Posts
    244
    1) Если у прова есть LAN с высокой скоростью (MAN), то надо подготовиться.
    Надо сделать файл-список ip адресов провайдера.
    Файл назовем "/etc/isp-ip-addrs.lst"
    формат такой:
    Code:
    89.110.48.0/21 
    89.110.56.0/22 
    ...
    78.37.112.0/20
    в /usr/local/.files добавим строчку /etc/isp-ip-addrs.lst

    Если ip прова внешние, то можно достать их из интернетовской базы, иначе заполним список вручную. Я сижу на Авангарде СПб, вот скрипт для него
    /opt/sbin/avangard
    Code:
    #!/bin/sh
    # требуется пакет lynx
    FILEPATH="/etc/isp-ip-addrs.lst"
    UPDATE=1
    if [ -e "$FILEPATH" ]; then
      FILEAGE=$(((`date +%s`-`stat -c %Y "$FILEPATH"`)/60/60/24))
      if [ "$FILEAGE" -lt 30 ]; then
        UPDATE=0
      fi
    fi
    if [ $UPDATE = 1 ]; then
      echo updating
      lynx -dump "http://www.db.ripe.net/whois?form_type=simple&full_query_string=&searchtext=RU-AVANGARD-DSL&do_search=Search" | \
        grep "inetnum\:" | awk '
          func ceil(f) { {split(0+f,a,".")} {if ((a[1]==(0+f))||(a[1]<0)) {return a[1]}} {return a[1]+1} } \
          {split($2,a1,".")} {split($4,a2,".")} \
          {print $2 "/" \
          32-ceil(log((a2[1]*16777216+a2[2]*65536+a2[3]*256+a2[4])-(a1[1]*16777216+a1[2]*65536+a1[3]*256+a1[4]))/log(2)) \
          " #" $1 " " $2 " " $3 " " $4 \
          } \
        ' > "$FILEPATH"
    fi
    #printf '%02X' `echo ${IP_ADDR}| sed -e "s/\./ /g"`
     #let __x=0x; echo $__x
    2) тепрь сам скрипт /usr/loscal/sbin/shape-test:
    Code:
    #!/bin/sh
    DEV=$2
    CLSPREF=$3
    DOWNLINK=$4
    UPLINK=$5
    
    DISC=$7
    ROOTCLS=$8
    ACKCOEF=$6
    
    FILTERUD=$4
    FILTERPRIO=$5
    FILTERSTR="$6"
    if [ -z "$1" ]; then
    	echo "Использование:"
    	echo "shape-test start DEV CLSPREF DOWNLINK UPLINK [ACKCOEF] [DISC] [ROOTCLS]"
            echo "shape-test status DEV"
            echo "shape-test stop DEV"
    	echo "shape-test filter DEV CLSPREF <u|d> <1|2|3> \"prio и условие в формате tc filter\" [DISC] [ROOTCLS]"
    
            echo "shape-test start можно запускать повторно с другим CLSPREF, тогда"
            echo "надо указать DISC"
            echo "shape-test filter можно вызывать многократно после shape-test start"
            echo "<1|2|3> - приоритет траффика"
            echo "prio должен быть больше 10"
    	echo "пример:"
    	echo "shape-test filter vlan1 2 u 1 \"protocol ip prio 10 u32 match ip dport 80 0xffff\" "
    
     
    	echo "с DOWNLINK, UPLINK и DEV должно быть все понятно"
    	echo "ACKCOEF - объем скачанного поделить на объем соответствуюющего ACK траффика"
    	echo "ACKCOEF надо увеличивать, пока не начнет падать скорость закачки"
    	echo "число 125 получил опытным путем на закачке с ftp сервера"
    	echo "число 50 получил опытным путем на торренте"
    	echo "CLSPREF - префикс создаваемого дерева (от 2 до fff)"
    	echo "DISC - дисциплина, к которой присоединяется дерево классов"
    	echo "если DISC пусто, то создается корневая дисциплина"
    	echo "ROOTCLS - класс, к которому присоединяется дерево классов (может быть 0)"
    	echo "если ROOTCLS пусто, то ROOTCLS=0"
     	
            echo ""
            echo ""
            exit 1
    fi
    
    if [ "$1" = "status" ]
    then
    	tc -s qdisc ls dev $DEV
    	tc -s class ls dev $DEV
    	exit
    fi 
    if [ -z "$ROOTCLS" ]; then
    	ROOTCLS=0
    fi
    CREATEROOT=0
    if [ -z "$DISC" ]; then
    	DISC=1
    	CREATEROOT=1
    fi
    if [ -z "$ACKCOEF" ]; then
    	ACKCOEF=50
    fi
    
    D=$DISC
    C=$ROOTCLS
    N=$CLSPREF
    DC=${D}:${C}
    DCN=${DC}${N}
    CN=${C}${N}
    if [ "$1" = "stop" ] 
    then 
            tc qdisc del dev $DEV root > /dev/null 2>&1
            tc qdisc del dev $DEV ingress > /dev/null 2>&1
    	exit
    fi
    
    if [ "$1" = "filter" ]; then
    	echo "$1 DEV=$DEV CLSPREF=$CLSPREF FILTERUD=$FILTERUD FILTERPRIO=$FILTERPRIO FILTERSTR=\"$FILTERSTR\" DISC=$DISC ROOTCLS=$ROOTCLS"
    	if [ "$FILTERUD" = "u" ]; then
    		tc filter add dev $DEV parent ${DCN}0 $FILTERSTR flowid ${DCN}${FILTERPRIO}
    	fi
    	if [ "$FILTERUD" = "d" ]; then
    		tc filter add dev $DEV parent ${DCN}f $FILTERSTR flowid ${DCN}`printf "%x" $((15-$FILTERPRIO))`
    	fi
    	exit
    fi
    
    echo $1 DEV=$DEV CLSPREF=$CLSPREF DOWNLINK=$DOWNLINK UPLINK=$UPLINK ACKCOEF=$ACKCOEF DISC=$DISC ROOTCLS=$ROOTCLS
    
    if [ $CREATEROOT = 1 ]; then
    	DISC=1
    	R=1
    	tc qdisc del dev $DEV root > /dev/null 2>&1
    	tc qdisc del dev $DEV ingress > /dev/null 2>&1
    	# очищаем дерево шейперов
    
    	tc qdisc add dev $DEV root handle ${DC} htb default 555
    	# корневая дисциплина. по умолчанию направляет пакеты в несуществующий класс 555
    	# все равно придется добавлять фильтр на корневой класс
    	# иначе не будут работать фильтры второго порядка
    
    	tc filter add dev $DEV parent ${DC} protocol ip prio 9999 u32 match ip dst 0.0.0.0/0 flowid ${DCN}0
    	# фильтр по умолчанию на корневой класс
    fi
    
    tc class add dev $DEV parent ${DC} classid ${DCN}0 htb rate $(($UPLINK))kbit
    # канал ${N}
    
    tc class add dev $DEV parent ${DCN}0 classid ${DCN}1 htb \
      rate $((6*$UPLINK/10))kbit ceil $(($UPLINK))kbit prio 1 
    # высокий приоритет отдачи
    tc class add dev $DEV parent ${DCN}0 classid ${DCN}2 htb \
      rate $((3*$UPLINK/10))kbit ceil $((10*$UPLINK/10))kbit prio 2
    # средний приоритет отдачи
    tc class add dev $DEV parent ${DCN}0 classid ${DCN}3 htb \
      rate $((1*$UPLINK/10))kbit ceil $((10*$UPLINK/10))kbit prio 3
    # низкий приоритет отдачи
    
    tc qdisc add dev $DEV parent ${DCN}1 handle ${CN}1: sfq perturb 10
    tc qdisc add dev $DEV parent ${DCN}2 handle ${CN}2: sfq perturb 10
    tc qdisc add dev $DEV parent ${DCN}3 handle ${CN}3: sfq perturb 10
    # если не добавить sfq, пакеты будут отбрасываться даже если скорость
    # отдачи ниже лимита
    
    tc class add dev $DEV parent ${DCN}0 classid ${DCN}f htb \
      rate $((10*$DOWNLINK*1024/10/$ACKCOEF)) 
    # класс для ACK пакетов. в 2 раза больше расчетной скорости, чтобы 
    # никогда не отбрасывать пакеты приоритетного траффика 
    
    tc class add dev $DEV parent ${DCN}f classid ${DCN}e htb rate $((10*$DOWNLINK*1024/10/$ACKCOEF)) 
    # высокий приоритет
    tc qdisc add dev $DEV parent ${DCN}e handle ${CN}e: sfq perturb 10
    
    tc class add dev $DEV parent ${DCN}f classid ${DCN}d htb rate $((3*$DOWNLINK*1024/10/$ACKCOEF)) ceil $((10*$DOWNLINK*1024/10/$ACKCOEF)) 
    # средний приоритет
    #tc qdisc add dev $DEV parent ${DCN}d handle ${CN}d: sfq perturb 10
    
    tc class add dev $DEV parent ${DCN}f classid ${DCN}c htb rate $((1*$DOWNLINK*1024/10/$ACKCOEF)) ceil $((10*$DOWNLINK*1024/10/$ACKCOEF)) 
    # низкий приоритет
    #tc qdisc add dev $DEV parent ${DCN}c handle ${CN}c: sfq perturb 10
    
    #
    #
    # ***** фильтры ******
    #
    #
    
    tc filter add dev $DEV parent ${DCN}0 protocol ip prio 9999 u32 match ip dst 0.0.0.0/0 flowid ${DCN}2
    # фильтр по умолчанию на средний приоритет
    
    #
    # *********** download
    #
    tc filter add dev $DEV parent ${DCN}0 protocol ip prio 1 u32 \
      match ip protocol 6 0xff \
      match u8 0x05 0x0f at 0 \
      match u16 0x0000 0xffc0 at 2 \
      match u8 0x10 0xff at 33 \
      flowid ${DCN}f
    # фильтровать ACK пакеты в класс *f
    
    tc filter add dev $DEV parent ${DCN}f protocol ip prio 9999 u32 \
      match ip dst 0.0.0.0/0 flowid ${DCN}d
    # фильтр ACK пакетов по умолчанию на средний приоритет
    
    # *ACK TOS Minimum Delay (ssh, NOT scp)
    tc filter add dev $DEV parent ${DCN}f protocol ip prio 5 u32 \
          match ip tos 0x10 0xff  flowid ${DCN}e
    #
    # *********** /download
    #
    
    # TOS Minimum Delay (ssh, NOT scp)
    tc filter add dev $DEV parent ${DCN}0 protocol ip prio 2 u32 \
          match ip tos 0x10 0xff  flowid ${DCN}1
    
    # ICMP (ip protocol 1) in the interactive class 1:10 so we 
    # can do measurements & impress our friends:
    tc filter add dev $DEV parent ${DCN}0 protocol ip prio 2 u32 \
            match ip protocol 1 0xff flowid ${DCN}1
    
    # prioritize small packets (<64 bytes)
    tc filter add dev $DEV parent ${DCN}0 protocol ip prio 2 u32 \
       match ip protocol 6 0xff \
       match u8 0x05 0x0f at 0 \
       match u16 0x0000 0xffc0 at 2 \
       flowid ${DCN}1
    Last edited by leniviy; 22-05-2008 at 10:38.

  10. #25
    Join Date
    Jun 2007
    Location
    Санкт-Петербург
    Posts
    244
    3) скрипт запуска по авангард

    UPD: перешел на тариф 1024, переделал скрипт запуска с учетом VoIP и UDP, DNS больше не тормозит. Спасибо YAG

    /usr/local/sbin/shape-avangard
    Code:
    #!/bin/sh
    if [ -z "$1" ]; then
    	echo must specify device
    	exit 1
    fi
    DEV=$1
    # авангард 1024
    # реальная скорость аплода в сумме 528 даже если с тебя качает авангардовец
    # скорость даунлода 1056
    # + скорость даунлода с авангардовцев 1024
    
    DOWNLINK=1056
    UPLINK=528
    DOWNLINKMAN=1024
    UPLINKMAN=757
    FASTMANUPLOAD=0
    # FASTMANUPLOAD=0  - MAN и WAN делят общий канал аплод
    # FASTMANUPLOAD=1  - независимый канал аплод для MAN
    
    shape-test start $DEV 2 $DOWNLINK $UPLINK 40 
    # интернет
    
    shape-test filter $DEV 2 u 1 "protocol ip prio 10 u32 match ip dport 80 0xffff" 
    shape-test filter $DEV 2 d 1 "protocol ip prio 10 u32 match ip dport 80 0xffff" 
    shape-test filter $DEV 2 u 1 "protocol ip prio 10 u32 match ip dport 443 0xffff" 
    shape-test filter $DEV 2 d 1 "protocol ip prio 10 u32 match ip dport 443 0xffff" 
    shape-test filter $DEV 2 u 1 "protocol ip prio 10 u32 match ip dport 21 0xffff" 
    shape-test filter $DEV 2 d 1 "protocol ip prio 10 u32 match ip dport 21 0xffff" 
    shape-test filter $DEV 2 u 1 "protocol ip prio 10 u32 match ip dport 25 0xffff" 
    shape-test filter $DEV 2 d 1 "protocol ip prio 10 u32 match ip dport 25 0xffff" 
    shape-test filter $DEV 2 u 1 "protocol ip prio 10 u32 match ip dport 110 0xffff" 
    shape-test filter $DEV 2 d 1 "protocol ip prio 10 u32 match ip dport 110 0xffff" 
    # Приоритет для обычного интернета
    
    shape-test filter $DEV 2 u 3 "protocol ip prio 10 u32 match ip sport 65533 0xffff" 
    shape-test filter $DEV 2 d 3 "protocol ip prio 10 u32 match ip sport 65533 0xffff" 
    # Приоритет для rtorrent
    
    shape-test filter $DEV 2 u 3 "protocol ip prio 10 u32 match ip sport 63128 0xffff" 
    shape-test filter $DEV 2 d 3 "protocol ip prio 10 u32 match ip sport 63128 0xffff" 
    # Приоритет для публичного 3proxy
    
    shape-test filter $DEV 2 u 1 "protocol ip prio 5 u32 match ip tos 0x68 0xff match ip protocol 0x11 0xff"
    shape-test filter $DEV 2 d 1 "protocol ip prio 5 u32 match ip tos 0x68 0xff match ip protocol 0x11 0xff"
    shape-test filter $DEV 2 u 1 "protocol ip prio 5 u32 match ip tos 0xb8 0xff match ip protocol 0x11 0xff"
    shape-test filter $DEV 2 d 1 "protocol ip prio 5 u32 match ip tos 0xb8 0xff match ip protocol 0x11 0xff"
    # high priority for VoIP traffic (by TOS)
    
    shape-test filter $DEV 2 u 1 "protocol ip prio 5 u32 match ip sport 5004 0xffff match ip protocol 0x11 0xff"
    shape-test filter $DEV 2 d 1 "protocol ip prio 5 u32 match ip sport 5004 0xffff match ip protocol 0x11 0xff"
    shape-test filter $DEV 2 u 1 "protocol ip prio 5 u32 match ip sport 5060 0xffff match ip protocol 0x11 0xff"
    shape-test filter $DEV 2 d 1 "protocol ip prio 5 u32 match ip sport 5060 0xffff match ip protocol 0x11 0xff"
    # high priority for VoIP traffic (by source port)
    
    shape-test filter $DEV 2 u 1 "protocol ip prio 5 u32 match ip protocol 0x11 0xff"
    # all UDP traffic
    
    tc qdisc del dev $DEV ingress > /dev/null 2>&1
    tc qdisc add dev $DEV ingress handle ffff:
    
    tc filter add dev $DEV parent ffff: protocol ip prio 15 u32 match ip protocol 0x11 0xff \
      police index 15 rate ${DOWNLINK}kbit buffer 50k drop flowid :2
    # all UDP traffic
    
    tc filter add dev $DEV parent ffff: protocol ip prio 20 u32 match ip src \
       0.0.0.0/0 police index 20 rate $((DOWNLINK*98/100))kbit buffer 50k drop flowid :2
    # чтобы даунлод был чуть меньше $DOWNLINK и не мешал UDP пакетам
    
    #******************************************************************
    # локалка провайдера
    shape-test start $DEV 3 $DOWNLINKMAN $UPLINKMAN 40 1
    # локалка провайдера (используем это дерево только для даунлода параметр UPLINK Не имеет особого значения)
    
    if [ "$FASTMANUPLOAD" = "1" ]; then
     while read ADDR B; do tc filter add dev $DEV parent 1: protocol ip prio 1 \
       u32 match ip dst $ADDR flowid 1:30; done < /etc/isp-ip-addrs.lst
     # добавить фильтры, чтобы даунлод и аплод из MAN шли через дерево 3
    else
     while read ADDR B; do tc filter add dev $DEV parent 1:2f protocol ip prio 1 \
       u32 match ip dst $ADDR flowid 1:3f; done < /etc/isp-ip-addrs.lst
     # добавить фильтры, чтобы даунлод из MAN шел через дерево 3
    fi
    
    while read ADDR B; do tc filter add dev $DEV parent ffff: protocol ip \
      prio 10 u32 match ip dst $ADDR police index 10 rate ${DOWNLINKMAN}kbit buffer 50k \
      drop flowid :1; done < /etc/isp-ip-addrs.lst
    # добавить фильтры, чтобы даунлод с авангардовцев был $DOWNLINKMAN
    
    shape-test filter $DEV 3 u 3 "protocol ip prio 10 u32 match ip sport 65533 0xffff" 
    shape-test filter $DEV 3 d 3 "protocol ip prio 10 u32 match ip sport 65533 0xffff" 
    # Приоритет для rtorrent
    
    shape-test filter $DEV 3 u 3 "protocol ip prio 10 u32 match ip sport 63128 0xffff" 
    shape-test filter $DEV 3 d 3 "protocol ip prio 10 u32 match ip sport 63128 0xffff" 
    # Приоритет для публичного 3proxy
    4) добавить в /usr/local/sbin/post-firewall
    Code:
    #traffic shaping
    /usr/local/sbin/shape-avangard $1
    Last edited by leniviy; 25-06-2008 at 18:45. Reason: обновил скрипт shape-avangard. Добавил UPLINKMAN, FASTMANUPLOAD

  11. #26

    Мой кусочек

    Корбина, тариф 9200 килобит.

    Ограничения: не работает при наличии качалки на роутере.
    Преимущества: работает шейпинг как исходящего, так и входящего трафика с приоритезацией.

    Базовый скрипт (shape.sh):
    Устанавливает на указанном девайсе ограничение скорости, делит траффик на 3 полосы в соотношении 50/40/10 процентов, устанавливает базовые фильтры.
    Code:
    #!/bin/sh
    # Wonder Shaper, last modified by Oleg King (aka king2)
    #
    # wshaper-king2 (start|stop|status) WAN LAN DOWNLINK UPLINK
    
    # shape_device(device, speed)
    DEV="$1"
    SPEED="$2"
    
    # install root HTB, shape everything to collect all the queue in our router, and divide traffic into 3 parts
    tc qdisc add dev $DEV root handle 1: htb default 777
    tc class add dev $DEV parent 1:0 classid 1:1 htb burst 256k rate 100mbit ceil 100mbit
    tc class add dev $DEV parent 1:1 classid 1:2 htb burst 64k rate ${SPEED}kbit ceil ${SPEED}kbit
    
    # setclass: device, class_id, prio, total uplink, percentage of uplink
    tc class add dev $DEV parent 1:2 classid 1:10 htb burst 64k rate $((50*$SPEED/100))kbit ceil ${SPEED}kbit prio 1
    tc class add dev $DEV parent 1:2 classid 1:20 htb burst 64k rate $((40*$SPEED/100))kbit ceil ${SPEED}kbit prio 2
    tc class add dev $DEV parent 1:2 classid 1:30 htb burst 64k rate $((10*$SPEED/100))kbit ceil ${SPEED}kbit prio 3
    
    tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
    tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
    #tc qdisc add dev $DEV parent 1:30 handle 30: sfq perturb 10
    
    # PRIO1 --- Business class traffic ---
    # high priority for VoIP traffic (by TOS)
    tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
       match ip tos 0x68 0xff \
       match ip protocol 0x11 0xff \
       flowid 1:10
    tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
       match ip tos 0xb8 0xff \
       match ip protocol 0x11 0xff \
       flowid 1:10
    
    # ICMP (ip protocol 1) in the interactive class
    tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
       match ip protocol 1 0xff \
       flowid 1:10
    
    # all UDP traffic are interractive
    tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
       match ip protocol 0x11 0xff \
       flowid 1:10
    
    # to make downloads fast while an upload is going on, speed up ACK packets
    tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
       match ip protocol 6 0xff \
       match u8 0x05 0x0f at 0 \
       match u16 0x0000 0xffc0 at 2 \
       match u8 0x10 0xff at 33 \
       flowid 1:10
    
    # TOS Minimum Delay (ssh, NOT scp)
    tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
       match ip tos 0x10 0xff \
       flowid 1:10
    
    # PRIO2 --- Economy class traffic ---
    # web browsing is better than other traffic
    tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
       match ip sport 80  0xffff flowid 1:20
    tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
       match ip dport 80  0xffff flowid 1:20
    tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
       match ip sport 433 0xffff flowid 1:20
    tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
       match ip dport 433 0xffff flowid 1:20
    
    # other traffic goes to default 1:20
    tc filter add dev $DEV parent 1:0 protocol ip prio 7 u32 \
       match ip dst 0.0.0.0/0 flowid 1:20

  12. #27
    Основной скрипт (wshaper-king2.sh):
    Вызывается из post-firewall, устанавливает базовые ограничения для WAN и LAN интерфейсов, плюс дополнительно устанавливает:
    - торренты как приоритет 3 для WAN и LAN
    - 192.168.1.1 плюс все, что вытащено из маршрутов - как траффик без ограничений скорости для LAN

    Code:
    #!/bin/sh
    # Wonder Shaper, last modified by Oleg King (aka king2)
    #
    # wshaper-king2 (start|stop|status) WAN LAN UPLINK DOWNLINK
    
    WAN=$2
    LAN=$3
    UPLINK=$4
    DOWNLINK=$5
    
    # show status and exit
    if [ "$1" = "status" ]
    then
       echo "Outgoing traffic:";
       echo "-----------------";
       tc -s class ls dev $WAN
       echo "Incoming traffic:";
       echo "-----------------";
       tc -s class ls dev $LAN
       exit
    fi
    
    # clean existing downlink and uplink qdiscs, hide errors
    tc qdisc del dev $WAN root 2> /dev/null > /dev/null
    tc qdisc del dev $LAN root 2> /dev/null > /dev/null
    if [ "$1" = "stop" ]
    then
       exit
    fi
    
    ### WAN ###
    /usr/local/sbin/shape.sh $WAN $UPLINK
    
    # PRIO3 --- torrents will fly with laggage ToS=0x3f and ports 4663 + 21760-22015 ---
    tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
       match ip tos 0x3f 0xff \
       flowid 1:30
    tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
       match ip sport 0x5500 0xff00 \
       flowid 1:30
    tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
       match ip sport 4663 0xffff \
       flowid 1:30
    
    ### LAN ###
    /usr/local/sbin/shape.sh $LAN $DOWNLINK
    
    # PRIO0 --- MAN always first and unlimited
    tc filter add dev $LAN parent 1:0 protocol ip prio 1 u32 \
       match ip src 192.168.1.1/32 \
       flowid 1:2
    tc filter add dev $LAN parent 1:0 protocol ip prio 1 u32 \
       match ip dst 192.168.1.1/32 \
       flowid 1:2
    
    MANLIST=`ip route | grep vlan1 | grep -v default | awk '{print $1}'`
    for a in $MANLIST
    do
       tc filter add dev $LAN parent 1:0 protocol ip prio 1 u32 \
          match ip src $a flowid 1:2
       tc filter add dev $LAN parent 1:0 protocol ip prio 1 u32 \
          match ip dst $a flowid 1:2
       echo "adding $a to MAN filter..."
    done
    
    # PRIO3 --- torrents will fly with laggage --- (dst ports 4663 + 21760-22015)
    tc filter add dev $LAN parent 1:0 protocol ip prio 5 u32 \
       match ip dport 4663 0xffff \
       flowid 1:30
    tc filter add dev $LAN parent 1:0 protocol ip prio 5 u32 \
       match ip dport 0x5500 0xff00 \
       flowid 1:30
    Более подробное описание скрипта имеется здесь (сообщение #74 и далее).

    Запуск скрипта - в post-firewall:
    Code:
    #!/bin/sh
    /usr/local/sbin/wshaper-king2.sh start "$1" br0 9200 9200

  13. #28

    еще один хороший шейпер

    еще один хороший шейпер, с подробным описанием установки (для чайников, таких как я) есть сдесь http://wl500g.info/showthread.php?t=13877
    Last edited by A-r-t; 30-04-2008 at 13:09.

  14. #29
    Join Date
    Dec 2007
    Location
    Санкт-Петербург
    Posts
    125
    leniviy, спасибо за работу. Испытал Ваш вариант. Пока нравицца. Вопрос следующий. Каким образом можно отделить трафик интернет-радио, в частности, www.101.ru. Хочется его отправить в высокий приоритет в шейпере на br0. Понятно, что качалку на роутере радио не обскачет, но среди всего остального должно же заиграть, если я правильно понимаю. Так ведь? Или может быть радио можно как-то отделить по ACK пакетам, они там вообще есть? )))
    Last edited by YAG; 04-05-2008 at 17:26.
    Катящиеся камни не обрастают мхом...

  15. #30
    Join Date
    Jun 2007
    Location
    Санкт-Петербург
    Posts
    244
    YAG, попробуй в скрипт запуска (который у меня shape-avangard) , добавить
    Code:
    shape-test filter $DEV 2 u 1 "protocol ip prio 5 u32 match ip dport 554 0xffff" 
    shape-test filter $DEV 2 d 1 "protocol ip prio 5 u32 match ip dport 554 0xffff"

Page 2 of 17 FirstFirst 123412 ... LastLast

Similar Threads

  1. Настройки роутера для сетей разных провайдеров
    By Oleg in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 248
    Last Post: 11-01-2016, 08:35
  2. Настройка роутера для двух провайдеров + DHCP
    By AndreyUA in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 98
    Last Post: 03-04-2014, 07:58
  3. Анализ трафика на wl500gP
    By mihalich in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 178
    Last Post: 19-05-2012, 13:59
  4. WiMAX - или Yota, убийца офисных провайдеров
    By euseller in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 899
    Last Post: 04-12-2010, 22:33
  5. New Specs from Asus - Audio Streaming and Traffic Shaping
    By ghaspias in forum WL-500g Pics & Specs
    Replies: 18
    Last Post: 25-04-2005, 06:58

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •