Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> настройка —> ALTQ в IPFW

ALTQ в IPFW

Автор: Covax.


Предистория. Работа у нас сложная и напряжённая, о чём свидетельствуют протёртые клавиши W A S D на клавиатуре, а канал в инет не резиновый (к нашему всеобщему сожалению). Загвоздка состояла в том, что когда начинали активно серфить или кто-то осмеливался ещё и качать, то пинг в любой игре подскакивал до неприлично больших значений, ну и конечно большая вероятность дисконекта. На шлюзе стоит FreeBSD 7.0 Release с настроенным ipfw и претензий к нему нет. Именно поэтому при возникновении необходимости в altq я полез копаться в pf. Настроил, всё прекрасно заработало. Косяк вылез при редиректе на squid из-за того, что в FreeBSD 7 в pf по умолчанию включен keep state, а в rdr он не убирается. Убил неделю, но, как говорится: "А ларчик то просто открывался!". Настроенный ipfw переводится на работу с ALTQ за несколько минут.
Теперь по порядку:
Естественно надо ядро с поддержкой ALTQ, а именно:
options		ALTQ
options		ALTQ_CBQ
options		ALTQ_RED
options		ALTQ_RIO
options		ALTQ_HFSC
options		ALTQ_CDNR
options		ALTQ_PRIQ
options		ALTQ_NOPCC #нужен для для SMP
options		ALTQ_DEBUG

PF (можно модулем подгружать, но не пробовал) для добавления очередей ALTQ (ipfw сам не умеет):
device		pf #обязательно
device		pflog #остальное по желанию
device		pfsync

Правим /etc/rc.conf и добавляем:
pf_enable="YES"
pf_rule="/etc/pf.conf"

В /etc/pf.conf только включаем altq и прописываем очереди.
altq on $ext_if bandwidth 1000Kb priq queue {def_out, game_out}
  queue def_out priority 1 priq(default red)
  queue game_out priority 5 priq(red)

altq on $int_if bandwidth 1000Kb cbq queue {def_in, game_in}
  queue def_in bandwidth 872Kb cbq(default borrow red)
  queue game_in bandwidth 128Kb priority 7 cbq(borrow red)

Подробно очереди описывать не буду, в интернете множество примеров.
Ну и теперь надо завернуть в очереди трафик из ipfw. При настроенном ipfw, делается это очень удобно через конструкцию count
ipfw add 1 count altq game_out all from any to any 8112 out via $ext_if
ipfw add 2 count altq game_in all from any 8112 to any out via $int_if
...

Ну и т.д. Все, кто не попал в очередь идут в дефолтную.

Для удобства ставим pftop и радуемся работе ALTQ в ifpw.

З.Ы. Замечания по man`у ipfw. При попадании пакета в несколько очередей срабатывает первое. Заворачивать в очереди надо до check-state и keep-state.

Ну, вот, как-то так...

Литература:
FAQ по ALTQ (eng)
FAQ по ALTQ (rus)
Настройка PF (rus)
Полезно у кого асинхронный канал (eng)



размещено: 2008-05-20,
последнее обновление: 2008-05-20,
автор: Covax


artem, 2008-05-20 в 18:04:32

а можно список литературы?
ссылочки где на русском раскажут теорет подготовку
про такого зверя как ALTQ и опции ядра для него?

artem, 2008-05-20 в 18:13:39

понятно что в хэндбуке немного инфы есть

Covax, 2008-05-20 в 18:48:52

Кому лень искать добавил ссылки по altq. Наиболее полно описывается в FAQ`е, но там на ангельском, учите! :)

Covax, 2008-05-20 в 18:57:32

Кому и ангельский учить лень, нашел перевод (2 ссылка)

sergey, 2008-05-22 в 13:06:12

лучшеб без изврата просто про pf Написал:)

Dog, 2008-05-22 в 13:15:38

2sergey:
Написал же человек, почему ему pf неприемлим, читайте внимательно. Вот и приходится изголяться.

sergey, 2008-05-22 в 14:44:01

вот честно не понял почему Ipfw потому что уже настроено было? дык можно перенастроить:)

Dog, 2008-05-22 в 14:55:40

2sergey:
Косяк вылез при редиректе на squid из-за того, что в FreeBSD 7 в pf по умолчанию включен keep state, а в rdr он не убирается. - это недостаточное объяснение?

vladimir, 2008-05-22 в 15:17:08

Осталось привести,как выяснилось такое поведение с rdr

Covax, 2008-05-23 в 0:09:15

2vladimir: Если так интересно - http://forum.lissyara.su/viewtopic.php?f=8&t=8379

RaDiST_1977, 2008-06-08 в 16:07:48

на самом деле в 7-ке очень просто оключить keep state, установленный по дефолту
просто надо в конце каждого правила написать no state
и все=)

Covax, 2008-06-20 в 13:59:18

Сколько ещё человек скажет как всё просто решается?
А ты возьми и попробуй, и только потом говори.......

arch, 2009-02-25 в 15:02:50

FAQ по ALTQ (rus) - ссылка померла :(

KES, 2009-05-07 в 21:17:15

Примеры не верные, читайте ман:
The priq scheduler does not support bandwidth specification.

sasha181, 2009-05-15 в 4:54:37

FAQ по ALTQ (rus)
новая ссылка
http://docs.pcn.com.ua/Dreamcatcher.ru/pf-faq-part2-rus.htm

Dusya, 2010-07-01 в 18:08:13

а шлюзе стоит FreeBSD 7.0 Release с настроенным ipfw и претензий к нему нет. Именно поэтому при возникновении необходимости в altq я полез копаться в pf.

Dummynet надо ставить и юзать его в ipfw, а не заниматься нереальным онанизмом.

Александр, 2013-10-22 в 7:22:18

вот вичитал рекомендация
net.graph.maxdgram=8388608
net.graph.recvspace=8388608
kern.ipc.maxsockbuf=83886080
kern.ipc.nmbclusters=400000
net.inet.ip.intr_queue_maxlen=10240
net.inet.tcp.sendspace=128000
net.inet.tcp.recvspace=128000
#loader.conf
net.graph.maxdata=65536
net.graph.maxalloc=65536



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1281 секунд
Из них PHP: 51%; SQL: 49%; Число SQL-запросов: 77 шт.
Исходный размер: 20451; Сжатая: 6036