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


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

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

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

Оффлайн VA

  • Новичок
  • *
  • Сообщений: 32
  • Донецк
    • Просмотр профиля
Но вот незадача.. получается шейпер накладывается на исходящий трафик в локальную сеть, а я получаюсь до шейпера со своим торрентом. Я сижу за компом, который и является роутером. Это мой десктоп. Что делать?
Делай через MARK, маркируй пакеты из eth0 (ppp0) к 192.168.1.6 и др. IP
Цитировать
Столкнулся с проблемой... когда надо изменить одному клиенту скорость.. и приходиться после исправления файла в дирктории /etc/system/htb  делать рестрарт всего конфига..
sudo /etc/init.d/htb restart , что не очень удобно.. так как требуеться изменение всего лишь для одного правила.. из тысячи. (допустим).
оно тебе нужно? с таким количеством правил делай через tc без надстроек, проще будет
« Последнее редактирование: 11 Ноября 2008, 14:27:29 от VA »

Оффлайн gard

  • Любитель
  • *
  • Сообщений: 84
  • -=:area51:=-
    • Просмотр профиля
 :) Большое Спасибо за ответ! Как то я не подумал о маркировке пакетов. Будет еще один повод получше познакомиться и с iptables и с HTB.
gard.area51@jabber.ru..

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
вопрос по поводу дисциплины :

Почему-то сервер начал жутко тормозить. Пинг шлюза-сервера составляет 16-33 мс... при том что когда HTB останавливаю тогда задержка падает до <1 стабильно и красиво.

Кроме того тормозит и консоль ССН и сам сервер когда запустить оболочку Гном.


Вот пример TOP:

top - 16:17:58 up 9 days,  3:28,  3 users,  load average: 6.67, 5.86, 5.07
Tasks: 146 total,   1 running, 144 sleeping,   1 stopped,   0 zombie
Cpu(s):  1.2%us,  0.0%sy,  0.0%ni,  6.2%id,  0.0%wa,  2.3%hi, 90.3%si,  0.0%st
Mem:    514312k total,   352984k used,   161328k free,   118756k buffers
Swap:  1477940k total,    58404k used,  1419536k free,   104352k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    4 root      15  -5     0    0    0 S 14.2  0.0 115:47.48 ksoftirqd/0
32508 root      20   0  2440 1156  856 R  8.8  0.2   0:06.00 top
 8336 trek      20   0 11520 2132 1304 S  2.8  0.4   2:30.68 sshd
 5135 postgres  20   0 41336  636  540 S  1.5  0.1  12:35.61 postgres
 5134 postgres  20   0 41336  700  588 S  1.0  0.1  15:25.86 postgres
 5051 mysql     20   0  124m 2360 1360 S  0.8  0.5  24:27.71 mysqld


Не могу понять либо это косяк HTB либо не хватает ресурсов системы.

512 Мб ОЗУ
пентюх4 2,6Гц
40Гб винт

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru

Цитировать
оно тебе нужно? с таким количеством правил делай через tc без надстроек, проще будет


ну я так и делаю.. через tc.. но это ж будет в оперативке висеть.. и при перезагрузки сервера... загрузяться все значения из файлов /etc/sysconfig/htb

Оффлайн csOXOTHuK

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
настраивал по шейпинг с помощью htb руководствуясь статьей с первых страниц.

и вот что собственно происходит

oxothuk@server:/usr/sbin$ sudo htb start
/usr/sbin/htb: line 508: syntax error near unexpected token `|'
/usr/sbin/htb: line 508: `              | grep '^[a-zA-Z0-9]\+=[a-zA-Z0-9.,;:/*-_]\+$''


файл скачан со страницы проэкта. в нем руками я не копошился. все делал по инструкции.

в чем трабл?

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
настраивал по шейпинг с помощью htb руководствуясь статьей с первых страниц.

и вот что собственно происходит

oxothuk@server:/usr/sbin$ sudo htb start
/usr/sbin/htb: line 508: syntax error near unexpected token `|'
/usr/sbin/htb: line 508: `              | grep '^[a-zA-Z0-9]\+=[a-zA-Z0-9.,;:/*-_]\+$''


файл скачан со страницы проэкта. в нем руками я не копошился. все делал по инструкции.

в чем трабл?

руками не копошился.. а комманду запуска глазами не проверил.
Прочитай еще раз эту тему... и тогда sudo /etc/init.d/htb start

Оффлайн csOXOTHuK

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Цитировать
руками не копошился.. а комманду запуска глазами не проверил.
Прочитай еще раз эту тему... и тогда sudo /etc/init.d/htb start


ээээ дело в том что все равно выдает туже ошибку....

Оффлайн gard

  • Любитель
  • *
  • Сообщений: 84
  • -=:area51:=-
    • Просмотр профиля
Мне кажется ругается на синтаксис.. значит если Вы не меняли сам скрипт, то допустили ошибку либо в именах файлов либо в содержимом.
gard.area51@jabber.ru..

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
Кстати.. когда я через tc меняю скорость, тогда появляеться такое:

