Страница 1 из 1

FreeBSD. Управление трафиком.

Добавлено: 2008-08-22 20:20:44
legoprog
Вобщем стоит такая задача. Есть сервак под БСД, через который проходит весь траф сети малого офиса в инет. Нужно реализовать такую задачу.
Чтобы Сервак качал из инета постоянно допустим торренты. При обращение клиента(ов), сервак обрубает скоость торрентам и отдает весь канал клиенту(ам). Желательно сделать это на уровне tcp. Чтобы можно быо полноценно использовать инет клиентам.
В какую сторону посоветуете капать ?

P.S.
Торренты - Это пример.. Сервак может по своему использовать траф, главное чтобы клиенты не замечали, что канал загружен.

Re: FreeBSD. Управление трафиком.

Добавлено: 2008-08-22 20:27:36
zingel
главное чтобы клиенты не замечали, что канал загружен
Силами ipfw наверняка можно решить + простой скрипт

Re: FreeBSD. Управление трафиком.

Добавлено: 2008-08-22 20:29:13
legoprog
zingel писал(а):
главное чтобы клиенты не замечали, что канал загружен
Силами ipfw наверняка можно решить + простой скрипт
Как отслеживать входящие подключения к Серваку, направленные в инет ???

Може кто знает готовые приложения\решения ?

Re: FreeBSD. Управление трафиком.

Добавлено: 2008-08-22 20:42:32
LMik
legoprog писал(а):
zingel писал(а):
главное чтобы клиенты не замечали, что канал загружен
Силами ipfw наверняка можно решить + простой скрипт
Как отслеживать входящие подключения к Серваку, направленные в инет ???

Може кто знает готовые приложения\решения ?
ipfw готовое приложение\решение

Re: FreeBSD. Управление трафиком.

Добавлено: 2008-08-22 22:51:32
uHk
в altq есть очереди, в них borrow
если я не ошибаюсь можно сделать очереди таких образом, чтобы серверу выделить канал 1кбс с наименьшим приоритетом, но при этом дать ему borrow.
как вам задумка, господа гуру?

Re: FreeBSD. Управление трафиком.

Добавлено: 2008-08-22 23:00:35
zingel
зачем такой геморой? Всё делается просто - dummynet

Re: FreeBSD. Управление трафиком.

Добавлено: 2008-08-23 2:13:27
uHk

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

altq on $ext_if cbq bandwidth 1Mb queue { server, users }
queue users cbq(default)
queue server bandwidth 1% cbq(borrow)

pass in on $int_if from 192.168.1.1 to any queue users
pass out on $ext_if from self to any queue server
поправьте, если что-то не так. недавно начал изучение pf, самому интересно

Re: FreeBSD. Управление трафиком.

Добавлено: 2008-08-24 1:41:44
harmless
Все гениальное просто!!!
Просто загони в очереди всех юзверей в ipfw с наибольшим приоритетом
а сервак в другую- с наименьшим!
Вот и все проблемы :-D

Re: FreeBSD. Управление трафиком.

Добавлено: 2008-08-24 1:44:44
zingel
Да!!!Круто, гиниальна, шикарна!!!!
Потом у него кончатся сокеты и сервак упадёт!!! Да!!!

=)

Re: FreeBSD. Управление трафиком.

Добавлено: 2008-08-24 11:40:53
LMik
zingel писал(а):Да!!!Круто, гиниальна, шикарна!!!!
Потом у него кончатся сокеты и сервак упадёт!!! Да!!!

=)
o_O чо?

Re: FreeBSD. Управление трафиком.

Добавлено: 2008-08-24 21:48:25
zingel
Просто загони в очереди всех юзверей в ipfw с наибольшим приоритетом
а сервак в другую- с наименьшим!
нельзя так делать, потому, что кончаться свободные цепочки

Re: FreeBSD. Управление трафиком.

Добавлено: 2008-08-25 7:07:39
uHk
в altq тоже такое может произойти?

Re: FreeBSD. Управление трафиком.

Добавлено: 2008-08-25 13:24:35
zingel
нет

Re: FreeBSD. Управление трафиком.

Добавлено: 2008-08-25 13:51:49
hizel
ээ какие проблемы, создаем трубу с bw аплинка
в ней создаем предположим три очереди с разными приоритетами
1. доступ к серваку - самое приоритетное
2. трафик клиентво - средний приоритет
3. трафк с сервака - низший приоритет

