Страница 1 из 1
if_bridge + shaper
Добавлено: 2008-09-17 0:41:13
void*
Доброго времени суток.
Столкнулся с проблемой - необходимо затянуть в шейпер часть локального трафа, заходящего на сервер через отдельную сетевую карту и медленный канал. На сервере есть еще одна сетевая с которой она сбриджована - все компы в одной подсети. И тут проблема - шейпить траф на интерфейсе который сбриджован не получается никак. Через правила фаервола пакетики бегают далеко не все, скажем так 1% от реального их количества. Гугл дал пару ссылок где говорится что фаервол и в частности дамминет вообще не работают на бридже. Посмотрел статью тут на сайте - шейпера там нету. Прошу совета, может кто сталкивался... Юзаю ядерный if_bridge, может стоит с ng_bridge повозится?
Заранее спасибо

Re: if_bridge + shaper
Добавлено: 2008-09-17 8:56:32
hizel
вы как бридж фильтруете, и фильтруете ли вобще?
Re: if_bridge + shaper
Добавлено: 2008-09-17 10:34:53
void*
Бридж не фильтрую, раньше тот "медленный" (там WiFi) канал просто был воткнут в свич. Реально канал тянет около 15-16МБит но обладает одним неприятным свойством. Когда он его загрузка максимальна реско растет потеря пакетов, задержка и вообще линк начинает вести себя нестабильно. Решил пустить канал через сервер, ограничить средствами ipfw скорость, распределить трафик по приоритетам. Пропарился вчера весь вечер. Даже если первым правилом ставлю
Код: Выделить всё
allow all from any to any via rl0 in
allow all from any to any via rl0 out
(в rl0 воткнут тот самый WiFi)
и начинаю усиленно качать с ftp по WiFi то видно что во второе правило попало скажем сотня кб, хотя я скачал еже 10МБ. В первое итого меньше.
Пробовал включать в разных комбинациях три сисконтрола (уже сейчас не вспомню но два отвечают за фильтрацию на членах бриджа и на самом bridge0, третий net.link.bridge.ipfw кажется) не помагает
Фряха стоит обновленная недавно до 7.1-PRERELEASE
Делал все вроде стандартно:
потом
Код: Выделить всё
ifconfig bridge0 create
ifconfig bridge0 addm rl0 addm dc0 up
ifconfig dc0 10.0.20.200/24 polling up
ifconfig rl0 polling up
сам бридж работает, но через фаєр траф не ходит

Re: if_bridge + shaper
Добавлено: 2008-09-17 12:34:46
hizel
man if_bridge
раздел
PACKET FILTERING смотрели?

Re: if_bridge + shaper
Добавлено: 2008-09-17 12:55:21
void*
Смотрел, вот там есть такой интересный момент:
When filtering is enabled, bridged packets will pass through the filter inbound on the originating interface, on the bridge interface and outbound on the appropriate interfaces.
Исходя из написанного пробовал делать так:
Код: Выделить всё
add 10 count all from any to any recv rl0 xmit dc0
add 20 count all from any to any recv dc0 xmit rl0
sysctl net.link.bridge.pfil_member=1
тоже не работает

Re: if_bridge + shaper
Добавлено: 2008-09-17 13:20:00
hizel
раздел
PACKET FLOW в man ipfw смотрели?
на предмет net.link.ether.bridge_ipfw
а также
(yes, at the moment there is no way to differentiate between ether_demux and bdg_forward).
Re: if_bridge + shaper
Добавлено: 2008-09-17 13:36:07
void*
т.е. если говорить проще нифига из етой затеи не выйдет?

