Первый раз сталкиваюсь с нуждой настройки шейпера трафика под линухом. Три дня копания в гугле принесли результат в виде выбора для этого дела скрипта htb.init.Ситуация такая:
Планируется локалка, 20 офисов, в офисе может быть несколько компьютеров, выход в инет через сервер с настроенным NAT'ом, канал в инет 100 мегабит анлим симметричный, 20 мегабит мы забираем себе остальные отдаем.Требуется:
Настроить шейпер таким образом чтобы один компьютер в одном офисе получал канал от 4-х до 10-ти мегабит в зависимости от загрузки канала. Если в офисе n компьютеров и они одновременно используют выданный на офис канал то он соответственно делится на n, если из n компьютеров в инете сидит один то он получает весь канал, если допустим два из трех... ну вы поняли, динамическое распределение.Вот что у меня получилось после денька мучений с виртуальными машинами, ткните носом в ошибки или помогите с правильным вариантом написания правил:
----------------------------------
eth1
DEFAULT=10
R2Q=70eth1-2.root
RATE=99Mbiteth1-2:20.default
RATE=1Mbit
CEIL=1Mbit
LEAF=sfqeth1-2:22.usreserved # Наш резерв
RATE=20Mbit
CEIL=99Mbiteth1-2:22:220.servers # Резерв для наших серверов
RATE=10Mbit
CEIL=99Mbit
LEAF=sfq
RULE=*,192.168.0.2
RULE=*,192.168.0.3
RULE=*,192.168.0.4eth1-2:22:222.servers # Резерв для наших рабочих станций
RATE=10Mbit
CEIL=99Mbit
LEAF=sfq
RULE=*,192.168.0.10
RULE=*,192.168.0.11
RULE=*,192.168.0.12eth1-2:30.office01 # В первой комнате 3 машины
RATE=4Mbit
CEIL=10Mbit
LEAF=sfq
RULE=*,192.168.0.20
RULE=*,192.168.0.21
RULE=*,192.168.0.22eth1-2:32.office02 # А во второй одна
RATE=4Mbit
CEIL=10Mbit
LEAF=sfq
RULE=*,192.168.0.23и т.д.
----------------------------------
и да, как сделать две вещи:зашейпить исходящий трафик, т.к. используется NAT это кажется будет геморроем с маркировкой пакетов, или я ошибаюсь?
как с вышеуказанными правилами (если они верны конечно) снять шейпинг на трафик внутри локалки?
>и да, как сделать две вещи:
>
>зашейпить исходящий трафик, т.к. используется NAT это кажется будет геморроем с маркировкой
>пакетов, или я ошибаюсь?
>
>как с вышеуказанными правилами (если они верны конечно) снять шейпинг на трафик
>внутри локалки?Поставь какую-нибудь машину перед нато. Объедени две сетевухи бриджом и на ней шейпи.
Будешь нормально резать в обе стороны.
>Поставь какую-нибудь машину перед нато. Объедени две сетевухи бриджом и на ней
>шейпи.
>Будешь нормально резать в обе стороны.А разве бридж в линухе действует не на канальном уровне? То есть на основе mac'ов а не ip'шников?
>>Поставь какую-нибудь машину перед нато. Объедени две сетевухи бриджом и на ней
>>шейпи.
>>Будешь нормально резать в обе стороны.
>
>А разве бридж в линухе действует не на канальном уровне? То есть
>на основе mac'ов а не ip'шников?Действует-то он на основе маков, а пакетец проходит через ликункс, поэтому можно посмотреть IP адрес. Помимо шейпера можно и iptabels применить к нему.
>>>Поставь какую-нибудь машину перед нато. Объедени две сетевухи бриджом и на ней
>>>шейпи.
>>>Будешь нормально резать в обе стороны.
>>
>>А разве бридж в линухе действует не на канальном уровне? То есть
>>на основе mac'ов а не ip'шников?
>
>Действует-то он на основе маков, а пакетец проходит через ликункс, поэтому можно
>посмотреть IP адрес. Помимо шейпера можно и iptabels применить к нему.
>не понятно зачем придумывать велесопед, ставите управляемый свич второго уровня, каждый офисе подключаеться перед натом через него в отдельный порт/vlan и просто на порту средствами свича ограничиваете скорость до нужных рамок. все и не надо придумывать какие либо велосипеды.
>не понятно зачем придумывать велесопед, ставите управляемый свич второго уровня, каждый офисе
>подключаеться перед натом через него в отдельный порт/vlan и просто на
>порту средствами свича ограничиваете скорость до нужных рамок. все и не
>надо придумывать какие либо велосипеды.А как в свиче делать заимствование полосы?
>не понятно зачем придумывать велесопед, ставите управляемый свич второго уровня, каждый офисе
>подключаеться перед натом через него в отдельный порт/vlan и просто на
>порту средствами свича ограничиваете скорость до нужных рамок. все и не
>надо придумывать какие либо велосипеды.Трабл в том что сеть при этом беспроводная, то есть конечное оборудование в нашей серверной это мощный роутер, толку от управлялки при этом?
Идея с промежуточным мостом очень понравилась, настроил все это дело я на виртуальных машинах - вроде работает, трафик жмется, но при этом ужасные потери пакетов.
Есть мнение что это из-за кривых виртуальных девайсов, бриджи вообще хреновато держат многие сетевухи.
Как вы думаете, если мы купим для этой системы интеловские сетевухи, потерь не будет?
>>не понятно зачем придумывать велесопед, ставите управляемый свич второго уровня, каждый офисе
>>подключаеться перед натом через него в отдельный порт/vlan и просто на
>>порту средствами свича ограничиваете скорость до нужных рамок. все и не
>>надо придумывать какие либо велосипеды.
>
>Трабл в том что сеть при этом беспроводная, то есть конечное оборудование
>в нашей серверной это мощный роутер, толку от управлялки при этом?Да тут не совсем в том дело. Свич тупо порт зарежит и все. Поставил 4 Мбита и он больше не даст. Не важно - сидит кто-то еще в инете или нет.
Вот на счет интеловских - не знаю. Он у нас стоял комп мостом без виртуализации. Шепирил человек 800. Это было давно даже щас не вспомню, что там у нас стояло. Ибо компьютер этот давным-давно разобран.
>Идея с промежуточным мостом очень понравилась, настроил все это дело я на
>виртуальных машинах - вроде работает, трафик жмется, но при этом ужасные
>потери пакетов.
>
>Есть мнение что это из-за кривых виртуальных девайсов, бриджи вообще хреновато держат
>многие сетевухи.Попробуй еще изменить параметр ядра HZ на 500 или даже 1000.
Алекс
спрашивается и зачем лишняя железка ?Koba LTD
стихи про велосипед понравились :))предположим что eth1 это выход в интернет
iptables -t mangle -A POSTROUTING -s IP_ADDRESS -o eth1 -j MARK --set-mark 222
IP_ADDRESS - ip юзера
222 - произвольно выбрано мной :)
дальше
файлики eth1, eth1-2.root и тд
вместо RULE=ip, пишем MARK=222собсно примерно так
Поверхностный просмотр показал, что возможен один косяк: сумма всех чилд рейтов должна не превышать парент, иначе не будет шейпить.
Исходя из этого, советую написать генерилку динамических htb.init правил, т.к. rate будет зависеть от количества правил...
Для обжималки входящего - либо маркировка, как уже говорилось, либо виртуальный интерфейс ifb ( http://www.linuxfoundation.org/collaborate/workgroups/networ... ) и на его исходе жать. Т.е. весь входящий трафик eth1 (где юзеры) перенаправлять на ifb0. И правила писать относительно ifb0.
немного накосячил выше (не eth1 а ethX - короче тот который смотрит в сторону интернета)с виртуальным интерфейсом тоже выход, мне лично было проще промаркировать пакеты
20 офисов и в каждом по 3 компьютера(к примеру) ну 60 маркеров в iptables - нормально.
>eth1-2:20.default
>RATE=1Mbit
>CEIL=1MbitCEIL можно и так не указывать, по дефолту он равен RATE