Автор Тема: Шейпър на 1 устройство за download+upload и контрол на скоростите по IP адрес  (Прочетена 2977 пъти)

uBoTo

  • Участници
  • ***
  • Публикации: 6
  • Distribution: Slackware
  • Window Manager: KDE
    • Профил
Здравейте! Преди години ползвах следния шейпър за ограничаване на 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. Ще се радвам ако споделите опита си, за да мога да се справя с проблема.

П.П.: Друга идея за това устройство, освен шейпа, е да спра и достъпа до торент сайтове, но е като идея и не съм търсил конкретно решение. Ако някой има конкретно предложение, моля да го сподели. Предварително благодаря на отзовалите се.
« Последна редакция: Dec 03, 2012, 16:05 от uBoTo »
Активен

dejuren

  • Напреднали
  • *****
  • Публикации: 1025
  • Distribution: Ubuntu, RedHat
  • Window Manager: lxde KDE4
    • Профил
Аз имам едно конкретно безкрайно тъпо възможно решение, което е да включиш още един комп към тоя клон зад канала който ти трябва и да шейп-ваш там. Като компът спокойно може да е виртуална машина, инсталирана на главния комп.
Активен

http://webchat.freenode.net/?channels=ubuntu-bg
The quieter you become, the more you are able to hear.
Две седмици цъкане с мишката спестяват два часа четене на документацията.

uBoTo

  • Участници
  • ***
  • Публикации: 6
  • Distribution: Slackware
  • Window Manager: KDE
    • Профил
Предложението се отхвърля. Мрежата, която искам да шейпвам е с тестови цели за широк кръг от потребители, които искам да мога да огранича. Поради това не смеятам да влагам излишни ресурси. Ако използвам компютър или виртуална машина, приложените правила щяха да работят, но както казах, не това е идеята. Благодаря за предложението все пак.
Активен

Drago_

  • Напреднали
  • *****
  • Публикации: 34
    • Профил
Активен

uBoTo

  • Участници
  • ***
  • Публикации: 6
  • Distribution: Slackware
  • Window Manager: KDE
    • Профил
Както споменах не искам допълнителен софтуер, а за 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 адреси.
Активен

Drago_

  • Напреднали
  • *****
  • Публикации: 34
    • Профил
Вариантите тогава са 2.

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

uBoTo

  • Участници
  • ***
  • Публикации: 6
  • Distribution: Slackware
  • Window Manager: KDE
    • Профил
Drago_ , много ти блаодаря за предложенията. Първото за сега отпада, а относнов второто - бях опитал да направя бридж, но идеята се провали. Не успях да се справя с маркирането на пакетите (пак за ъплоуд трафика). Използвах скрипта, който показах (когато имам 2 лан карти). Създадох br0 и приложих скрипта за това устройство - без успех, защото предполагам не се маркираха пакетите. След това видях, че за бридж има ebtables и се опитах така да ги маркирам - пак без успех. Може и аз да не съм описал правилата като хората, а може и с бридж да не може да се получи. Ако някой има идея дали и как да стане с бридж - нека да сподели. Относно тунела - бях търсил първо за него из нета, но не успях да намеря как да изградя тунел и не ми е ясно въобще как да стане.  ::)

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

samiboy

  • Напреднали
  • *****
  • Публикации: 66
    • Профил
Код
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
« Последна редакция: Dec 13, 2012, 09:42 от samiboy »
Активен