Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: [FAQ] Ограничение скорости для клиентов на Ubuntu-Server (htb.init)  (Прочитано 326157 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн InkVisitor

  • Участник
  • *
  • Сообщений: 190
  • Nikopol, Ukraine
    • Просмотр профиля
Я делил, маркируя в iptables.

Оффлайн G-Dogg

  • Любитель
  • *
  • Сообщений: 73
  • Йа нубат
    • Просмотр профиля
Обожаю такие ответы!

Рад за Вас! (это тоже сарказм)

Я не могу делить на юзеров, мне тупо надо основной канал ограничить

а по теме:
Так создать один файл на одного юзера (т. е. на весь канал). Промаркировать пакеты в iptables (типо iptables -t mangle -A FORWARD -o eth0 -d 192.168.0.0/24 -j MARK --set-mark 34689какойто-там), а в правиле на юзера (канал) вместо IP-адреса (RULE=192.168.0.1) прописать номер маркированого пакета (MARK=34689какойто-там)

P.S. Можно ещё попробовать типа RULE=192.168.0.0/24 без маркировки в iptables
а вот за PS огромный респект, отобедаю и обязательно попробую!  ;)

Пользователь решил продолжить мысль 01 Ноября 2011, 11:24:52:
Обожаю такие ответы!

Рад за Вас! (это тоже сарказм)

Я не могу делить на юзеров, мне тупо надо основной канал ограничить

а по теме:
Так создать один файл на одного юзера (т. е. на весь канал). Промаркировать пакеты в iptables (типо iptables -t mangle -A FORWARD -o eth0 -d 192.168.0.0/24 -j MARK --set-mark 34689какойто-там), а в правиле на юзера (канал) вместо IP-адреса (RULE=192.168.0.1) прописать номер маркированого пакета (MARK=34689какойто-там)

P.S. Можно ещё попробовать типа RULE=192.168.0.0/24 без маркировки в iptables
а вот за PS огромный респект, отобедаю и обязательно попробую!  ;)
InkVisitor, спасибо тебе огромное! Помог, работает! Всех благ тебе, богатства, здоровья!  :D
« Последнее редактирование: 01 Ноября 2011, 11:24:52 от G-Dogg »

Оффлайн ivsatel

  • Активист
  • *
  • Сообщений: 336
    • Просмотр профиля
Я делил, маркируя в iptables.

Я делаю так:

eth0-2.root = 100 000Kbit
eth0-2:10.local = 80 000Kbit (MARK=200)
eth0-2:20.www = 8 500Kbit
eth0-2:20:2001 = 512Kbit (сумма RATE = 7680Kbit)
eth0-2:30.smtp = 1000Kbit
eth0-2:40.dflt = 500Kbit

Добавляю правило в iptables:

iptables -t mangle -A OUTPUT -o eth0 -d 192.168.1.0/24 -j MARK --set-mark 200

