The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Решение проблемы с uTP-протоколом uTorrent
По многочисленным наблюдениям системных администраторов различных компаний
предоставляющих доступ к сети интернет, с начала февраля 2010 года наблюдается
ежедневный лавинообразный рост количества пакетов в сети, их фрагментация, а
также существенный рост исходящего трафика. Данная проблема связана с новой
версией торрент-клиента uTorrent вышедшего 3 февраля 2010 года с поддержкой
протокола uTP, работающего поверх UDP. Призванный снизить нагрузку на
провайдеров протокол uTP в результате привел к обратному эффекту.

Для относительно безболезненной для клиента фильтрации uTP на шлюзе под
управлением Linux рекомендуется использовать следующее правило:

   /sbin/iptables -I FORWARD -m udp -p udp -m string --hex-string "|7F FF FF FF AB|" --algo kmp \
      --from 40 --to 44 -m statictic --mode random --probability 0.90 -j DROP

Мониторинг работы правила:

   iptables -L FORWARD -nv | grep statist

Для FreeBSD правило будет выглядеть следующим образом:

   ngctl mkpeer ipfw: bpf 2 main
   ngctl name ipfw:2 utp_filter
   ngctl msg utp_filter: setprogram { thisHook=\"main\" ifMatch=\"\" ifNotMatch=\"main\" bpf_prog_len=12 bpf_prog=[ 
      { code=48 jt=0 jf=0 k=0 } { code=84 jt=0 jf=0 k=240 } { code=21 jt=0 jf=8 k=64 } { code=48 jt=0 jf=0 k=9 } 
      { code=21 jt=0 jf=6 k=17 } { code=40 jt=0 jf=0 k=6 } { code=69 jt=4 jf=0 k=8191 } { code=177 jt=0 jf=0 k=0 } 
      { code=64 jt=0 jf=0 k=20 } { code=21 jt=0 jf=1 k=2147483647 } { code=6 jt=0 jf=0 k=65535 } { code=6 jt=0 jf=0 k=0 } ] }

   ipfw add 2 netgraph 2 udp from any to any iplen 0-128

Мониторинг:

   ngctl msg utp_filter: getstats \"main\"
 
