Автор Тема: iptables + tc -> проблема нарезки скорости  (Прочитано 2483 раз)

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

Оффлайн viking

  • Пользователь
  • *
  • Сообщений: 16
  • Jabber: vik_k@jabber.ru
Здравствуйте джедаи и те кто только учится.
Пытался я нарезать в своей локальной сети скорость всем пользователям, да вот не преуспел в этом:

Spoiler: ShowHide

# uname -a
Linux orion 3.2.0-4-amd64 #1 SMP Debian 3.2.68-1+deb7u6 x86_64 GNU/Linux

#iptables -L -v -n -t mangle
.....
Chain FORWARD (policy ACCEPT 1324K packets, 1662M bytes)
 pkts bytes target     prot opt in     out     source               destination         
30555   73M MARK       all  --  *      *       0.0.0.0/0            10.1.0.25            MARK set 0x84
13796   40M MARK       all  --  *      *       10.1.0.25            0.0.0.0/0            MARK set 0x1024
......

# htb stats
### wan: queueing disciplines

qdisc htb 1: root refcnt 2 r2q 100 default 0 direct_packets_stat 2582868
 Sent 1638413450 bytes 2814134 pkt (dropped 0, overlimits 93809 requeues 88)
 backlog 0b 0p requeues 88

### wan: traffic classes

class htb 1:4132 parent 1:2 prio 0 rate 10240Kbit ceil 10240Kbit burst 1598b cburst 1598b
 Sent 40336357 bytes 39168 pkt (dropped 0, overlimits 0 requeues 0)
 rate 40bit 0pps backlog 0b 0p requeues 0
 lended: 13810 borrowed: 0 giants: 0
 tokens: 18656 ctokens: 18656

class htb 1:2 root rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b
 Sent 165827493 bytes 150565 pkt (dropped 0, overlimits 0 requeues 0)
 rate 40bit 0pps backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 1922 ctokens: 1922

### wan: filtering rules

filter parent 1: protocol ip pref 3 fw
filter parent 1: protocol ip pref 3 fw handle 0x1024 classid 1:4132

### lan: queueing disciplines

qdisc htb 1: root refcnt 2 r2q 100 default 0 direct_packets_stat 4174351
 Sent 5028324300 bytes 4174393 pkt (dropped 0, overlimits 0 requeues 3877)
 backlog 0b 0p requeues 3877

### lan: traffic classes

class htb 1:2 root prio 0 rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 2000 ctokens: 2000

### lan.300: traffic classes

class htb 1:132 parent 1:2 prio 0 rate 10240Kbit ceil 10240Kbit burst 1598b cburst 1598b
 Sent 9090411 bytes 10599 pkt (dropped 303, overlimits 0 requeues 0)
 rate 40bit 0pps backlog 0b 0p requeues 0
 lended: 8869 borrowed: 0 giants: 0
 tokens: 18656 ctokens: 18656

class htb 1:2 root rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b
 Sent 35368963 bytes 44001 pkt (dropped 0, overlimits 0 requeues 0)
 rate 40bit 0pps backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 1922 ctokens: 1922

### lan.300: filtering rules

filter parent 1: protocol ip pref 3 fw
filter parent 1: protocol ip pref 3 fw handle 0x84 classid 1:132


И вот что самое интересное:
Если делать speedtest от клиента того самого 10.1.0.25, то исходящая скорость ровно 10 Mbps  (или 20 Mbps - столько сколько и укажу), а вот входящая скорость  выше 5 Mbps не прыгала (что бы я не указывал в TC)
Трафик ходит между интерфейсами wan <-> lan.300

кто что может подсказать в этой ситуации? :-\
« Последнее редактирование: 16 Декабря 2015, 19:33:55 от viking »
Debian squeez (Linux 2.6.32-5-686 i686 GNU/Linux), GDM 2.30.5
 

Оффлайн GrDEV

Re: iptables + tc -> проблема нарезки скорости
« Ответ #1 : 14 Декабря 2015, 22:04:48 »
Почему трафик маркируете по-разному?