других методов я просто не знаю, как такое еще можно реализовать без бриджа?
Re: if_bridge + shaper
Добавлено: 2008-09-17 13:57:19
void*
Я просто не уверен понимаю ли я правильно приведенную схемму
Код: Выделить всё
^ to upper layers V
| |
+----------->-----------+
^ V
[ip(6)_input] [ip(6)_output] net.inet(6).ip(6).fw.enable=1
| |
^ V
[ether_demux] [ether_output_frame] net.link.ether.ipfw=1
| |
+-->--[bdg_forward]-->--+ net.link.bridge.ipfw=1
^ V
| to devices |
Внизу есть физические сетевые карточки. Входящий пакет допустим попадает в левый нижний "конец" и если он bridged то по пути [bdg_forward] сразу уходит на исходящий интерфейс и привет. тогда net.link.bridge.ipfw=1 должен включать фильтрование на бридже но я такого не наблюдаю
Re: if_bridge + shaper
Добавлено: 2008-09-17 14:38:19
hizel
ок попробуйте
Код: Выделить всё
sysctl net.link.bridge.pfil_bridge=1
systl net.link.bridge.ipfw=1
ipfw add count ip from any to any via bridge0
все должно работать
Re: if_bridge + shaper
Добавлено: 2008-09-17 20:13:44
void*
Вобщем победил, раскажу как победил )
Код: Выделить всё
net.link.bridge.ipfw=1
net.link.bridge.pfil_local_phys=1
net.link.bridge.pfil_member=0
net.link.bridge.pfil_bridge=1
WiFi линк полудуплекс, пайп и очередь одна.
Код: Выделить всё
pipe 3 config queue 50 bw 10Mbit/s
queue 5 config pipe 3 queue 50 mask src-ip 0xffffffff dst-ip 0xffffffff
add 5300 allow all from any to 10.0.20.255 via bridge0
add 5310 queue 5 all from table(2) to table(2) via bridge0
Вот так работает все нормально только если ІР сервера назначен на bridge0. Если назначить любой сетевой в бридже - не работает. Если фильтровать на rl0 то ІР нужно назначать именно ей, а не bridge0 или dc0 - иначе траф от юзера до сервера или обратно не попадает в фаер. Проходящий траф юзер1-сервер-юзер2 попадает нормально.
Re: if_bridge + shaper
Добавлено: 2008-09-17 23:06:10
maradona
Код: Выделить всё
И тут проблема - шейпить траф на интерфейсе который сбриджован не получается никак
у меня вот такие переменные все прекрасно фильтруется на member интерфейсах моста:
Код: Выделить всё
net.link.bridge.pfil_onlyip: 0
net.link.bridge.ipfw_arp: 0
net.link.bridge.pfil_bridge: 0
net.link.bridge.pfil_member: 0
net.link.bridge.pfil_local_phys: 0
net.link.bridge.log_stp: 0
net.link.bridge.ipfw: 1
а так, не правильно наверно..
Re: if_bridge + shaper
Добавлено: 2008-09-18 0:11:45
void*
Предыдущий мой пост - отбой, нифига не работает. Тоесть работает но естественно режет траф на обеих интерфейсах. Фильтроватся то оно фильтруется, только мне нужно шейпить траф именно тот который пришел с rl0 и идет на любой комп локалки в том числе и на сам сервер (либо в обратную сторону) . Выловить его полностью не получается. Транзитный трафик проходящий сквозь бридж получается ловить вот так
Код: Выделить всё
count all from any to any via dc0 out bridged # траф в направлении rl0 -> dc0
count all from any to any via rl0 out bridged # траф в направлении dc0 -> rl0
А вот ловить траф проходящий от компов на rl0 к самому серверу не выходит. В правила типа from any to me via rl0 in траф вообще не попадает если на rl0 нет ІР адреса. Пример:
Код: Выделить всё
05300 0 0 count ip from me to any via rl0 out
05310 0 0 count ip from any to me via rl0 in
05320 5434 4805939 count ip from any to any via dc0 out layer2
05330 5601 4823381 count ip from any to any via rl0 out layer2
вот тут я переписал файлик 4МБ на сервер, потом скачал его с сервера (верхних 2 правила). Потом ради интереса проделал то же только на машину находящуюся по ту сторону бриджа (нижних два правила). Результат налицо. Картина поменяется если ІР сервера назначить на rl0 а не dc0 - но тогда верхние два правила сцитают траф который реально ходит через dc0, вот такой вот бардак получается с бриджами