root@ubuntu:/home/trek# tc class show dev eth0 | grep 2044
class htb 1:2044 parent 1:2 leaf 2044: prio 0 rate 20000bit ceil 4096Kbit burst 1600b cburst 1599b
class sfq 2044:e5 parent 2044:
class sfq 2044:12a parent 2044:
class sfq 2044:16e parent 2044:
class sfq 2044:1a2 parent 2044:
class sfq 2044:1fb parent 2044:
class sfq 2044:298 parent 2044:
class sfq 2044:2b1 parent 2044:
class sfq 2044:303 parent 2044:
class sfq 2044:378 parent 2044:
class sfq 2044:395 parent 2044:
class sfq 2044:3ab parent 2044:
class sfq 2044:3b5 parent 2044:

Когда же для того класса что запустилось при запуске конфига:


root@ubuntu:/home/trek# tc class show dev eth0 | grep 2045
class htb 1:2045 parent 1:2 leaf 2045: prio 0 rate 20000bit ceil 1000Kbit burst 1600b cburst 1600b
root@ubuntu:/home/trek#

Так и должно быть?


Оффлайн gard

  • Любитель
  • *
  • Сообщений: 84
  • -=:area51:=-
    • Просмотр профиля
Здравствуйте!
Вот подскажите такая проблемка позникла.. как я уже писал etho(ppp0) смотрит в инет, eth1 в локалку, а серв - мой десктоп, и я получаюсь до шейпера, а надо ограничить и себя в ущерб клиенту локалки. Внимательно ознакомился со следующим: http://gazette.linux.ru.net/rus/articles/taleLinuxTC.html
Вот что я набросал:

#ppp0 <=> eth0
#Корневая дисциплина
#tc qdisc add dev ppp0 root handle 1: htb default 12
#Корневой класс 1000
#tc class add dev ppp0 parent 1: classid 1:1 htb rate 1000kbps ceil 1000kbps
#Его подклассы для меня и клиента 140 + 860
#tc class add dev ppp0 parent 1:1 classid 1:11 htb rate 140kbps ceil 160kbps
#tc class add dev ppp0 parent 1:1 classid 1:12 htb rate 860kbps ceil 1000kbps
#Добавляю фильтр, отправляющий пакеты для клиента в обработку классу 1:11
#tc filter add dev ppp0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.6 flowid 1:11

#Можно опционально попробовать упорядочить потоки с корня
#tc qdisc add dev ppp0 parent 1: handle 20: sfq perturb 10


Так вот собственно проблема. По идее если бы все сидели за eth1 в локалке: и я и клиент, то я бы должен был писать тут eth1 везде и это ораничение исходящего с eth1 в локалку трафика. А я пишу для ppp0(eth0), тогда выходит что я ограничиваю исходящий с ppp0(eth0) трафик. Но как определить где именно входящий а где исходящий трафик. По логике я написал выше - ограничение скорости от меня в инет. Но мне нужно ограничение скорости с ppp0(eth0), идущей на меня (сервер) с инета через этот интерфейс. Помогите разобраться.

Я могу добавить в iptables правила MARK, маркирующие пакеты предназначенные для клиента (192.168.1.6) прямо на интерфейсе eth0(ppp0), но опять же какой в этом прок, если распределить их по маркеру я смогу только на интерфейсе eth1, который дает исходящий с него в локалку трафик. Я опять же включаю торрент и перехватываю всю скорость на себя прямо с eth0(ppp0.. замаялся дублировать =). Помогите советом, где тут мое недопонимание. Неужели невозможно сделать ограничение прямо на меня и на клиента?

ps: если использовать маркировку, то есть ли возможность подключить правила перед решением о маршрутизации, то есть после POSTROUTING, и перед INPUT и FORWARD? Оставлять в этом случае интерфейс eth0(ppp0)? И какими командами вообще подключаются правила, это прописывается в iptables? Заранее спасибо, очень жду ответов!
-----------------------------------------------------
Меня осенило или нет?  :) Прочел внимательнее и вот: "Точки к которым подключаются конструкции управления трафиком.. root qdisc аналогично egress и ingrees. Тогда мне в правилах нужно написать первую строку так:
#Входящая дисциплина
#tc qdisc add dev ppp0 root handle 1: htb default 12
#...
...

И все будет работать?
.. Упс.. прочел дальше и понял что напутал.. во входящей дисциплине нельзя создавать классы.. можно лишь подключать фильтры.. Что же делать то?!? И опять же что есть входящая а что корневая: инет -> роутер или роутер -> Инет. Разъясните мне пожалуйста!
« Последнее редактирование: 12 Ноября 2008, 22:51:40 от gard »
gard.area51@jabber.ru..

Оффлайн SFireMan

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Хотелось бы узнать как всетаки можно решить вопрос по ограничению исходящей скорости от клиента до роутера, средствами iptables и tc. Дисциплина HTB.

Оффлайн VA

  • Новичок
  • *
  • Сообщений: 32
  • Донецк
    • Просмотр профиля
