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


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

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

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

Оффлайн niksan321

  • Новичок
  • *
  • Сообщений: 32
    • Просмотр профиля
народ помогите плиз настроить шейпер, прочитал всю ветку, но не понял как:
1. ограничить скорость инэта самому серваку
2. ограничить исходящую скорость у пользователей на сервак, и назначить ей наименьший приоритет

в общем ситуация такая - сервак Ubuntu 10.04, 2 сетевых интерфейса,
eth0 - смотрит к провайдеру, инэт канал 6-20 мегабит (в зависимости от времени суток), так же у провайдера локалка 100мбит 10.0.0.0(маска 255.255.0.0) серый ип этого интерфейса - 10.0.100.100.  шлюз 10.0.100.1
eth1 - 1Гбит, смотрит в локалку с пользователями, его ип 192.168.0.1

задача:
1 скорость пользователей к локалке провайдера - 90мбит - приоритет трафика наименьший
2 скорость пользователей к серваку (файловая помойка) 450мбит - приоритет трафика наименьший
3 скорость пользователей к инэту от 6 до 20мбит - делится на всех, приоритет трафика средний
4 скорость самого сервака к инэту - от 6 до 20мбит - приоритет трафика чуть выше локального (поднят rtorrent с rutorrent, не хочу чтобы он канал забивал, ограничение самим rtorrent'ом не сильно помогают)
5 скорость суперпользователя (тобиш меня) к ssh - 256кбит (думаю хватит) - приоритет наивысший

ЗЫ: скорости нужно ограничивать как на приём, так и на отдачу

после долгих безрезультатных шаманств с htb, прошу помощи форумчан, помогите плиз разобратся  :-[

Оффлайн xeon_greg

  • Активист
  • *
  • Сообщений: 981
    • Просмотр профиля
серваку скорость закачки по-нормальнону не ограничить никак, только скорость отдачи можно. если нужно резать скорость именно на сервер то смотреть в сторону IMQ. для клиентов скорость закачки резать на интерфейсе смотрящем в локалку,  скорость отдачи на интерфейсе смотрящем на провайдера , на нем же режется скорость отдачи и самого сервера

Оффлайн niksan321

  • Новичок
  • *
  • Сообщений: 32
    • Просмотр профиля
серваку скорость закачки по-нормальнону не ограничить никак, только скорость отдачи можно. если нужно резать скорость именно на сервер то смотреть в сторону IMQ. для клиентов скорость закачки резать на интерфейсе смотрящем в локалку,  скорость отдачи на интерфейсе смотрящем на провайдера , на нем же режется скорость отдачи и самого сервера
Про IMQ спасибо, буду копать.

Оффлайн lucky89

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Всем здрасте! Появилась нужда на сервере разделить по скоростям трафик к локальным ресурсам провайдера и в интернет, плюс урезать скорость p2p трафику. Всего пользователей 20, канал в интернет 11 Мбит (но бывает и выше по ночам поднимается), локалка 100Мбит. Нужно чтобы с локалки пользователи качали с максимально возможной скоростью, с интернета не более 2Мбит, p2p не более 512Кбит. Сделал следующее, но скорость не режется вообще:

eth0
DEFAULT=5
R2Q=20

eth0-2.root
RATE=100Mbit

eth0-2:30.local
RATE=50Mbit
CEIL=85Mbit
LEAF=sfq
MARK=3000
(Сюда получается должен попасть весь трафик на локальные ресурсы провайдера)

eth0-2:20.internet
RATE=15Mbit
(А сюда тот, что в интернет идет, дальше деление по пользователям)

eth0-2:20:2002.user1
RATE=100Kbit
CEIL=2Mbit
(Это сколько всего выделено пользователю1, дальше деление на нормальный трафик и p2p, игры и прочий мусор)

eth0-2:20:2002:A1
RATE=75Kbit
CEIL=2Mbit
MARK=1002

eth0-2:20:2002:A1
RATE=25Kbit
CEIL=512Kbit
MARK=2002

Ну и маркеровка пакетов:
#Маркеровка
#Локальные ресурсы
iptables -t mangle -A PREROUTING -i eth0 -d 172.28.0.0/255.255.0.0 -j MARK --set-mark 3000
iptables -t mangle -A PREROUTING -i eth0 -d 172.28.0.0/255.255.0.0 -j RETURN
iptables -t mangle -A PREROUTING -i eth0 -d 172.29.0.0/255.255.0.0 -j MARK --set-mark 3000
iptables -t mangle -A PREROUTING -i eth0 -d 172.29.0.0/255.255.0.0 -j RETURN
iptables -t mangle -A PREROUTING -i eth0 -d 172.30.0.0/255.255.0.0 -j MARK --set-mark 3000
iptables -t mangle -A PREROUTING -i eth0 -d 172.30.0.0/255.255.0.0 -j RETURN
iptables -t mangle -A PREROUTING -i eth0 -d 172.31.0.0/255.255.0.0 -j MARK --set-mark 3000
iptables -t mangle -A PREROUTING -i eth0 -d 172.31.0.0/255.255.0.0 -j RETURN

#Для пользователя1, все что идет на указанные порты считать быстрым трафиком
iptables -t mangle -A PREROUTING -i eth0 -s 192.168.102.2 -p tcp -m multiport --dport 80,8080,81,21 -j MARK --set-mark 1002
iptables -t mangle -A PREROUTING -i eth0 -s 192.168.102.2 -p tcp -m multiport --dport 80,8080,81,21 -j RETURN
iptables -t mangle -A PREROUTING -i eth0 -s 192.168.102.2 -p udp --dport 53 -j MARK --set-mark 1002
iptables -t mangle -A PREROUTING -i eth0 -s 192.168.102.2 -p udp --dport 53 -j RETURN
#А все остальное для пользователя1, что еще не промаркеровалось считать медленным трафиком
iptables -t mangle -A PREROUTING -i eth0 -s 192.168.102.2 -j MARK --set-mark 2002
iptables -t mangle -A PREROUTING -i eth0 -s 192.168.102.2 -j RETURN


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

Оффлайн stempher

  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Дано:
eth0 - смотрит в инет
eth1 - смотрит в локалку

NAT включен, и клиенты заходят через VPN

Необходимо:
Создать шейпер с динамической шириной канала, т.е. если качает один юзер - чтобы ему давался весь канал, если двое - то канал делился пополам и т.д.

Нашел пример с использованием ifb интерфейса:

#!/bin/sh

modprobe ifb
ip link set dev ifb0 up
ip addr add 172.16.10.1/32 dev ifb0

tc qdisc del dev ifb0 root      2> /dev/null > /dev/null
tc qdisc del dev ifb0 ingress   2> /dev/null > /dev/null
tc qdisc del dev eth0 root      2> /dev/null > /dev/null
tc qdisc del dev eth0 ingress   2> /dev/null > /dev/null

tc qdisc add dev eth0 ingress handle ffff:
tc filter add dev eth0 parent ffff: protocol all prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0

tc qdisc add dev ifb0 root handle 1: htb default 20

tc class add dev ifb0 parent 1: classid 1:1 htb rate 2048kbit ceil 2048kbit burst 15k
tc qdisc add dev ifb0 parent 1:1 handle 2: sfq limit 1024 perturb 15

tc class add dev ifb0 parent 1:1 classid 1:20 htb rate 512kbit ceil 1512kbit burst 15k prio 5
tc qdisc add dev ifb0 parent 1:20 handle 20: sfq limit 128 perturb 15
tc class add dev ifb0 parent 1:1 classid 1:30 htb rate 512kbit ceil 512kbit burst 15k prio 4
tc qdisc add dev ifb0 parent 1:30 handle 30: sfq limit 128 perturb 15
tc class add dev ifb0 parent 1:1 classid 1:40 htb rate 256kbit ceil 256kbit burst 1k prio 3
tc qdisc add dev ifb0 parent 1:40 handle 40: sfq limit 128 perturb 15

tc filter add dev ifb0 parent 1: protocol all prio 2 u32 match ip dst 10.0.0.7/32 flowid 1:40

НО, при такой реализации не отлавливается ip 10.0.0.7 - впновский айпишник юзера. Как можно отловить от какого юзера идут запросы и направить его в нужную полосу?

ЗЫ не хотелось бы использовать imq, желательно решить задачу с помощью ifb

Оффлайн xeon_greg

  • Активист
  • *
  • Сообщений: 981
    • Просмотр профиля
можно обойтись и без ifb. какой vpn используется ? при подключении каждого клиента подымается собственный интерфейс ? покажи
ifconfig
ip route
sudo iptables-save -c

Оффлайн stempher

  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
vpn - pptp
да, при подключении каждого клиента свой интерфейс - ppp+

ifconfig
eth0      Link encap:Ethernet  HWaddr 00:13:d4:14:07:94
          inet addr:195.xxx.xxx.xxx  Bcast:195.xxx.xxx.xxx  Mask:255.255.255.252
          inet6 addr: fe80::213:d4ff:fe14:794/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2090690 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1824832 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1972609287 (1.9 GB)  TX bytes:519249387 (519.2 MB)
          Interrupt:17 Base address:0xc800

eth1      Link encap:Ethernet  HWaddr 00:e0:52:79:31:a7
          inet addr:172.16.0.1  Bcast:172.16.0.255  Mask:255.255.255.0
          inet6 addr: fe80::2e0:52ff:fe79:31a7/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:241726 errors:0 dropped:0 overruns:1 frame:0
          TX packets:192100 errors:0 dropped:0 overruns:0 carrier:1
          collisions:0 txqueuelen:1000
          RX bytes:46853756 (46.8 MB)  TX bytes:28544661 (28.5 MB)
          Interrupt:22 Память:e1000000-e10000ff

eth2      Link encap:Ethernet  HWaddr 00:e0:52:79:31:c9
          inet addr:192.168.1.100  Bcast:192.168.3.255  Mask:255.255.252.0
          inet6 addr: fe80::2e0:52ff:fe79:31c9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2235370 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2735542 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:595410754 (595.4 MB)  TX bytes:2039974791 (2.0 GB)
          Interrupt:23 Память:e1001000-e10010ff

ifb0      Link encap:Ethernet  HWaddr a6:f3:c6:1d:44:91
          inet addr:172.16.10.1  Bcast:0.0.0.0  Mask:255.255.255.255
          inet6 addr: fe80::a4f3:c6ff:fe1d:4491/64 Scope:Link
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:1884752 errors:0 dropped:3 overruns:0 frame:0
          TX packets:1884749 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:32
          RX bytes:1739957919 (1.7 GB)  TX bytes:1739957709 (1.7 GB)

lo        Link encap:Локальная петля (Loopback)
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:78915 errors:0 dropped:0 overruns:0 frame:0
          TX packets:78915 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:57073128 (57.0 MB)  TX bytes:57073128 (57.0 MB)

ppp0      Link encap:Протокол PPP (Point-to-Point Protocol)
          inet addr:10.0.0.1  P-t-P:10.0.0.7  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1400  Metric:1
          RX packets:385 errors:0 dropped:0 overruns:0 frame:0
          TX packets:396 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:71024 (71.0 KB)  TX bytes:164820 (164.8 KB)

ip route
10.0.0.7 dev ppp0  proto kernel  scope link  src 10.0.0.1
195.xxx.xxx.xxx/30 dev eth0  proto kernel  scope link  src 195.xxx.xxx.xxx
172.16.0.0/24 dev eth1  proto kernel  scope link  src 172.16.0.1
192.168.0.0/22 dev eth2  proto kernel  scope link  src 192.168.1.100
169.254.0.0/16 dev eth0  scope link  metric 1000
default via 195.xxx.xxx.xxx dev eth0

sudo iptables-save -c
# Generated by iptables-save v1.4.4 on Thu Mar 10 12:21:13 2011
*nat
:PREROUTING ACCEPT [395128:51998377]
:POSTROUTING ACCEPT [40886:2721490]
:OUTPUT ACCEPT [39138:2475833]
[26:1248] -A PREROUTING -s 10.0.0.0/24 -i ppp+ -p tcp -m multiport --dports 80,8080 -j REDIRECT --to-ports 3128
[201:23669] -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to-source 195.xxx.xxx.xxx
COMMIT
# Completed on Thu Mar 10 12:21:13 2011
# Generated by iptables-save v1.4.4 on Thu Mar 10 12:21:13 2011
*mangle
:PREROUTING ACCEPT [9186185:4278710697]
:INPUT ACCEPT [8547619:4030262993]
:FORWARD ACCEPT [621562:247264638]
:OUTPUT ACCEPT [9766976:6165080149]
:POSTROUTING ACCEPT [10389043:6412378060]
COMMIT
# Completed on Thu Mar 10 12:21:13 2011
# Generated by iptables-save v1.4.4 on Thu Mar 10 12:21:13 2011
*filter
:INPUT ACCEPT [41878:19926414]
:FORWARD ACCEPT [1179:214114]
:OUTPUT ACCEPT [53060:34069475]
COMMIT
# Completed on Thu Mar 10 12:21:13 2011

до этого шейпил следующим образом - в скрипте ip-up писал:
    /sbin/tc qdisc add dev $1 root handle 1: htb default 20 r2q 1
    /sbin/tc class add dev $1 parent 1: classid 1:1 htb rate ${RATE_UPSPEED}kbit ceil ${CEIL_UPSPEED}kbit burst 4k
    /sbin/tc class add dev $1 parent 1:1 classid 1:10 htb rate ${RATE_UPSPEED}kbit ceil ${CEIL_UPSPEED}kbit burst 4k prio 1
    /sbin/tc class add dev $1 parent 1:1 classid 1:20 htb rate ${RATE_UPSPEED}kbit ceil ${CEIL_UPSPEED}kbit burst 4k prio 2
    /sbin/tc qdisc add dev $1 parent 1:10 handle 10: sfq perturb 10 quantum 1500
    /sbin/tc qdisc add dev $1 parent 1:20 handle 20: sfq perturb 10 quantum 1500
    /sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:10
    /sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 1:10
    /sbin/tc filter add dev $1 parent 1: protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u160x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:10

но таким образом получалось раздать клиентам только гарантированную скорость и в случае работы одного клиента весь канал простаивал...
« Последнее редактирование: 15 Марта 2011, 15:42:54 от stempher »

Оффлайн xeon_greg

  • Активист
  • *
  • Сообщений: 981
    • Просмотр профиля
понятное дело что ты не сможешь отфильтровать ничего на интерфейсе ifb где dst у тебя сидит на другом интерфейсе (ppp+)/ динамически делить скорость между интерфейсами думаю получится только таким образом. при поднятии каждого нового интерфейса ppp добавлять их в мост и  потом стандартными средствами tc рулить трафиком на этом мосту.  если не использовать мост, до деление можно организовать,он статически на каждом интерфейсе ppp, либо же для полу-динамики, так сказать, скриптом каждый раз при подъеме/опускании нового интерфейса ppp пересчитывать параметры rate и/или ceil для всех ppp интерфейсов

Оффлайн stempher

  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
а если при поднятии ppp интерфейсе попробовать его завернуть на ifb?
можно чуть поподробнее что значит добавлять ppp интерфейсы в мост?

Оффлайн xeon_greg

  • Активист
  • *
  • Сообщений: 981
    • Просмотр профиля
ifb это аналог imq, только тем лучше что не нужно патчить ядро.  ifb необходим чтобы резать входящую скорость на одном интерфейсе. в данном случае у тебя входящим является eth0 его и заворачивают на ifb, тк эффективно управлять можно только исходящей скоростью.  про мост ситуация такова когда подключается 1 юзер, рулишь трафиком download для этого юзера на ppp0, когда поключается 2 юзер ppp1, тут вступает в работу  скрипт который считает кол-во интерфейсов ppp и делает из них мост br0 к примеру,  и уже на этом мосту рулишь download трафиком для обоих юзеров либо только фильтрами  tc по ip либо с метками через iptables, все зависит от необходимой гибкости.. ну и при каждом последующем поднятом/опущенном ppp интерфейсе соотв добавляется либо удаляется интерфейс  из моста br0

Оффлайн A.T.Tappman

  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
Ситуация следующая. Клиенты подключаются к серверу через br0 и выходят в и-нет через прозрачную проксю. br0 является мостом между физическими eth0 и wlan0. Требуется справедливо и по братски поделить внешний трафик в 8MBit между клиентами локалки. Правила для br0:
br0
DEFAULT=40
R2Q=1

br0-2.root
RATE=1000MBit
CEIL=1000MBit

br0-2:10.local
RATE=1Kbit
CEIL=1000Mbit
LEAF=sfq
RULE=192.168.0.0/24,192.168.0.0/24
PRIO=10

br0-2:20.inet
RATE=8Mbit
CEIL=8Mbit

br0-2:20:30.people
RATE=1Mbit
CEIL=8Mbit
BURST=15K
PRIO=5
LEAF=sfq

br0-2:20:30:31.user1
RATE=1Mbit
CEIL=8Mbit
RULE=,192.168.0.2
BURST=15K
PRIO=5

br0-2:20:30:31.user2
RATE=1Mbit
CEIL=8Mbit
RULE=,192.168.0.3
BURST=15K
PRIO=5

br0-2:20:30:99.other
RATE=1Mbit
CEIL=2Mbit
RULE=,192.168.0.0/24
BURST=15K
PRIO=10

br0-2:40.default
RATE=128Kbit
CEIL=2Mbit
LEAF=sfq
PRIO=20

Нормально работает только правило br0-2:10.local - локальный трафик с сервера не ограничивается. Остальные правила работают криво - трафик с и-нета режется, но скорость ограничивается на уровне 2-2.5MBit, вместо восьми мегабит. При отключении htb скорость загрузки ограничивается только провайдером.  Где я тут ошибся и что править надо?

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Где я тут ошибся и что править надо?

1. Попробуйте увеличить BURST в 10-15 раз.
2. br0-2:20:30:31.user1 и br0-2:20:30:31.user2 отличаются только комментарием после точки, для второго юзера нужно взять идентификатор, отличный от 31.
3. У user'ов и other тоже должен быть LEAF, а вот у people его быть не должно (этот класс - исключительно родительский для юзеров и other).
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн A.T.Tappman

  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
1. Попробуйте увеличить BURST в 10-15 раз.
2. br0-2:20:30:31.user1 и br0-2:20:30:31.user2 отличаются только комментарием после точки, для второго юзера нужно взять идентификатор, отличный от 31.
3. У user'ов и other тоже должен быть LEAF, а вот у people его быть не должно (этот класс - исключительно родительский для юзеров и other).
1. Выставил BURST=250K
2. Изначально стояло правильно. Просто когда постил, промахнулся мимо нужной кнопки.
3. Исправил.
Итого: на тесте speedtest.net с двух машин показало практически равную скорость в 4+-0.5MBit, что и было нужно. Для более точного распределения трафика нужно поиграть с BURST и R2Q, я правильно понимаю?

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Для более точного распределения трафика нужно поиграть с BURST и R2Q, я правильно понимаю?
Да.
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн andrey7x7

  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
у меня происходит так: iptables заворачивает все соединения на squid,а он уже рулит пулами

Примерно так

iptables -t nat -A PREROUTING -p tcp -i $Local --dport 80 -j REDIRECT --to-ports 3128

#Ограничение скорости
delay_pools 3

delay_class 1 1
delay_class 2 2
delay_class 3 2

delay_access 1 allow goodip
delay_access 1 deny all

delay_access 2 allow networks2
delay_access 2 deny all

delay_access 3 allow networks1
delay_access 3 deny all

#Скорости 64000=512k/b ; 32000=256k/b ; 16000=128k/b ; 8000=64k/b
#все каждый
delay_parameters 1 256000/128000
delay_parameters 2 64000/64000 32000/32000
delay_parameters 3 128000/128000 64000/64000
Ubuntu Server 10.10, IPTables, Squid3, webmin, free-sa

 

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