The OpenNET Project / Index page

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

Знакомство с iptables и iproute2. Часть II.

16.02.2006 22:14

В статье представлено комплексное решение задачи управления трафиком, используя Linux, iptables, iproute2, esfq, layer-7, geoip.

Рассмотрены вопросы разделения трафика на местный и зарубежный, ограничения скачивания больших файлов, равномерного разделения полосы между IP-адресами, блокирования трафика bittorrent, edonkey, dc++ и т.д.

  1. Главная ссылка к новости (http://www.dzti.edu.lv/isp-ser...)
  2. Часть 1: Вводная часть по сетевым програмным пакетам iptables и iproute2 на Linux ( Fedora Core 3) ядро 2.6.12.5
  3. Руководство / HOWTO по установке ISP-serv на Linux ( Fedora Core 4) ядро 2.6.15.2
Автор новости: Andrejs Spunitis
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/6977-linux
Ключевые слова: linux, firewall, iptables, geoip, connbytes, layer-7, esfq, iproute2
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (38) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, gring (??), 13:41, 17/02/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Давно искал подобное на русском.
    Молодец, так держать !
     
  • 1.2, Mihail (??), 14:18, 17/02/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А смысл делить по geoip если провайдер делит по bgp. Может быть в Латвии у всех анлим, то сдесь приходится считать каждый мегабайт и быть уверенным что пиринговый траф. не пойдет через бугор. Статья -  так себе, прочитал и сделал по своему. Тут другая задача есть список сетей (локальный траф ~1200 сетей класса /22 - /23, провайдер отдает в виде файла (обновляется каждые 10 минут)). На провайдера есть канал по которому идет и локал траф и бугор. Задача как красиво зашейпить к примеру 1мбит локал траф. и 256 бугор, чтобы не плодить туеву кучу правил в фаерволе (маркирование пакетов идущих/уходящих с/на сети из списка ~1200 и последующим заворачиванием их в нужный класс) ?
     
     
  • 2.3, _Ale_ (??), 14:42, 17/02/2006 [^] [^^] [^^^] [ответить]  
  • +/
    например, сменить ОС, которая поддерживает фильтр PF - красиво зашейпить все что надо...
     
     
  • 3.4, Andrejs Spunitis (?), 15:06, 17/02/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Быстрым решением, как мне кажется, может быть создание своей
    GeoIPCountryWhois.csv в принципе её вид протой, наример:

    "222.166.0.0","222.167.255.255","3735420928","3735551999","HK","Hong Kong"
    "222.168.0.0","222.223.255.255","3735552000","3739222015","CN","China"
    ...................................

    только вместо IP-адресов поставить провайдерские на зарубежку.

    В написанной статье, главный уклон не был сделан на "ДЕЛАЙ КАК Я",
    а были приведены QuickStart по iptables, geoip, iproute2, layer-7
    которые помогут _начинающему_ админимтратору реализовывать свои задачи.  

    Если Михаилу материал помог быстро овладеть выше перечисленным и сделать
    на этой основе по своему, то я полагаю, что цель статьи достигнута.

     
  • 2.9, AndyS1976 (?), 13:12, 19/02/2006 [^] [^^] [^^^] [ответить]  
  • +/

    Решение проблемы крайне тривиальное,

    По адресу:
    http://www.dzti.edu.lv/isp-serv/index.php?l=5

    выложил исходники к написанной пограмме, которая на основание файла
    содержащего местные сети сгененирует файл CVS, который в дальнейшем
    можно использовать для создания файлов geoipdb.idx и geoipdb.bin,
    которые используются geoIP.

    Тем самым geoIP позволяет уменьшить список правил в iptables.


     

  • 1.5, EDSKA (??), 15:39, 17/02/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Nu ja ispolzuju IMQ a opredeliaju bugor/local po REALM .... i v sootvetstvije s REALM kidaju v nuznij IMQ device ...
     
     
  • 2.18, Прополис (?), 23:35, 13/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    А realm'ы для префиксов как задаете?? Может, можно проще, а я патчил zebra'у...
     
     
  • 3.22, Прополис (?), 00:39, 17/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >А realm'ы для префиксов как задаете?? Может, можно проще, а я патчил
    >zebra'у...

    кстати, вот та же идея, но реализовано красивее:

    http://vcalinus.gemenii.ro/quaggarealms.html

     

  • 1.6, MoS (??), 17:09, 17/02/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Автору спасибо. И за все остальные статьи тоже.
     
  • 1.7, edwin (ok), 21:21, 17/02/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хороший и грамотный наор статей.
    Автору огромное спасибо.
     
     
  • 2.12, Andrejs Spunitis (?), 09:49, 27/02/2006 [^] [^^] [^^^] [ответить]  
  • +/
    > Хороший и грамотный набор статей
    Спасибо за лестные слова, постараюсь держать в том же духе,
    поэтому написал статью:

    Увеличение скорости загрузки сервера или "Потрошим загрузочные скрипты Fedora Core 4"

    http://www.dzti.edu.lv/isp-serv/index.php?l=6

    В которой продолжается тема создания сервера для ISP (internet service provides), только теперь под прицелом оказались загрузочные скрипты Fedora Core 4.


     
     
  • 3.19, Прополис (?), 23:38, 13/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    с появлением модуля CLASSIFY предлагаю отказаться от фильтров в tc
     
     
  • 4.20, Andrejs Spunitis (?), 08:35, 16/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Может и можно, но в первую очередь я не уверен что CLASSIFY
    имеет теже потенциалньные возможности что и filter:
    1) создание приоритетов для пакетов принадлежащих одному классу (prio 1), для
    рассматриваемого в статье случая это очень важно, поскольку например внутри трафика
    принадлежащего HTTP, есть скачка фильмов, а серфинг будет тормозить, не говоря о DNS
    пакетах. Команда:
    ./ipr filter add dev $DEV_LAN protocol ip parent 1:0 prio 1 handle 1  fw flowid 1:10
    2) указание скорости (rate 32000bps) для принятия решения (дропаться или приниматься)
    3) Минимальный размер обрабатываемого объекта (mpu)
    4) Размер буфера пакетов (burst)

    А CLASSIFY имеет ту же функциональность ?

     
     
  • 5.21, Прополис (?), 00:19, 17/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
            Здравствуйте!

    Я, возможно, не совсем корректно выразился, конечно же 100% CLASSIFY фильтры не заменит, хотя бы потому, что CLASSIFY ограничен возможностями iptables. Но в 60% случаев без фильтров можно обойтись, и результат будет не хуже, но нагляднее и проще для понимания. Тем более, что CLASSIFY не нужно ставить отдельно, как p-2-p модули.

    PS: А вообще, статьи супер, Thnx! Когда n лет назад разбирался с tc, из доки были только LARTC и the source is best documentation :((

     

  • 1.8, Skif (ok), 21:59, 17/02/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    не линуксоид но цикл почитал. неплохо, доходчиво. с некоторыми моментами я бы поспорил, но в виду невысокой продвинутости в линуксе отнесу на свою неграмотность :)
     
  • 1.10, Slayer605 (?), 14:36, 21/02/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    # защита от провайдерства интернета
    $ipt -A INPUT -i eth1 -m ttl --ttl-lt 128 -j DROP
    $ipt -A INPUT -i eth1 -m ttl --ttl-gt 128 -j DROP
    есть модуль который меняет TTL :)
    PS а если человек честно использует ОС не видновс? 128 ?
     
     
  • 2.11, AndyS1976 (?), 20:14, 21/02/2006 [^] [^^] [^^^] [ответить]  
  • +/
    этот вопрос уже поднимался в форуме для первой части
    статьи: http://www.opennet.ru/opennews/art.shtml?num=5994

    в форуме отведенной для обсуждения второй части статьи,
    это вопрос не поднимался, так как такой проверки нету, смотри:
    http://www.dzti.edu.lv/isp-serv/index.php?l=3#firewall

     

  • 1.13, nrvalex (?), 19:35, 27/02/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >echo "Attach qdisc: esfq to class id: 10 for WAN"
    >./ipr qdisc add dev eth1 parent 1:0 handle 10  esfq perturb 5 hash dst

    с 1го компа 100 сессий на 100 ip
    со 2го  1 сессия
    1:100  это равномерное разделение полосы ?

     
     
  • 2.15, Andrejs Spunitis (?), 11:00, 02/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Полоса делится между IP адресами, вне зависимости от того
    сколько сессий с IP. Приведенный Вами пример это по сути дело
    то что реализует SFQ (станлдартное поставляемое с дистрибутивом)
    а в статье рассматривается ESFQ. В статье приведен хороший ресурс
    по теории управления трафиком
    Теория iproute2 изложена в статье "повесть о Linux и управлении трафиком" по адресу:
    http://www.nestor.minsk.by/sr/2003/12/31208.html

     
     
  • 3.16, nrvalex (?), 20:06, 02/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    В статье для исходящего трафика рассматривается ESFQ с "hash dst" !
    с 1го компа 100 сессий на ip1
    со 2го  1 сессия   на ip0
    50/50  ок

    с 1го компа 100 сессий на ip1,ip2,ip3...ip100
    со 2го  1 сессия   на ip0
    100/1   ?

    для исходящего трафика нужно  использовать "hash src".
    если  NAT, то  через псевдо-интерфейс IMQ  
    http://www.linuximq.net/
    http://wiki.nix.hu/cgi-bin/twiki/view/IMQ/ImqFaq#Can_I_change_the_way_IMQ_hoo

    ip link set imq0 up
    iptables -t mangle -A POSTROUTING -o eth1 -j IMQ --todev 0
    DEV_WAN=imq0
    tc qdisc add dev $DEV_WAN root handle 1:0 htb default 50
    ....
    tc qdisc add dev $DEV_WAN parent 1:40  esfq perturb 5 hash src
    ...

     
     
  • 4.17, Andrejs Spunitis (?), 17:32, 03/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Да Вы правы!

    надо ограничивать по сути дела входной трафик который поступает
    из ЛВС на NAT-сервер по hash src. Но поскольку где в инете
    промелькнула заметка что IMQ не совсем хорошо может дружить с последними
    ядрами, то упростил слегка задачу.  

    Вообще в найденных в инете скриптах иногда можно увидеть
    что делают hash src, но при случае NAT получается src один
    на кучу пользователей.

    Из практикического применения предлагаемый в статье подход
    срабатывает, по всей видимости из за того что в основном качают внутрь
    ЛВС а не наоборот (поскольку использование NAT всетаки накладывает
    ограничения на upload).


    Спасибо
    постараюст проверить на практике, и если все сработает,
    то обновлю материал в статье

    ЗЫ
    а этого вопроса я давно ожидал :) молодец!

     

  • 1.14, grim (?), 23:57, 27/02/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Простое человеческое спасибо!
     
  • 1.23, Alex (??), 02:09, 28/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Можно коментарий по  "firewall & защита от смены IP" ?

    Скрипт с awk что делает ?
    Как должна выглядить ips.cfg и ip-mac-tab ?

    с уважением

     
  • 1.24, Andrejs Spunitis (?), 14:48, 28/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Разрешение IP-MAC
    ips.cfg, запрещаем все, за исключением
    !10.10.10.8@00:50:BA:49:B9:42
    !10.10.10.7@00:01:A4:49:19:34
    !10.10.10.23@00:03:42:43:11:31
    и так далее


    ip-mac-tab
    Объяснения есть в статье "Привязка IP к MAC адресу"
    http://www.opennet.ru/tips/info/750.shtml

    там не работает
    # обнуляем всю таблицу arp
    arp -ad > null

    поэтому очищаем таблицу awk скриптом
    for i in 'awk -F ' ' '{ if ( $1 ~ /[0-9{1,3}].[0-9{1,3}].[0-9{1,3}].[0-9{1,3}]/ ) print $1 }' /proc/net/arp' ; do arp -d $i ; done

    и вместо предлагаемого в статье "Привязка IP к MAC адресу"
    while [ $I -le 254 ]
       do
          arp -s 192.168.0.${I} 0:0:0:0:0:0
          I='expr $I + 1'
       done
    arp -f   /etc/ethers.local

    создаем в excell
    arp -s  10.10.10.1 0:0:0:0:0:0
    arp -s  10.10.10.2 0:0:0:0:0:0
    .....
    # arp -s        10.10.10.8 00:40:A1:43:B4:49
    .....
    arp -s  10.10.10.9 00:D0:B7:3B:27:78
    arp -s  10.10.10.10     00:00:00:00:00:00
    .....

     
  • 1.25, Alex (??), 18:53, 28/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Спасибо.

    Я правильно понимаю - надо потом каждого пользователя
    вручную прописывать и в ip-mac-tab и в ips.cfg ?

     
     
  • 2.26, Andrejs Spunitis (?), 19:14, 28/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Абсолютно верно,
    только в скрипте ip-mac-tab  всем свободным ip присвоен мак 00:00:00:....

    А в ips.cfg надо для каждого пользователя сделать запись.

    Насколько я разобрался, подобная реализация на уровне arp просто облегчит загрузку сервера, хотя можно и в iptables было лы прописать все существующие маки пользователей, но сам по себе iptables изначально создавался для протокола tcp/ip

    В принципе можно обойтись только ip-sentinel, поскольку она раньше всех перехватывает незарегестрированный ip-mac.

     

  • 1.27, Andrejs Spunitis (?), 22:34, 12/05/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Утарнена ошибка в скрипте
    Срипт маркировки пакетов
    mark-isp.sh
    http://www.dzti.edu.lv/isp-serv/index.php?l=3#qs_markschema

    Для трафика P2P метка пакетов не соответсвовала схеме а так же
    не соответсвовала правлиам фильтрам.


     
  • 1.28, fufnf (ok), 21:33, 23/08/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Скажите, а можно каким-то средством посмотреть сколько какому пользователю выделено полосы?
     
  • 1.29, fufnf (ok), 19:25, 24/08/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Простите, уже нашел прочитав предыдущую часть Вашей статьи.

    Вы на форуме задавали вопрос как прикрутить connbytes к новым ядрам, ответа не получили, но все равно используете этот модуль в вашей статье. Значит Вы нашли решение? Тогда почему бы не упомянуть о нем в статье. Пришлось самому разбираться, случайно наткнулся на http://patchwork.netfilter.org/netfilter-devel/patch.pl?id=3482
    который фиксит проблему.

    Хочу задать вопрос по Layer-7. Вы проверяли насколько точно он классифицирует траффик, в особенности FTP. По моим наблюдениям ужасно:
    http://www.opennet.ru/openforum/vsluhforumID1/68420.html

    Хочу выразить огромную благодарность за статью. К сожалению, когда я начинал свое знакомство с линукс ее не было под рукой, так что приходилось самому догадываться о многом. Пожалуй, по теме настройки интернет-шлюза она лучшая в РУ-нете (еще бы тему сквида упомянуть не мешало...).

     
  • 1.30, fufnf (ok), 23:05, 28/08/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Насколько я понял, в статье серьёзная ошибка связанная с тем предположением, что приоритет фильтров как-то влияет на приоритет трафика. На самом деле приоритет фильтров для того, чтобы делать, например, такие вещи при фильтрации пакетов:

    tc filter add dev eth1 parent 1 protocol ip prio 0 handle 1 fw flowid 1:1
    tc filter add dev eth1 parent 1 protocol ip prio 0 handle 2 fw flowid 1:1
    tc filter add dev eth1 parent 1 protocol ip prio 1 u32 match ip src 0.0.0.0/0 flowid 1:2

    Если я не прав, поправьте.

     
     
  • 2.31, Аноним (31), 03:24, 01/09/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Начну по порядку с выходом нового ядра, и использованием указанных пакетов про... большой текст свёрнут, показать
     
     
  • 3.32, fufnf (ok), 15:17, 01/09/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >с выходом нового ядра, и использованием указанных пакетов
    >проблема connbytes сама собой решилась, в указанных пакетах ошибка это была исправлена,
    >
    >именно это меня и сподвигло на обновление материалла
    >(ни какого утаивания информации не было, не мой стиль)

    Довольно странно, но с этой проблемой я столкнулся, хотя ядро у меня 2.6.17.9. К тому же по ссылке, которую я привел (http://patchwork.netfilter.org/netfilter-devel/patch.pl?id=3482)фиксится именно моя проблема, так что думаю, я не одинок.

    >пример указанный Вами с одинаковым приоиритетом пакеты с меткой 1 и 2
    >
    >направляет классу 1:1 что собственно и верно,
    >а пакеты у которых src 0.0.0.0/0 в класс 1:2

    Prio в описании фильтрах говорит о приоритетности фильтров, т.е. устанавливает порядок следования одних фильтров за другими (какой фильтр работает за каким).

    >а пакеты у которых src 0.0.0.0/0 в класс 1:2
    Как вы понимаете такой фильтр означает "любой пакет", но в контексте 2 фильтров с более высоким приоритетом, чем у данного это означает "любой пакет, который не имеет метки 1 или 2.

     
     
  • 4.33, fufnf (ok), 08:54, 02/09/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Чтоб не быть пустословным добавлю ссылку на авторитетный источник, где можете прочесть об этом параметре:
    http://gazette.linux.ru.net/rus/articles/lartc/c1452.html
    (или оригинал тут http://lartc.org/howto/lartc.adv-filter.html)
     
     
  • 5.34, andyS1976 (??), 23:56, 03/09/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Да, я действительно не правильно понял следующую фразу из приведенного  Вами документа:

    prio
        Приоритет классификатора. Чем меньше число -- тем выше приоритет.


    Уже давно не занимался этой темой, и сейчас признаюсь что мне самому не понятно
    следующая ситуация:

    к примеру у меня есть два класса А и Б
    есть два фильтра с одинаковым приоритеотом,
    для двух этих фильтров условия фильтрации срабатывают,
    тогда непонятно по какому критерию будет принято решение
    в какой класс будет направлен пакет???


    ЗЫ
    Век живи, век учись....

     
     
  • 6.35, fufnf (ok), 00:51, 04/09/2006 [^] [^^] [^^^] [ответить]  
  • +/

    >к примеру у меня есть два класса А и Б
    >есть два фильтра с одинаковым приоритеотом,
    >для двух этих фильтров условия фильтрации срабатывают,
    >тогда непонятно по какому критерию будет принято решение
    >в какой класс будет направлен пакет???

    И сразу же напрашивается встречный вопрос: зачем создавать 2 класса с одинаковым контентом и, если такие классы создаются, то зачем назначать их фильтрам одинаковый приоритет?
    Так что вопрос Ваш теоретический скорее. Зависит от того как iproute2 формирует список фильтров с одинаковыми приоритетами (возможно по порядку создания, возможно по алфавиту или по номеру класса - вобщем вариантов много).

     
     
  • 7.36, andyS1976 (??), 01:12, 04/09/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Вопрос был чисто теоритическим,

    а Вам удалсь решить свою проблему по игре в контрол страйк?

     
     
  • 8.37, fufnf (ok), 22:47, 04/09/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Ну проблема у меня не чисто по КС - моя задача обеспечить приоритетом некоторый ... текст свёрнут, показать
     

  • 1.38, koffu (??), 16:54, 20/03/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Что-то не могу найти как сохранить настройки после прописывания в tc, ip. Подскажите куда копать?
     
     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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