Попробуйте как то так:

#!/bin/bash

IPT="/sbin/iptables"
TC="/sbin/tc"

if_wan="eth0"
if_lan="eth1"

ID=25

let id=${ID}+5000

$IPT -t mangle -D FORWARD -s 0/0 -d 10.1.0.25/32  -j MARK --set-mark $id
$IPT -t mangle -D FORWARD -d 0/0 -s 10.1.0.25/32 -j MARK --set-mark $id

$IPT -D FORWARD -s 0/0 -d 10.1.0.25/32 -j ACCEPT
$IPT -D FORWARD -d 0/0 -s 10.1.0.25/32 -j ACCEPT

# UPLOAD speed
$TC filter add dev $if_wan parent 1: protocol ip prio 3 handle $id fw classid 1:$id
$TC class add dev $if_wan parent 1:1 classid 1:$id htb rate $4kbit burst 20k
# DOWNLOAD speed
$TC filter add dev $if_lan parent 1: protocol ip prio 3 handle $id fw classid 1:$id
$TC class add dev $if_lan parent 1:1 classid 1:$id htb rate $5kbit burst 20k
 

Оффлайн viking

  • Пользователь
  • *
  • Сообщений: 16
  • Jabber: vik_k@jabber.ru
Re: iptables + tc -> проблема нарезки скорости
« Ответ #2 : 16 Декабря 2015, 19:31:28 »
извини, наверное стоило сразу написать в таком виде:

IFUP="wan"
IFDOWN="lan.300"
ID=$1
SCOUNT="Kbit"
SPEED=`$2`
UPSPEED=`$2`
IP="10.1.0.$ID"

declare -i mark=$ID+101
declare -i mark1=$ID+4101

IPT="/sbin/iptables"
tc="/sbin/tc"

# Маркируем входящий трафик
$IPT -t mangle -A FORWARD -d $IP -j MARK --set-mark $mark

# Маркируем исходящий трафик
$IPT -t mangle -A FORWARD -s $IP -j MARK --set-mark $mark1

#Download
$tc class  add dev $IFDOWN parent 1:2 classid 1:$mark htb rate $SPEED$SCOUNT
$tc filter add dev $IFDOWN parent 1: protocol ip prio 3 handle $mark fw classid 1:$mark

#Upload
$tc class  add dev $IFUP parent 1:2 classid 1:$mark1 htb rate $UPSPEED$SCOUNT
$tc filter add dev $IFUP parent 1: protocol ip prio 3 handle $mark1 fw classid 1:$mark1


Cообщение объединено 16 Декабря 2015, 19:36:53
$IPT -t mangle -D FORWARD -s 0/0 -d 10.1.0.25/32  -j MARK --set-mark $id
$IPT -t mangle -D FORWARD -d 0/0 -s 10.1.0.25/32 -j MARK --set-mark $id

$IPT -D FORWARD -s 0/0 -d 10.1.0.25/32 -j ACCEPT
$IPT -D FORWARD -d 0/0 -s 10.1.0.25/32 -j ACCEPT

наверное ты имел в виду "$IPT -A"

Cообщение объединено 16 Декабря 2015, 19:50:41
Почему трафик маркируете по-разному?
нет разной маркировки, просто
в iptables значения передаются в 10-чном виде, а в выводе  htb stats  эти же метки отображаются в 16-ричном
« Последнее редактирование: 16 Декабря 2015, 19:50:41 от viking »
Debian squeez (Linux 2.6.32-5-686 i686 GNU/Linux), GDM 2.30.5
 

Оффлайн viking

  • Пользователь
  • *
  • Сообщений: 16
  • Jabber: vik_k@jabber.ru
Re: iptables + tc -> проблема нарезки скорости
« Ответ #3 : 15 Января 2016, 14:35:12 »
Блин ребята ну неужели никто ничего не подскажет?
Debian squeez (Linux 2.6.32-5-686 i686 GNU/Linux), GDM 2.30.5
 

Онлайн gardarea51