Цитировать
если использовать маркировку, то есть ли возможность подключить правила перед решением о маршрутизации, то есть после POSTROUTING, и перед INPUT и FORWARD? Оставлять в этом случае интерфейс eth0(ppp0)? И какими командами вообще подключаются правила, это прописывается в iptables? Заранее спасибо, очень жду ответов!
Намаркировать можно какие угодно пакеты, только проку не будет так как дисциплина HTB цепляется к сетевому интерфейсу, а маркированные пакеты предназначенные локальным приложения туда просто не попадают. Тут про IMQ упоминали, попробуй. Ещё на ум приходит запустить виртуальный сервер и манипуляции с трафиком там проводить

Оффлайн gard

  • Любитель
  • *
  • Сообщений: 84
  • -=:area51:=-
    • Просмотр профиля
 :D О! Спасибо! Уже читаю про IMQ.. вроде все понятно! Спасибо! Буду пробовать! Как раз сразу после PREROUTING их и хватать.. пакетики  ;)
« Последнее редактирование: 12 Ноября 2008, 23:17:57 от gard »
gard.area51@jabber.ru..

Оффлайн gard

  • Любитель
  • *
  • Сообщений: 84
  • -=:area51:=-
    • Просмотр профиля
 :'( Помогите!

Вот написал такой скрипт, пока все открыто (не ругайтесь на это, сейчас это не главное):
#!/bin/bash

#РЕАЛИЗАЦИЯ ПСЕВДОИНТЕРФЕЙСА IMQ ДЛЯ ПЕРЕСЫЛКИ ПАКЕТОВ НА НЕГО ПОСЛЕ PREROUTING##################
#ppp0 <=> eth0
#Корневая дисциплина imq
tc qdisc add dev imq0 root handle 1: htb default 12
#Корневой класс 1000, ceil возмлжно лишнее
tc class add dev imq0 parent 1: classid 1:1 htb rate 1000kbps ceil 1000kbps burst 15k
#Его подклассы для меня и клиента 140 + 860
tc class add dev imq0 parent 1:1 classid 1:11 htb rate 140kbps ceil 160kbps
tc class add dev ppp0 parent 1:1 classid 1:12 htb rate 860kbps ceil 1000kbps
#Добавляю фильтр, отправляющий пакеты для клиента в обработку классу 1:11
tc filter add dev imq0 parent 1:1 protocol ip prio 1 u32 match ip dst 192.168.1.6/24 flowid 1:11

#Можно опционально попробовать упорядочить потоки с корня
#tc qdisc add dev ppp0 parent 1:1 handle 20: sfq perturb 10

echo 'Дисциплина tc удачно добавлена.'

#ДОБАВЛЕНИЕ ПРАВИЛ В iptables####################################################################
#clear all pravila
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F -t nat
#politic on default
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

echo "1" > /proc/sys/net/ipv4/ip_forward

#Перехватываю пакеты на свой псевдоинтерфейс IMQ
iptables -t magle -A PREROUTING -i ppp0 -j IMQ --todev 0
ip link set imq0 up

iptables -A FORWARD -s 192.168.1.6 -j ACCEPT
iptables -A FORWARD -d 192.168.1.6 -j ACCEPT
#iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
#ptables -A FORWARD -d 192.168.1.0/24 -j ACCEPT

iptables  -t nat -A POSTROUTING -s 192.168.1.6 -o ppp0 -j MASQUERADE
#iptables  -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

echo 'Правила iptables добавлены.'

Потом пытаюсь его выполнить от суперпользователя, а оно не дает! Как так?!?
gard@gard-desktop:~$ sudo su root
[sudo] password for gard:
root@gard-desktop:/home/gard# cd run/
root@gard-desktop:/home/gard/run# ./nat2
bash: ./nat2: Permission denied
root@gard-desktop:/home/gard/run#

Начал делать построчно и сразу:
root@gard-desktop:/home/gard/run# tc qdisc add dev imq0 root handle 1: htb default 12
Cannot find device "imq0"

Не подскажете как добавить устройство - интнрфейс?   ???

Что делать? Верно ли я все написал в правилах?
« Последнее редактирование: 13 Ноября 2008, 08:40:26 от gard »
gard.area51@jabber.ru..

Оффлайн gard

  • Любитель
  • *
  • Сообщений: 84
  • -=:area51:=-
    • Просмотр профиля
А вот теперь действительно проблема..

root@gard-desktop:/home/gard/run# modprobe imq numdevs=1
FATAL: Module imq not found.

Погуглил - пишут, что проект загнулся. Ужас! Как пропатчить ядро? Жаль конечно что нет встроенной поддержки.

Пропатчить скорее всего не получится и возникает такой вопрос. Даже коварный план .  :) Интернет мне приходит на eth0 можно сказать от ppp0, получается, что когда приходит интернет, то для eth0 - это входящий трафик, а все что идет от eth0 на мою вторую сетевую и через нее на локалку - исходящий трафик. Так ли это я рассуждаю? Тогда регулировать его довольно просто как я уже писал выше свои наброски.

В общем жду помощи!
« Последнее редактирование: 13 Ноября 2008, 09:32:31 от gard »
gard.area51@jabber.ru..

 

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