Page 1 of 17 12311 ... LastLast
Results 1 to 15 of 248

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

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

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

    можно пропустить всю эту болтовню и сразу идти сюда: http://wl500g.info/showthread.php?p=87742#post87742



    сложность в том, что wshaper умеет классифицировать пакеты только по номеру порта, а исходящие соединения rtorrent идут через случайный порт.

    Единственное решение, которое приходит в голову, настроить rtorrent через локальный прокси, а в wshaper передавать порт прокси сервера.
    Last edited by leniviy; 13-03-2008 at 13:09.

  2. #2
    Join Date
    Jun 2007
    Location
    Санкт-Петербург
    Posts
    244
    Как сделать, чтобы rtorrent работал через прокси? опция http_proxy не помогает.

    я понял как надо сделать. Есть tsocks - соксификатор, который перехватывает вызов connect()
    Если написать аналогичную библиотеку, которая будет перехватывать connect() и внутри вызывать bind() к заранее определенному набору портов. Один и тот же локальный порт теоретически можно использовать для подключений к разным хостам.
    Этот же набор портов использовать в wshaper
    Last edited by Omega; 08-01-2012 at 21:57. Reason: fixed

  3. #3
    Quote Originally Posted by leniviy View Post
    сложность в том, что wshaper умеет классифицировать пакеты только по номеру порта, а исходящие соединения rtorrent идут через случайный порт.
    если rtorrent установлен на самом рутере, то выход достаточно простой - весь трафик изначально пихать в самый низкориоритетный класс

    сам бьюсь над проблемой ибо торретны жадные до ужаса и забивают весь канал.... шайпер вроде работает, но как-то с большим запаздываением, что естественно не дело для веб-трафика.....

    поэтому буду признателен, если местные гуру нам помогут =)

    я сейчас работаю с этим (роутер раздает адреса 192.168.100.хх):
    Code:
    #!/bin/sh
    
    DOWNLINK=$3
    UPLINK=$4
    DEV=$2
    
    if [ "$1" = "status" ]
    then
            tc -s qdisc ls dev $DEV
            tc -s class ls dev $DEV
            exit
    fi
    
    
    # clean existing down- and uplink qdiscs, hide errors
    tc qdisc del dev $DEV root    2> /dev/null > /dev/null
    tc qdisc del dev $DEV ingress 2> /dev/null > /dev/null
    
    if [ "$1" = "stop" ]
    then
            exit
    fi
    
    ###### uplink
    # set queue size to give latency of about 2 seconds on low-prio packets
    ip link set dev $DEV qlen 30
    
    # changes mtu on the outbound device.  Lowering the mtu will result
    # in lower latency but will also cause slightly lower throughput due 
    # to IP and TCP protocol overhead.
    ip link set dev $DEV mtu 1000
    
    # install root HTB, point default traffic to 1:30:
    
    tc qdisc add dev $DEV root handle 1: htb default 30 r2q 1
    
    # shape everything at $UPLINK speed - this prevents huge queues in your
    # DSL modem which destroy latency:
    
    tc class add dev $DEV parent 1: classid 1:1 htb rate ${UPLINK}kbit burst 1540 cburst 1
    
    # high prio class 1:10:
    
    tc class add dev $DEV parent 1:1 classid 1:10 htb rate $((3*$UPLINK/10))kbit ceil ${UPLINK}kbit prio 0
    
    # desktop class 1:20
    
    tc class add dev $DEV parent 1:1 classid 1:20 htb rate $((6*$UPLINK/10))kbit ceil ${UPLINK}kbit prio 1
    
    # bulk data/bittorrent class 1:30
    
    tc class add dev $DEV parent 1:1 classid 1:30 htb rate $((1*$UPLINK/10))kbit ceil $((8*$UPLINK/10))kbit prio 2
    
    # all get Stochastic Fairness:
    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
    
    # TOS Minimum Delay (ssh, NOT scp) in 1:10:
    tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
          match ip tos 0x10 0x10 flowid 1:10
    
    # ICMP (ip protocol 1) in the interactive class 1:10 so we
    # can do measurements & impress our friends:
    tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
            match ip protocol 1 0xff flowid 1:10
    
    # To speed up downloads while an upload is going on, put ACK packets in
    # the interactive class:
    tc filter add dev $DEV parent 1: 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
    
    # prioritize small packets (<64 bytes)
    tc filter add dev $DEV parent 1: protocol ip prio 1 u32 \
       match ip protocol 6 0xff \
       match u8 0x05 0x0f at 0 \
       match u16 0x0000 0xffc0 at 2 \
       flowid 1:10
    
    # from desktops - mark 6
    tc filter add dev $DEV parent 1: protocol ip prio 10 handle 6 fw flowid 1:20
    
    iptables -A PREROUTING -t mangle -s 192.168.100.0/24 -j MARK --set-mark 6
    
    ########## downlink #############
    # slow downloads down to somewhat less than the real speed  to prevent
    # queuing at our ISP. Tune to see how high you can set it.
    # ISPs tend to have *huge* queues to make sure big downloads are fast
    #
    # attach ingress policer:
    
    tc qdisc add dev $DEV handle ffff: ingress
    
    # filter *everything* to it (0.0.0.0/0), drop everything that's
    # coming in too fast:
    
    tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \
       0.0.0.0/0 police rate ${DOWNLINK}kbit burst 10k drop flowid :1

  4. #4
    Quote Originally Posted by leniviy View Post
    я понял как надо сделать. Есть tsocks - соксификатор, который перехватывает вызов connect()
    Если написать аналогичную библиотеку, которая будет перехватывать connect() и внутри вызывать bind() к заранее определенному набору портов. Один и тот же локальный порт теоретически можно использовать для подключений к разным хостам.
    Этот же набор портов использовать в wshaper
    Проще собрать модуль ipt_owner для iptables и ядра, и отслеживать все соединения от нужных PID.

  5. #5
    Join Date
    Jun 2007
    Location
    Санкт-Петербург
    Posts
    244
    получилось написать прогу для винды, которая привязывает исходящие соединения к набору портов. В данном случае 15000-16000.
    когда доделаю для винды, сделаю для линукса.
    к моей проге хочу привязать качалку и uTorrent.


    wshaper слабенький, и выложенный здесь скрипт тоже слабенький. Буду учить tc и ip
    Attached Images Attached Images  
    Last edited by Omega; 08-01-2012 at 21:59. Reason: fixed

  6. #6
    Quote Originally Posted by leniviy View Post
    wshaper слабенький, и выложенный здесь скрипт тоже слабенький. Буду учить tc и ip
    давай... не забудь поделиться с общественностью достигнутыми резуальтатами =)

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

    почему для HTB не используется ceil?

    пример. аплинк 250
    почему бы для низкого приоритета вместо того как в whshaper:
    Code:
    tc class add dev vlan1 parent 1:1 classid 1:30 htb rate 200kbit burst 1 cburst 1 prio 0
    не использовать вот это?
    Code:
    tc class add dev vlan1 parent 1:1 classid 1:30 htb rate 25kbit ceil 250kbit burst 1 cburst 1 prio 0
    в первом случае низкоприоритетный траффик будет забивать канал и никогда не будет работать на полную мощность.
    а во втором случае он будет автоматически тротлиться, если появляется более высокоприоритетный траффик

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

    почему не работают примеры для cbq из lartc?

    *lartc = Linux Advanced Routing & Traffic Control HOWTO
    Code:
    [admin@router netfilter]$ tc qdisc add dev br0 root handle 1:0 cbq bandwidth 100Mbit avpkt 1000 cell 8
    RTNETLINK answers: Invalid argument
    я так понимаю, что в ядре чего-то не хватает.

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

    можно ли в iptables или tc filter задать диапазон портов?

    например так не работает:
    Code:
    [admin@router netfilter]$ tc filter add dev br0 parent 1: protocol ip prio 16 u32 match ip sport 12345-12346 0xffff flowid 1:10
    Illegal "match"

  10. #10
    Join Date
    Feb 2007
    Location
    Moscow, Russia
    Posts
    3,805
    в iptables диапазон задается через двоеточие

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

    iptables -t mangle .......... -j MARK ..........
    для помечания исходящих коннектов
    iptables -A PREROUTING -t mangle .......... -j MARK .........
    для помечания входящик коннектов

    правильно?
    Last edited by Omega; 08-01-2012 at 22:00. Reason: fixed

  12. #12
    Quote Originally Posted by leniviy View Post
    iptables -t mangle .......... -j MARK ..........
    для помечания исходящих коннектов
    iptables -A PREROUTING -t mangle .......... -j MARK .........
    для помечания входящик коннектов

    правильно?
    Нет, не правильно в первом варианте не указана цепочка.
    iptables -A PREROUTING -t mangle .......... -j MARK в любом случае используется для маркировки пакетов, только для входящих и исходящих условия разные. Укажите в условиях -s source_ip, в качестве source_ip используйте адреса локальных компьютеров или роутера, в зависимости что Вам требуется и будет происходить маркировка исходящего трафика, для входящего укажите -d ip_адрес_маршрутизатора. В качестве критерия можно так же использовать имя интерфейса с которого был получен пакет -i.
    Рекомендую посмотреть http://www.opennet.ru/docs/RUS/iptables/ там есть очень понятная схема.
    Last edited by Ilmarinen; 09-03-2008 at 13:41.

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

    netfilter hostname?

    надо фильтровать *.pppoe.avangarddsl.ru в отдельный класс. Есть такой модуль?

  14. #14
    Quote Originally Posted by leniviy View Post
    надо фильтровать *.pppoe.avangarddsl.ru в отдельный класс. Есть такой модуль?
    Есть. Называется - "руки + голова".
    Посмотрите диапазон адресов.

  15. #15
    Join Date
    Jun 2007
    Location
    Санкт-Петербург
    Posts
    244
    Code:
    lynx -dump "http://www.db.ripe.net/whois?form_type=simple&full_query_string=&searchtext=RU-AVANGARD-DSL&do_search=Search" | grep inetnum
    более менее разобрался с egress. теперь неепонятка с ingress.
    Например в egress скорость указывается в классе. А в ingress скорость указывается в фильтре
    Code:
    tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \
       0.0.0.0/0 police rate ${DOWNLINK}kbit burst 10k drop flowid :1
    сегодня надеюсь выложу часть скрипта
    Last edited by Omega; 08-01-2012 at 21:50. Reason: fixed

Page 1 of 17 12311 ... 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
  •