Linux за българи: Форуми

Linux секция за напреднали => Хардуерни и софтуерни проблеми => Темата е започната от: uBoTo в Dec 03, 2012, 15:59



Титла: Шейпър на 1 устройство за download+upload и контрол на скоростите по IP адрес
Публикувано от: uBoTo в Dec 03, 2012, 15:59
Здравейте! Преди години ползвах следния шейпър за ограничаване на download+upload скоростите на потребителите в една малка мрежа:
Код:
# eth1 - WAN; eth2 - LAN
#
tc qdisc add dev eth1 root handle 1: htb default 2 r2q 1
tc class add dev eth1 parent 1: classid  1:1 htb rate 128kbps ceil 128kbps
tc class add dev eth1 parent 1:1 classid 1:2 htb rate 3kbps ceil 30kbps                                                                                                                                         
tc filter add dev eth1 parent 1:0 prio 0 protocol ip handle 2 fw flowid 1:2
iptables -A PREROUTING -t mangle -i eth2 -s 192.168.0.2 -j MARK --set-mark 2
#
tc qdisc add dev eth2 root handle 2: htb default 2 r2q 1
tc class add dev eth2 parent 2: classid  2:1 htb rate 1024kbps ceil 1024kbps
tc class add dev eth2 parent 2:1 classid 2:2 htb rate 28kbps ceil 256kbps
tc filter add dev eth2 parent 2:0 prio 0 protocol ip handle 102 fw flowid 2:2
iptables -A POSTROUTING -t mangle -o eth2 -d 192.168.0.2 -j MARK --set-mark 102

Вършеше чудесна работа, но в случая ми трябва нещо по-различно. Използвам Slackware, имам 3 мрежови устройства и искам да използвам този скрипт само за едно от тях. С други думи казано, искам да приложа правилата за входящия и изходящия трафик само на едното устройство, като не се използва никакъв допълнителен софтуер (ако е възможно). Търсих доста из интернет за нещо подобно, но не можах да намеря. За съжаление не съм експерт в правилата, класовете и всичко, свързано с tc, htb, cbq. Ще се радвам ако споделите опита си, за да мога да се справя с проблема.

П.П.: Друга идея за това устройство, освен шейпа, е да спра и достъпа до торент сайтове, но е като идея и не съм търсил конкретно решение. Ако някой има конкретно предложение, моля да го сподели. Предварително благодаря на отзовалите се.


Титла: Re: Шейпър на 1 устройство за download+upload и контрол на скоростите по IP адрес
Публикувано от: dejuren в Dec 03, 2012, 20:27
Аз имам едно конкретно безкрайно тъпо възможно решение, което е да включиш още един комп към тоя клон зад канала който ти трябва и да шейп-ваш там. Като компът спокойно може да е виртуална машина, инсталирана на главния комп.


Титла: Re: Шейпър на 1 устройство за download+upload и контрол на скоростите по IP адрес
Публикувано от: uBoTo в Dec 03, 2012, 20:35
Предложението се отхвърля. Мрежата, която искам да шейпвам е с тестови цели за широк кръг от потребители, които искам да мога да огранича. Поради това не смеятам да влагам излишни ресурси. Ако използвам компютър или виртуална машина, приложените правила щяха да работят, но както казах, не това е идеята. Благодаря за предложението все пак.


Титла: Re: Шейпър на 1 устройство за download+upload и контрол на скоростите по IP адрес
Публикувано от: Drago_ в Dec 03, 2012, 22:37
Потърси за IMQ :)


Титла: Re: Шейпър на 1 устройство за download+upload и контрол на скоростите по IP адрес
Публикувано от: uBoTo в Dec 04, 2012, 00:05
Както споменах не искам допълнителен софтуер, а за IMQ (видях го като вариант докато се рових за решение на проблема) трябва да прекомпилирам. Колега от друг форум ме насочи към:
Код:
tc qdisc add dev eth2 handle ffff: ingress
tc filter add dev eth2 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate 1mbit burst 128k drop flowid :1
Този код използвам само за ъплоуд трафикал Само, че шейп-ването не е много точно (вдига над зададената скорост и после пада до ограничението). Това не е такъв проблем, но не успях да измисля как да контролирам ъплоуд трафика на отделните потребители - как да маркирам пакетите. Идеята ми е да имам възможност да споделям максимално възможната скорост (от доставчика ми) или възможно по-висока за избрани от мен IP адреси.


Титла: Re: Шейпър на 1 устройство за download+upload и контрол на скоростите по IP адрес
Публикувано от: Drago_ в Dec 04, 2012, 00:53
Вариантите тогава са 2.

1. ipfw за линукс /да ще компилираш, но само userspace + kernel module/ при мен не работи така както на bsd.
2. вдигаш един tun device и прекарваш трафика на двете ланки през него, но е малко ... поне мен не ме кефи, но работи :)


Титла: Re: Шейпър на 1 устройство за download+upload и контрол на скоростите по IP адрес
Публикувано от: uBoTo в Dec 04, 2012, 11:04
Drago_ , много ти блаодаря за предложенията. Първото за сега отпада, а относнов второто - бях опитал да направя бридж, но идеята се провали. Не успях да се справя с маркирането на пакетите (пак за ъплоуд трафика). Използвах скрипта, който показах (когато имам 2 лан карти). Създадох br0 и приложих скрипта за това устройство - без успех, защото предполагам не се маркираха пакетите. След това видях, че за бридж има ebtables и се опитах така да ги маркирам - пак без успех. Може и аз да не съм описал правилата като хората, а може и с бридж да не може да се получи. Ако някой има идея дали и как да стане с бридж - нека да сподели. Относно тунела - бях търсил първо за него из нета, но не успях да намеря как да изградя тунел и не ми е ясно въобще как да стане.  ::)

П.П.: Изграждането на бридж и шейпинга го видях тук - http://ebtables.sourceforge.net/examples/example5.html ($2). Доста интересен скрипт, но нещо не можах да го приложа при мен.  ???


Титла: Re: Шейпър на 1 устройство за download+upload и контрол на скоростите по IP адрес
Публикувано от: samiboy в Dec 13, 2012, 09:40
Код
GeSHi (Bash):
  1. tc qdisc del dev $DEV1 root 2>/dev/null
  2. tc qdisc add dev $DEV1 root handle 1 htb r2q 625 default 65
  3. tc class add dev $DEV1 parent 1: classid 1:1 htb rate 1000Mbit
  4. tc qdisc del dev $DEV1 handle ffff: ingress 2>/dev/null
  5. tc qdisc add dev $DEV1 handle ffff: ingress
  6.  
  7. tc class add dev $DEV1 parent 1:1 classid 1:$UP htb rate $SPEED1_IN burst 2Mbit
  8. tc filter add dev $DEV1 parent 1: protocol all prio 1 u32 match ip dst $IP classid 1:$UP
  9. tc qdisc add dev $DEV1 parent 1:$UP handle $UP: sfq
  10. tc filter add dev $DEV1 parent ffff: protocol all prio 20 u32 match \
  11. ip src $IP police rate $SPEED1_OUT burst 1Mbit drop flowid :$UP