03.03.2010 , Автор: Zzz , Источник: http://forum.nag.ru/forum/index.php...
Ключи: torrent, firewal, udp, iptables, netgraph
Раздел:    Корень / Администратору / Сетевая подсистема, маршрутизация / Проблемы работы сети

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Денис Юсупов (?), 17:56, 04/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Кто-нибудь смог расшифровать этот фильтр BPF? ;))
     
     
  • 2.16, Аноним (-), 19:35, 08/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    инопланетяне? :) какие алиены писали ЭТО?
     
     
  • 3.17, hizel (ok), 16:57, 09/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    есть транслятор в опкод bpf
    http://citrin.ru/freebsd:ng_ipfw_ng_bpf
     

  • 1.2, Mike (??), 18:59, 04/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    После этого кто-то ещё может наезжать на iptables?
     
     
  • 2.3, Аноним (3), 20:42, 04/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Согласен.
    Сравните текущий "iptables", реализованный на Red Hat и его клонах.... Какие есть проблемы? Я сравнивал... Шапка выигрывает
     
  • 2.4, аноним (?), 21:26, 04/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    это нетграф, по сравнению с ним возможности iptables весьма игрушечны, но за сложность приходится платить... для простых вещей, есть простой инструмент: ipfw, для сложных - сложный.
     
     
  • 3.13, User294 (ok), 06:38, 07/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Вы уж извините конечно, но у айпитаблеса - при взгляде на этот рулес сразу более-менее понятно что он делает. Более того, я его могу без проблем поменять на чуть иное похожее по смыслу. А вот на втором рулесе я попросту завис. И после этого бздуны говорят что айпитаблес - сложный? Шутники! oO
     
     
  • 4.20, ABC (??), 12:10, 11/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Не надо плакать, такие вещи обычно генерируются, а не пишутся вручную.
     
     
  • 5.23, User294 (ok), 23:22, 11/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >Не надо плакать, такие вещи обычно генерируются,

    Мне в таком случае кажется логичным приводить описалово как сие сгенерячено, если уж советы даются. А то мюторентовцы обещали изменения протокола если что. И, думаю, они тоже учтут как это давится и срубят удавливание, что логично.

    >а не пишутся вручную.

    Ассемблить рулесы фаерволла в стиле асм-програминга с чуть ли не ручной вколоткой опкодов - это, гм, имхо какой-то оверкилл. Особенно для всего то отлова вхождения байтов в известном месте пакета. Как минимум некоторым (вроде не вам) после этого придется слегка STFU по поводу нытья насчет сложности айпитаблеса.

     
  • 2.18, Pahanivo (ok), 08:51, 10/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >После этого кто-то ещё может наезжать на iptables?

    если вы ничего не понимаете в ядерном синтезе, это вовсе не значит что он плох ) просто он не для средних умов ))

     

  • 1.5, Денис Юсупов (?), 23:04, 04/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кстати, после установки этого фильтра под FreeBSD у пользователей начались проблемы с коннектом к Counter-Strike и Counter-Strike Source.
     
  • 1.6, аноним (?), 04:22, 05/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Для относительно безболезненной для клиента фильтрации

    А насколько безболезненна такая фильтрация для роутера при, скажем, 200K pps ?

     
     
  • 2.8, Ъ (?), 08:25, 05/03/2010 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >А насколько безболезненна такая фильтрация для роутера при, скажем, 200K pps ?

    80K pps (pptp остальное на коммутаторах режится)

    iptables -L FORWARD -nv | grep statist
      44M 2599M DROP       udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp STRING match "|7fffffffab|" ALGO name kmp FROM 40 TO 44 statistic mode random probability 0.900000

    Жалоб не поступало. uTorrent при этом переходит на обычный TCP. Без этого правила пакетов UDP более чем в 2 раза больше чем TCP, в основном мелочь 60-75 байт. Какой-либо прирост загрузки CPU не заметил. А вот размер netflow нормализовался, нагрузка на базу данных резко упала.

     
     
  • 3.14, User294 (ok), 06:42, 07/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Интересно каким местом думали мюторентовцы хренача кипы мелких пакетов для толстого файлтрансфера? Они не в курсе что вызывает нагрузку на роутеры? Во бакланы. Если уж хотели юзать UDP, надо было юзать для bulk трансферов пакеты размера сравнимого с MTU.
     

  • 1.7, pliskinsad (?), 07:42, 05/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    На цисках

    class-map type access-control match-any Torrent
    match start l3-start offset 40 size 5 regex "\x7F\xFF\xFF\xFF\xAB"

    policy-map type access-control Torrent
      class Torrent
       drop

    interface GigabitEthernet0/0
    service-policy type access-control input Torrent

     
     
  • 2.9, ivb (??), 14:05, 05/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    На Juniper бы сделать, пока непонятно.
     
     
  • 3.10, brzm (?), 16:25, 05/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    А надо? Вроде ж выдерживают ;)
     
     
  • 4.22, Vladimir (??), 22:27, 11/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    у нас фря справляется, а кошка становится очень задумчивой
    правда потерь на канале не появляется
    пришлось фильтр поставить
     

  • 1.11, Дядюшка Ляо (?), 10:42, 06/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    советую засунуть это правило для iptables в таблицу raw, т.е. iptables -t raw -I PREROUTING blbla.

    там оно будет stateless и и гораздо эффективнее.

     
  • 1.12, Аноним (-), 16:03, 06/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    правило для freebsd похоже на ч0рную магию. где можно почитать что значат эти значения в стоках вида code=xx jt=xx jf=xx k=xx?
     
     
  • 2.15, аноним (?), 17:28, 07/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    man bpf
    раздел FILTER MACHINE
     
  • 2.24, meph1st (?), 10:57, 12/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    http://nuclight.livejournal.com/

    товарищ "разжевывает"

     

  • 1.19, nuclight (??), 14:00, 10/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Расшифровка фильтра, как и объяснение, как такое писать, тут: https://www.opennet.ru/opennews/art.shtml?num=25733 (там ссылки на два поста)

    А вообще-то он сгенерирован из очень простой командной строки: tcpdump 'udp[40:4]=0x7fffffff'

     
     
  • 2.21, Backspace (?), 12:39, 11/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    В правиле iptables вместо -m statictic должно быть -m statistic
     

  • 1.25, gb03db (?), 13:15, 12/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    это вообще лишнее :)
    -m statictic --mode random --probability 0.90
     
  • 1.26, Sem (??), 17:24, 15/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Могли бы для ng_bgp сделать возможность определения программы в виде tcpdump синтаксиса. Одна команда, как я смотрю: cap_compile_nopcap().
    А то же хомячки пугаются.
     
  • 1.27, Maxim_mun (ok), 12:21, 22/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кто подскажет как на кошках подрезать, пример с верху не прокатывает, нету в матче start и вообще не разобрать пакет по битно.
    Завязли на Старом UBR7114 12.3(9a)
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру