[Решено] Динамический шэйпинг

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
tuupic
Сообщения: 197
ОС: Gentoo

[Решено] Динамический шэйпинг

Сообщение tuupic »

Вообщем у меня такой вопрос:
Есть шлюз. Есть 2 юзера. У одного юзера 2 компа, у другого 1. IP статические. Есть канал в интернет. Нужно его резать по скорости пополам. Но не просто резать, а динамически. То есть, если идут пакеты от(или к ним) обоих юзеров, то нужно, чтобы канал делился пополам. Если, допустим, в течении 5 минут от одного из юзеров пакеты перестают идти(за исключением аськи), то нужно отдать всю ширину канала другому юзеру. Как только от первого опять пошли пакеты, то вернуть разделение канал.
Посоветуйте что-нибудь, пожалуйста. Осью не ограничен. То есть могу поставить на шлюз как linux, так и freeBSD. В зависимости от того, в какой оси это проще сделать. Заранее спасибо
Не ПИНГВИН, зато летаю!!!

home: Gentoo; laptop: Gentoo; server: FreeBSD 7.1
KDE 4.2.
мой блог
Спасибо сказали:
alfss
Сообщения: 262

Re: [Решено] Динамический шэйпинг

Сообщение alfss »

http://www.openbsd.org/faq/pf/queueing.html к примеру

hfsc Hierarchical Fair Service Curve.

man pf.conf
Спасибо сказали:
10puu
Сообщения: 20

Re: [Решено] Динамический шэйпинг

Сообщение 10puu »

Вот те готовое решение
ADSL - eth1 - linux - eth0 - локалка.
Отпишись че получится
Мне просто самому интересно
У меня несколько посложнее была задачка - еще не до конца решил...

Код: Выделить всё

#!/bin/sh

DEV=eth0 # смотрит в локалку
RATE=460 # у меня канал 512 - 10% = 460 - обязательно надо указывать несколько меньше.
BURST="burst $[$RATE*1000/800]"
CIR=$[$RATE/2]
IP1=192.168.0.101
IP2=192.168.0.102

tc qdisc del dev $DEV root    2> /dev/null > /dev/null

#с оздаем очередь
tc qdisc add dev $DEV root handle 1: htb

# пилим на полосы
tc class add dev $DEV parent 1: classid 1:1 htb rate ${RATE}kbit ceil ${RATE}kbit $BURST
tc class add dev $DEV parent 1:1 classid 1:10 htb rate ${CIR}kbit ceil ${RATE}kbit $BURST
tc class add dev $DEV parent 1:1 classid 1:11 htb rate ${CIR}kbit ceil ${RATE}kbit $BURST

# фильтруем
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip dst $IP1 flowid 1:10
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip dst $IP2 flowid 1:11

# добавляем очереди
tc qdisc add dev $DEV parent 1:10 handle 20: sfq perturb 10
tc qdisc add dev $DEV parent 1:11 handle 30: sfq perturb 10


мона еще кое какие правила и для eth1 добавить и там раздать приоритеты для игр, почты, icq, web, ftp и тд.
вообщем проверяй
Спасибо сказали:
Аватара пользователя
tuupic
Сообщения: 197
ОС: Gentoo

Re: [Решено] Динамический шэйпинг

Сообщение tuupic »

Спасибо обоим. Сейчас поставил FreeBSD. Обновлю до 7.0 и буду пробовать с pf.
Не ПИНГВИН, зато летаю!!!

home: Gentoo; laptop: Gentoo; server: FreeBSD 7.1
KDE 4.2.
мой блог
Спасибо сказали:
alfss
Сообщения: 262

Re: [Решено] Динамический шэйпинг

Сообщение alfss »

на freebsd pf перенесен не в полной мере
учтите это
Спасибо сказали:
Аватара пользователя
tuupic
Сообщения: 197
ОС: Gentoo

Re: [Решено] Динамический шэйпинг

Сообщение tuupic »

alfss писал(а):
19.04.2008 17:31
на freebsd pf перенесен не в полной мере

Знаю. Попытка - не пытка :)
Не ПИНГВИН, зато летаю!!!

home: Gentoo; laptop: Gentoo; server: FreeBSD 7.1
KDE 4.2.
мой блог
Спасибо сказали:
Аватара пользователя
tuupic
Сообщения: 197
ОС: Gentoo

Re: [Решено] Динамический шэйпинг

Сообщение tuupic »

Вот мой конфиг pf.conf Может, поможет кому. ОС FreeBSD 7.0

Код:

# $FreeBSD: src/etc/pf.conf,v 1.2.2.1 2006/04/04 20:31:20 mlaier Exp $ # $OpenBSD: pf.conf,v 1.21 2003/09/02 20:38:44 david Exp $ # ext_if="dc0" # replace with actual external interface name i.e., dc0 int_if="vr0" # replace with actual internal interface name i.e., dc1 internal_net="192.168.0.0/24" set loginterface $ext_if # Tables: similar to macros, but more flexible for many addresses. table <lan> { 192.168.0.0/24 } table <my> { 192.168.0.0/24, 82.146.32.0/19 } table <me> { 192.168.1.10, 91.185.48.86, 192.168.0.1 } table <user1_ips> { 192.168.0.2, 192.168.0.5 } table <user2_ips> { 192.168.0.3 } # Normalization: reassemble fragments and resolve or reduce traffic ambiguities. scrub in all # Queueing: rule-based bandwidth control. altq on $int_if cbq bandwidth 100Mb queue { inet_in, default_in } queue inet_in bandwidth 240Kb { user1_in, user2_in } queue user1_in bandwidth 50% cbq(red, borrow) queue user2_in bandwidth 50% cbq(red, borrow) queue default_in bandwidth 99% cbq(default) altq on $ext_if cbq bandwidth 100Mb queue { inet_out, default_out } queue inet_out bandwidth 500Kb { user1_out, user2_out } queue user1_out bandwidth 50% cbq(red, borrow) queue user2_out bandwidth 50% cbq(red, borrow) queue default_out bandwidth 99% cbq(default) #NAT nat on $ext_if from $internal_net to !<lan> -> ($ext_if) #filtering block in quick proto tcp from !<my> to <me> port { 21, 22 } # assign packets to a queue. pass out on $int_if from !<lan> to <user1_ips> queue user1_in no state pass out on $int_if from !<lan> to <user2_ips> queue user2_in no state pass in on $int_if from <user1_ips> to !<lan> queue user1_out no state pass in on $int_if from <user2_ips> to !<lan> queue user2_out no state

Для 7-й Фри "NO STATE" обязательны. Иначе в очереди пакеты лезть не будут.

Собственно фильтр всего один потому что сижу я ADSL роутером, в котором открыто всего 2 порта.
Не ПИНГВИН, зато летаю!!!

home: Gentoo; laptop: Gentoo; server: FreeBSD 7.1
KDE 4.2.
мой блог
Спасибо сказали: