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

Шейпер для процесса

Добавлено: 2008-03-20 22:31:05
void*
Всем привет.
Тихо-мирно крутилась 6.2 пока не решил обновить до 7.0, для повторения пройденного материала решил устанавливать и настраивать все с нуля. И в конце напоролся на следующие грабли. Сначала расскажу немного о топологии сети. Стоит mpd5 и конектится к прову, к нему же (mpd5) конектятся юзвери. Кроме того на сервере стоит mldonkey и жутко качает фильмы. Задача была следующей: затянуть mldonkey в общий шейпер с юзерами и дать его очереди минимальный приоритет чтобы с одной стороны он не зохавал всю полосу под себя, и чтоб качал без ограничений когда юзеры спят.
Тоесть нужны правила в ipfw "для процесса".
В шестерке это решалось следующим образом: осла я запускал под отдельным юзером и правила в ipfw делал для uid типа так:

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

ipfw add queue 10 all from me to any via ng0 out uid mlnet
ipfw add queue 11 all from any to me via ng0 in   uid mlnet
При этом приходилось в loader.conf ставить debug.mpsafenet=1 (или 0, не помню) чтобы избежать глухого зависона.
Но теперь в Фряхе 7.0 переменную debug.mpsafenet убрали, т.к. избавились от GIANT MUTEX, но глухой зависон при использовании uid/gid правил в ipfw остался!
Фильтровать по портам неохота, слишком уж их много. Засунуть в шейпер весь траф от сервака наружу (тот что не попал к юзерам в предыдущих правилах) - тоже както криво... Помогите советом. Может както сделать виртуальный интерфейс на который посадить mldonkey и продублировать в него траф, или как... Не силен я в этом.
Система:

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

gate# uname -a
FreeBSD gate.local 7.0-RELEASE FreeBSD 7.0-RELEASE #4: Wed Mar 19 00:53:23 EET 2008     root@gate.local:/usr/obj/usr/src/sys/VOIDKRNL  i386

Re: Шейпер для процесса

Добавлено: 2008-03-20 23:38:01
hizel
гугел врет
Если речь идет действительно о большом трафе и сервер SMP, то:
sysctl debug.mpsafenet=0
Баг присутствует вплоть до 6.x

Re: Шейпер для процесса

Добавлено: 2008-03-21 0:06:54
void*
hizel писал(а):гугел врет
Если речь идет действительно о большом трафе и сервер SMP, то:
sysctl debug.mpsafenet=0
Баг присутствует вплоть до 6.x
гугел действительно врет

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

gate# sysctl -da | grep mpsafe
debug.mpsafevfs: MPSAFE VFS
gate#
в семерке этой переменной действительно нету. а kernel dead-lock от шестерки осталсооо :( это проверено многократно - с правилами фаера по uid/gid фряха работает максимум час, потом глухой зависон. реагирует только на кнопку выключения питания :)))
ничего в голову не приходит. как можно фаерволить процесс, если по uid/gid нельзя? в голову приходит только одно - както создать виртуальный интерфейс и посадить качалку на него, а потом фаерволить уже по интерфейсу. но как такое забабахать?..
вот если б както на шлюзе подключится к его же ВПН серверу чтобы создался еще один нетграф интерфейс, и на него уже посадить осла... тогда он будет иметь свой интерфейс, правда будет за НАТ-ом, но в принципе можна пробросить порты... попахиваэт садомазохизмом :)
помогите плс, моск уже закипает :(

Re: Шейпер для процесса

Добавлено: 2008-03-21 3:33:12
void*
Вобщем кому интересно, может пригодится. Все работает на ура, заодно с netgraph немного разобрался. Получилось вот таким макаром:

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

# создаем виртуальный ethernet интерфейс ngeth0
ngctl mkpeer eiface ether ether
# настраиваем....
ifconfig ngeth0 10.0.0.254 netmask 255.255.255.255
# в настройках mldonkey приказываем ему слушать на 10.0.0.254
# настраиваем NAT на наш свежеиспеченный интерфейсик
# с пробросом портов емуля и битторента на внутренний адрес:
# п.с.: на 10.0.0.х сидят юзвери, а на виртуальном интерфейсе 10.0.0.254 сидит наш mldonkey

# в table(1) не только подсеть 10.0.0.0/24, остальное просто вырезал
ipfw table 1 add 10.0.0.0/24

# конфиг ядерного NAT для FreeBSD 7.0
ipfw nat 100 config if ng0 reset unreg_only \
  redirect_port tcp 10.0.0.254:6882 6882 \
  redirect_port tcp 10.0.0.254:6881 6881 \
  redirect_port tcp 10.0.0.254:4223 4223 \
  redirect_port udp 10.0.0.254:4227 4227

# заганяем в него трафик
ipfw add 2000 nat 100 all from table(1) to any via ng0 out
ipfw add 2010 nat 100 all from any to me via ng0 in
Вот теперь mldonkey легко затягивается в шейпер по своему IP адресу 10.0.0.254 и для полного блеска порты протоколов выброшены наружу!
п.с. Фряха я тебя люблю!

Re: Шейпер для процесса

Добавлено: 2008-03-21 9:16:45
hizel
вах вах
/me взял на заметку

Re: Шейпер для процесса

Добавлено: 2008-03-21 20:07:13
NoResponse
угу, познавательно

Re: Шейпер для процесса

Добавлено: 2008-05-12 15:55:31
freeman
NoResponse писал(а):угу, познавательно
Угу, тоже познавательно. Лишний раз убедился что не зря выбрал PF вместо IPWF и не знал даже что от правил фаера с uid/gid могут быть проблемы (активно их юзаю) :D