И вообще ни чего не получается(

Оффлайн InkVisitor

  • Участник
  • *
  • Сообщений: 190
  • Nikopol, Ukraine
    • Просмотр профиля
eth0-2:10.local = 80 000Kbit (MARK=200)
eth0-2:20.www = 8 500Kbit

Смысл ограничивать локалку. Ограничивать (и, ессно, маркировать) нужно инет. У меня на работе без ограничений больше 60 Мбит не поднимается (такие провода, сетевухи, свичи). Может у Вас что поярче стоит, но, все равно, смысла ограничивать 80 Мбит не вижу.

Добавляю правило в iptables:

iptables -t mangle -A OUTPUT -o eth0 -d 192.168.1.0/24 -j MARK --set-mark 200

И вообще ни чего не получается(

У меня для маркировки такое правило

iptables -t mangle -A FORWARD -o eth0 -s ! 192.168.1.0/24 -d 192.168.1.0/24 -j MARK --set-mark 200

Вообще, неправильный подход... Вы попробовали одновременно запустить два взаимодействующих скрипта. И во-первых нужно понять, ГДЕ не работает. Я бы, в первую очередь, начал бы с того, что разобрался бы, пакеты вообще маркируются? И если маркируются, то какие?

Оффлайн ivsatel

  • Активист
  • *
  • Сообщений: 336
    • Просмотр профиля
Смысла ограничивать 80 Мбит не вижу.

Этим я разделял RATE от root и вниз во иерархии (если я мыслю в правильном напрвлении) Т.е. если от eth0 равного 100Mbit отнять ширину интернета то как раз останется 80.

У меня для маркировки такое правило

iptables -t mangle -A FORWARD -o eth0 -s ! 192.168.1.0/24 -d 192.168.1.0/24 -j MARK --set-mark 200

Так это для транзита. А я ищу вариант отловить трафик конкретного локального приложения, а именно proftpd.

Вообще, неправильный подход...

Просто как один из вариантов...

Вы попробовали одновременно запустить два взаимодействующих скрипта.

Так работает ведь. Причем в обе стороны и соответственно на всех интерфейсах.
Для входящего трафика RULE по IP
Для исходящего трафика по MARK использую правило
iptables -t mangle -A FORWARD -d 192.168.1.X -j MARK --set-mark 100
И во-первых нужно понять, ГДЕ не работает.

Не работает именно в направлении локального трафика. То ли я правило пишу трафику который физически под это правило не попадает. То ли я htb правила создаю в разрез с правилом в iptables.

Я бы, в первую очередь, начал бы с того, что разобрался бы, пакеты вообще маркируются? И если маркируются, то какие?

В принципе я как раз с этим и разбираюсь, а именно как правильно задать правило для маркировки трафика порожденного локальным процессом.

Оффлайн InkVisitor

  • Участник
  • *
  • Сообщений: 190
  • Nikopol, Ukraine
    • Просмотр профиля
Я так понял, не работает обрезка только по маркированному трафику.

если от eth0 равного 100Mbit отнять ширину интернета то как раз останется 80.

Не будет на обычных свичах, сетевухах и кабелях 100Mbit

Так это для транзита. А я ищу вариант отловить трафик конкретного локального приложения, а именно proftpd.

Смысл резать ftp в локалку? Это даже не самба. Там даже клип не посмотришь, пока полностью файл не скачаешь...
Ну да ладно, может так надо...

Я бы, в первую очередь, начал бы с того, что разобрался бы, пакеты вообще маркируются? И если маркируются, то какие?

В принципе я как раз с этим и разбираюсь, а именно как правильно задать правило для маркировки трафика порожденного локальным процессом.

Неплохо было бы глянуть
sudo iptables -L -n -v -t mangle
Ну и посмотреть в динамике количество маркированых пакетов или байт (там первый или второй столбец)

Оффлайн ivsatel

  • Активист
  • *
  • Сообщений: 336
    • Просмотр профиля
Динамика:
sudo iptables -t mangle -vL -n | grep MARK | awk '{print $1,$2,$3}'
1009 113K MARK
16 4517 MARK
15 1127 MARK
0 0 MARK
0 0 MARK
0 0 MARK
921 85396 MARK
0 0 MARK
0 0 MARK
0 0 MARK
0 0 MARK
405 60021 MARK
0 0 MARK
0 0 MARK
0 0 MARK
2317 1568K MARK


****************

sudo iptables -t mangle -vL -n | grep MARK | awk '{print $1,$2,$3}'
3747 416K MARK
65 13953 MARK
58 4685 MARK
0 0 MARK
0 0 MARK
0 0 MARK
3812 367K MARK
0 0 MARK
0 0 MARK
0 0 MARK
0 0 MARK
1273 299K MARK
0 0 MARK
0 0 MARK
0 0 MARK
19096 18M MARK

**************************
Полностью:

Chain PREROUTING (policy ACCEPT 23374 packets, 6363K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 11439 packets, 5302K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 11871 packets, 1057K bytes)
 pkts bytes target     prot opt in     out     source               destination
 1026 49248 TCPMSS     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp flags:0x06/0x02 TCPMSS clamp to PMTU
 1663  188K MARK       all  --  *      *       0.0.0.0/0            192.168.1.2         MARK xset 0x64/0xffffffff
   29  7456 MARK       all  --  *      *       0.0.0.0/0            192.168.1.3         MARK xset 0x65/0xffffffff
   34  3294 MARK       all  --  *      *       0.0.0.0/0            192.168.1.4         MARK xset 0x66/0xffffffff
    0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.1.5         MARK xset 0x67/0xffffffff
    0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.1.6         MARK xset 0x68/0xffffffff
    0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.1.7         MARK xset 0x69/0xffffffff
 1615  147K MARK       all  --  *      *       0.0.0.0/0            192.168.1.8         MARK xset 0x6a/0xffffffff
    0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.1.9         MARK xset 0x6b/0xffffffff
    0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.1.10        MARK xset 0x6c/0xffffffff
    0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.1.11        MARK xset 0x6d/0xffffffff
    0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.1.12        MARK xset 0x3f2/0xffffffff
  671 94496 MARK       all  --  *      *       0.0.0.0/0            192.168.1.13        MARK xset 0x3f3/0xffffffff
    0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.1.14        MARK xset 0x3f4/0xffffffff
    0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.1.15        MARK xset 0x3f5/0xffffffff
    0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.1.16        MARK xset 0x3f6/0xffffffff

Chain OUTPUT (policy ACCEPT 12198 packets, 5702K bytes)
 pkts bytes target     prot opt in     out     source               destination
 5566 4584K MARK       all  --  *      eth0    0.0.0.0/0            192.168.1.0/24      MARK xset 0xc8/0xffffffff

Chain POSTROUTING (policy ACCEPT 23479 packets, 6712K bytes)
 pkts bytes target     prot opt in     out     source               destination
« Последнее редактирование: 03 Ноября 2011, 23:09:47 от ivsatel »

Оффлайн InkVisitor

  • Участник
  • *
  • Сообщений: 190
  • Nikopol, Ukraine
    • Просмотр профиля
Ну так пакеты маркируются. Теперь файл eth0-2:20.2.www должен иметь примерный вид
BURST=50Kb
RATE=100Kbit
CEIL=1000Kbit
LEAF=sfq
PRIO=1
MARK=100

файл eth0-2:20.3.www:

BURST=50Kb
RATE=100Kbit
CEIL=1000Kbit
LEAF=sfq
PRIO=1
MARK=101

и т. д. для каждого клиента.
Ессно, ограничение идёт через eth0

Я так понял, ограничение локального трафика (через правило OUTPUT) уже не актуально...

Оффлайн ivsatel

  • Активист
  • *
  • Сообщений: 336
    • Просмотр профиля
Ну так пакеты маркируются.
Все верно, и маркировку эту я использую для интерфейсов ppp+
И вот так выглядят файлы конфигурации для пользователей на этих интерфейсах:

ppp0-2:20:2001.www

RATE=512Kbit
CEIL=20000Kbit
LEAF=sfq
PRIO=1
MARK=100

Исходя из этого правила:
iptables -t mangle -A FORWARD -d 192.168.1.X -j MARK --set-mark 100
Теперь файл eth0-2:20.2.www должен иметь примерный вид
BURST=50Kb
RATE=100Kbit
CEIL=1000Kbit
LEAF=sfq
PRIO=1
MARK=100

файл eth0-2:20.3.www:

BURST=50Kb
RATE=100Kbit
CEIL=1000Kbit
LEAF=sfq
PRIO=1
MARK=101

и т. д. для каждого клиента.
Ессно, ограничение идёт через eth0

Я так понял, ограничение локального трафика (через правило OUTPUT) уже не актуально...

Что-то с направлениями запутался. Требуется в данный момент не ограничение, а равномерное разделение канала между пользователями с применением не ниже (RATE) это как бы основная идея. Так как возможно управлять лишь исходящим трафиком (без подъема других интерфейсов типа ifb0) я исходящий маркирую
iptables -t mangle -A FORWARD -d 192.168.1.X -j MARK --set-mark 100 для интерфейсов ppp+
А входящий RULE=IP
Если я вас правильно понял, то вы предлагаете те-же метки использовать и для входящего?
И вообще правильно ли использование для исходящих iptables -t mangle -A FORWARD -d 192.168.1.X -j MARK --set-mark 100
ведь указывается адрес назначения. А для входящих тогда:
iptables -t mangle -A FORWARD -s 192.168.1.X -j MARK --set-mark 200
Я правильно понимаю?
« Последнее редактирование: 04 Ноября 2011, 16:29:30 от ivsatel »

Оффлайн InkVisitor

  • Участник
  • *
  • Сообщений: 190
  • Nikopol, Ukraine
    • Просмотр профиля
Что-то с направлениями запутался. Требуется в данный момент не ограничение, а равномерное разделение канала между пользователями с применением не ниже (RATE) это как бы основная идея.

Создать всем одинаковые файлы с RATE=(общий трафик разделить на кол-во клиентов) и CEIL=(общий трафик). Тогда трафик будет просто равномерно распределяться.

метки использовать и для входящего?

Входящий траф htb не режет.

И вообще правильно ли использование для исходящих iptables -t mangle -A FORWARD -d 192.168.1.X -j MARK --set-mark 100
ведь указывается адрес назначения. А для входящих тогда:
iptables -t mangle -A FORWARD -s 192.168.1.X -j MARK --set-mark 100
Я правильно понимаю?

Вообщем, я вообще запутался... Карту сети в студию.

Оффлайн ivsatel

  • Активист
  • *
  • Сообщений: 336
    • Просмотр профиля

Создать всем одинаковые файлы с RATE=(общий трафик разделить на кол-во клиентов) и CEIL=(общий трафик). Тогда трафик будет просто равномерно распределяться.

Я так и делаю.

Входящий траф htb не режет.

Для этого я и использую разные интерфейсы. Что бы ровнять в обе стороны.

Вообщем, я вообще запутался... Карту сети в студию.

Тут не сложно, для наглядности картинка:
http://www.pictureshack.ru/view_6406NET.png

Стрелочками обозначены места на которые навешен htb скрипт. LAN = eth0
« Последнее редактирование: 04 Ноября 2011, 18:03:03 от ivsatel »

Оффлайн InkVisitor

  • Участник
  • *
  • Сообщений: 190
  • Nikopol, Ukraine
    • Просмотр профиля
Судя по рисунку в LAN
iptables -t mangle -A FORWARD -o eth0 -d 192.168.1.X -j MARK --set-mark 10X
А в наружку подобное правило, скорее всего, не будет работать, так, как, очевидно в таблице NAT должна быть цепочка POSTROUTING, которая подменяет в заголовке пакетов адрес источника. Т. е. что-то типа такого
iptables -t nat -A POSTROUTING -s 192.168.1.X -o $ppp0 -d 0/0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.X -o $ppp1 -d 0/0 -j MASQUERADE
Это правило подменяет в заголовках пакетов адрес источника. И с маркировкой тут пробовать надо. По идее, можно промаркировать в таблице FORWARD, а потом в таблице POSTROUTING подменить заголовки. Если не полуциццо можно попробовать промаркировать в таблице POSTROUTING. До, или после маскарада... Вообщем - запасайтесь терпением, пивом, кофе...

Я никогда не ограничивал исходящие пакеты через РРР...

Оффлайн ivsatel

  • Активист
  • *
  • Сообщений: 336
    • Просмотр профиля
Судя по рисунку в LAN
iptables -t mangle -A FORWARD -o eth0 -d 192.168.1.X -j MARK --set-mark 10X
На сколько я понимаю в это место (-t mangle -A FORWARD) попадает трафик как локальный так и транзитный. Наверно не то. Так же шлюз и фтп на eth0. И у любого из них исходящий в локаль будет -d 192.168.1.X

А в наружку подобное правило, скорее всего, не будет работать, так, как, очевидно в таблице NAT должна быть цепочка POSTROUTING, которая подменяет в заголовке пакетов адрес источника. Т. е. что-то типа такого
iptables -t nat -A POSTROUTING -s 192.168.1.X -o $ppp0 -d 0/0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.X -o $ppp1 -d 0/0 -j MASQUERADE
Это правило подменяет в заголовках пакетов адрес источника. И с маркировкой тут пробовать надо. По идее, можно промаркировать в таблице FORWARD, а потом в таблице POSTROUTING подменить заголовки. Если не полуциццо можно попробовать промаркировать в таблице POSTROUTING. До, или после маскарада... Вообщем - запасайтесь терпением, пивом, кофе...

Я никогда не ограничивал исходящие пакеты через РРР...
На внешку все в порядке...

Оффлайн InkVisitor

  • Участник
  • *
  • Сообщений: 190
  • Nikopol, Ukraine
    • Просмотр профиля
На сколько я понимаю в это место (-t mangle -A FORWARD) попадает трафик как локальный так и транзитный. Наверно не то. Так же шлюз и фтп на eth0. И у любого из них исходящий в локаль будет -d 192.168.1.X
Нед. Только транзит.
(Нажмите, чтобы показать/скрыть)

Оффлайн ivsatel

  • Активист
  • *
  • Сообщений: 336
    • Просмотр профиля
Попробую вернуться обратно.

Для исходящего маркировал MARK=10XX и вешал на ppp+ интерфейсы, правило:
iptables -t mangle -A FORWARD -d 192.168.1.XX -j MARK --set-mark 10XX
Тут явно трафик с локальным не пересекается. Скорость заливки на фтп не режется относительно правил исходящего.
Не понятен один нюанс относительно направления. Ведь если в правиле -d 192.168.1.XX то значит: "Пакет идет в направлении LAN" Я не ошибаюсь? Так вот эти марки висят на ppp+ и скорость на отдачу регулируется...

Для входящего извне трафика в конфигурационных файлах пользователей я использовал RULE=192.168.1.XXX
Если я создаю правило:
iptables -t mangle -A FORWARD -s 192.168.1.XX -j MARK --set-mark 20XX
И конфигурационные файлы основываю на них (марках) то не срабатывает. Хотя в моем понимании -s 192.168.1.XX это источник...

Окончательно запутался(
« Последнее редактирование: 05 Ноября 2011, 19:42:44 от ivsatel »

 

Страница сгенерирована за 0.021 секунд. Запросов: 21.