Re: iptables + tc -> проблема нарезки скорости
« Ответ #4 : 15 Января 2016, 20:25:48 »
А зачем для такого фильтра вообще нужна маркировка, используйте классификатор u32. Кароче классифицируйте трафик самим шейпером.
К тому же в шейпере для htp у васне указан ceil, только rate, я не уверен, но меби дело в этом.
И да, какую литературу читали перед ваянием шейпера?
 

Оффлайн viking

  • Пользователь
  • *
  • Сообщений: 16
  • Jabber: vik_k@jabber.ru
Re: iptables + tc -> проблема нарезки скорости
« Ответ #5 : 16 Февраля 2016, 12:55:25 »
Цитировать
А зачем для такого фильтра вообще нужна маркировка, используйте классификатор u32. Кароче классифицируйте трафик самим шейпером.
Да вы правы так действительно удобнее, а самое главное нет этого неясного глюка с входящей скоростью трафика.

Но возникает другая интересная ситуация если подобным же методом нарезать скорость исходящую, то ничего не выходит. На сколько понял связанно это с NAT-ом. Дело в том что шейпер отрабатывает уже после преобразований серых IP в Белые. а значит в правиле для исходящего трафика должен участвовать внешний IP и он один для всех. И как следствие не получается разграничить исходящую скорость меду  разными клиентскими машинами.

На данный момент все работает так:

# Маркируем исходящий трафик
$IPT -t mangle -A FORWARD -s $IP -j MARK --set-mark $mark1

#Upload
$tc class  add dev $IFUP parent 1:2 classid 1:$mark1 htb rate $UPSPEED$SCOUNT
$tc filter add dev $IFUP parent 1: protocol ip prio 3 handle $mark1 fw classid 1:$mark1

#Download
$tc class  add dev $IFDOWN      parent 1:0      classid 1:$mark         htb rate $SPEED$SCOUNT burst 4k prio 1
$tc qdisc  add dev $IFDOWN      parent 1:$mark  handle $mark:           sfq perturb 10 quantum 1500
$tc filter add dev $IFDOWN      parent 1:0      protocol ip prio $mark  u32 match ip dst $IP flowid 1:$mark

Вопрос можно ли это сделать еще более красиво?

Цитировать
К тому же в шейпере для htp у васне указан ceil, только rate, я не уверен, но меби дело в этом.
Нет если параметр ceil не указывается, то он принимается равным rate

Цитировать
И да, какую литературу читали перед ваянием шейпера?
Большей частью форумы и хабр. Вообще для меня эта тема до сих пор является весьма темной.
Debian squeez (Linux 2.6.32-5-686 i686 GNU/Linux), GDM 2.30.5
 

Онлайн gardarea51

Re: iptables + tc -> проблема нарезки скорости
« Ответ #6 : 17 Февраля 2016, 14:35:38 »
Почитайте "повесть о linux и управлении трафиком".
Есть еще интересная литература, забыл название, но тоже довольно старенькая.

Насчет нарезки исходящего, да, тут видимо только метками iptables.
 

Теги:
     

    iptables Debian Wheezy

    Автор Alex-West

    Ответов: 3
    Просмотров: 1992
    Последний ответ 20 Июня 2014, 22:05:29
    от 315th
    Все тот же iptables

    Автор 196223580

    Ответов: 0
    Просмотров: 1374
    Последний ответ 11 Февраля 2015, 17:08:11
    от 196223580
    iptables - баг или я чего-то не понимаю.

    Автор m90125

    Ответов: 0
    Просмотров: 979
    Последний ответ 07 Декабря 2017, 23:59:53
    от m90125
    iptables не пропускает почту

    Автор timbird

    Ответов: 0
    Просмотров: 1774
    Последний ответ 26 Апреля 2012, 17:59:21
    от timbird
    пытаюсь разобраться в iptables правилах

    Автор mitiya

    Ответов: 6
    Просмотров: 2175
    Последний ответ 14 Мая 2013, 04:11:16
    от yura_n