Re: FreeBSD. Управление трафиком.

Добавлено: 2008-10-03 14:47:14
legoprog
hizel писал(а):ээ какие проблемы, создаем трубу с bw аплинка
в ней создаем предположим три очереди с разными приоритетами
1. доступ к серваку - самое приоритетное
2. трафик клиентво - средний приоритет
3. трафк с сервака - низший приоритет
Если можно тут по подробнее. Примерный скрипт или что почитать. ;-)

Re: FreeBSD. Управление трафиком.

Добавлено: 2008-10-04 9:12:18
legoprog
Вобщем капал вчера весь вечер эту тему. Вроде бы даже понял. Но вот проблема. Траф не режет :(

/etc/rc.conf

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

gateway_enable="YES"
firewall_enable="YES"
firewall_script="/usr/local/etc/rc.firewall"
natd_enable="YES"
natd_interface="tun0"
natd_flags="-dynamic"
После долгих эксперементов. Просто взял тестовую машину и сервак.
Тестовая машина - 192.168.1.3
Сервак - 192.168.1.100

И написал такое правило :

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

[root@legoprog ~]# cat /usr/local/etc/rc.firewall 
#!/bin/sh                                         
ipfw='/sbin/ipfw -q'                              

mynet='192.168.1.0/24'
extip='10.8.0.34'     
intip='192.168.1.100' 

intface='vr0'
extface='tun0'




${ipfw} -f flush
${ipfw} -f pipe flush
${ipfw} -f queue flush
${ipfw} add divert natd all from ${mynet} to any via ${extface}
${ipfw} add divert natd all from any to ${extip} via ${extface}
${ipfw} add allow  all from any to any



${ipfw} pipe 1 config bw 1024Kbit/s
#${ipfw} queue 1 config pipe 1 weight 20 mask dst-ip 0x00000000
#${ipfw} queue 2 config pipe 1 weight 80 mask dst-ip 0x00000000
#${ipfw} add queue 1 ip from any to me
#${ipfw} add queue 1 ip from any to ${mynet}

${ipfw} queue  1 config pipe 1 weight 80 queue 20  mask dst-ip 0xffffffff
${ipfw} queue 11 config pipe 1 weight 80 queue 20  mask src-ip 0xffffffff

${ipfw} queue  2 config pipe 1 weight 20 queue 20 mask dst-ip 0xffffffff
${ipfw} queue 21 config pipe 1 weight 20 queue 20 mask src-ip 0xffffffff

${ipfw} add queue  1 ip from any to 192.168.1.3
${ipfw} add queue 11 ip from 192.168.1.3 to any

${ipfw} add queue  2 ip from any to any
${ipfw} add queue 21 ip from any to any


В итоге что мы имеем:

Ставлю на серваке закачку в 5 потоков - Жарит по полной.
НА тестовой машине ставлю закачку в 1 поток, нихрена, хотя должен по идее на тестовой жарить по полой, а серваку остатки отдавать...

И ещё момент:

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

ipfw pipe show
00001:   1.024 Mbit/s    0 ms   50 sl. 0 queues (1 buckets) droptail
q00001: weight 80 pipe 1   20 sl. 0 queues (64 buckets) droptail
q00002: weight 20 pipe 1   20 sl. 0 queues (64 buckets) droptail
q00021: weight 20 pipe 1   20 sl. 0 queues (64 buckets) droptail
q00011: weight 80 pipe 1   20 sl. 0 queues (64 buckets) droptail

Вот такое вот мне показывает комманда ipfw pipe show, во время закачки с тестовой машины и с сервака,хотя на сколько я понимаю должно быть что-то ещё.


Ядро скомпилено с поддержкой Думми. Если бы небыло скомпилено, думаю ipfw правила бы и не принимал, или ошибку выдавал..

Вот такие вот дела. Как вы считаете, что я делаю не так ?

Re: FreeBSD. Управление трафиком.

Добавлено: 2008-10-04 9:16:55
legoprog
Ссори. Затупил. ;-)

Надо было просто правила :

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

${ipfw} add divert natd all from ${mynet} to any via ${extface}
${ipfw} add divert natd all from any to ${extip} via ${extface}
${ipfw} add allow  all from any to any
Запихать в конец, по сколько у меня правила не пронумерованы ;-) Все равно примного благодарен ;-)