URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 93072
[ Назад ]

Исходное сообщение
"FreeBSD и мосты "

Отправлено Chris , 22-Фев-12 15:34 
Приветствую, коллеги!

Существует следующая схема, простая донельзя:

роутер ---- мост на freebsd 9 ---- кастомеры

Мост:

bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 02:9b:ce:33:b9:00
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
        maxage 20 holdcnt 6 proto rstp maxaddr 1000 timeout 1200
        root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
        member: em2 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 3 priority 128 path cost 20000
        member: em1 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 2 priority 128 path cost 20000

IPFW:

00001 allow ip from 192.168.5.0/24 to 192.168.5.0/24 via em0
00002 allow log logamount 10000 ip from any to any layer2
00003 allow log logamount 10000 ip from any to any out layer2
00004 allow log logamount 10000 ip from any to any layer2 mac-type 0x0806
00050 count log logamount 1000 ip from any to any mac-type 0x0806
00060 allow log logamount 10000 ip from any to any layer2
00100 allow log logamount 10000 ip from any to any layer2 not mac-type 0x0800
00120 allow log logamount 10000 ip from any to any mac-type 0x0806
00200 allow log logamount 10000 ip from any to any


Проблема в следующей, пытаюсь пинговать роутьер, на нём вижу свой мак адрес (за мостом разумеется), но ответ не получаю...

Интерфйейс em2 это клиентская сеть:

15:30:05.293575 ARP, Request who-has 192.168.4.1 tell 192.168.4.6, length 46
15:30:10.793650 ARP, Request who-has 192.168.4.1 tell 192.168.4.6, length 46

bridge0:

15:30:38.293975 ARP, Request who-has 192.168.4.1 tell 192.168.4.6, length 46
15:30:43.794049 ARP, Request who-has 192.168.4.1 tell 192.168.4.6, length 46

em1 это на роутер:

15:31:11.294425 ARP, Request who-has 192.168.4.1 tell 192.168.4.6, length 46
15:31:16.794445 ARP, Request who-has 192.168.4.1 tell 192.168.4.6, length 46

Впечатление, что именно роутер 192.168.4.1 и не отвечает... Но! На нем виден мак адрес 192.168.4.6...


в дебагах файрвола:

Feb 22 15:32:47 kernel: ipfw: 2 Accept MAC in via bridge0
Feb 22 15:32:47 kernel: ipfw: 2 Accept MAC in via em2
Feb 22 15:32:48 kernel: ipfw: 2 Accept MAC in via em1


Подскажите, где может быть засада?



Содержание

Сообщения в этом обсуждении
"FreeBSD и мосты "
Отправлено DeadLoco , 22-Фев-12 15:45 
> Подскажите, где может быть засада?

Еще в восьмой ветке ИПФВ должен был быть статически вкомпилен в ядро с опцией

  options         IPFIREWALL_DEFAULT_TO_ACCEPT

для того, чтобы получить ARP-прозрачный бридж. Штатный кернел-модуль, подгружаемый по случаю, для этого не годился. Единственно, нужно самому дописывать в конфиг ипфв строчку 65535 deny all from any to any.

Возможно, в девятке все уже иначе, но вот на этих граблях в бридже я в свое время потоптался изрядно.


"FreeBSD и мосты "
Отправлено Chris , 22-Фев-12 15:55 
Да, это сделано, строчки deny нет :-) Вместо неё allow. Самое обидное, что вижу arp пакет выстреливающий через мост в сторону роутера... (( А обратного нет... при этом если мост исключить из схемы, то конечно же все хорошо

"FreeBSD и мосты "
Отправлено Chris , 22-Фев-12 15:55 
Да, в ядре if_bridge тоже вкомпилен!

"FreeBSD и мосты "
Отправлено DeadLoco , 22-Фев-12 16:20 
> Да, в ядре if_bridge тоже вкомпилен!

А ман бриджа читан?

net.link.bridge.ipfw
Set to 1 to enable layer2 filtering with
ipfirewall(4), set to 0 to disable it.  This
needs to be enabled for dummynet(4) support.
When ipfw is enabled, pfil_bridge and
pfil_member will be disabled so that IPFW is
not run twice; these can be re-enabled if
desired.

net.link.bridge.ipfw_arp
Set to 1 to enable layer2 ARP filtering with
ipfirewall(4), set to 0 to disable it.
Requires ipfw to be enabled.


"FreeBSD и мосты "
Отправлено Chris , 22-Фев-12 16:40 
bridge# sysctl -a | grep bridge.ipfw
net.link.bridge.ipfw: 1
net.link.bridge.ipfw_arp: 1


читан... читан...


"FreeBSD и мосты "
Отправлено DeadLoco , 22-Фев-12 16:22 
> Да, в ядре if_bridge тоже вкомпилен!

К слову сказать, неплохо бы для начала просто вырубить ипфв на бридже, и добиться нормальной работы от просто бриджа, нефильтрующего. Чтобы, значить, методом исключения...


"FreeBSD и мосты "
Отправлено DeadLoco , 22-Фев-12 16:24 
Опять же, к слову сказать, проблемы с интефейсов нумерацией вижу я:

00001 allow ip from 192.168.5.0/24 to 192.168.5.0/24 via em0

Тогда, как мемберы бриджа - ем1 и ем2. Либо, что тоже не исключено, бридж немного более сложен, чем показано на схеме.


"FreeBSD и мосты "
Отправлено Chris , 22-Фев-12 16:37 
em0 интерфейс управления, там ничего кроме ай-пи управления нет... Фильтрацию отрубал - не помогает зараза. Пакеты то все равно бегают... хоть с ipfw хоть без него :( но не все

"FreeBSD и мосты "
Отправлено DeadLoco , 22-Фев-12 17:02 
> em0 интерфейс управления, там ничего кроме ай-пи управления нет...

И смотрит этот ифейс туда же, куда и бридж? Попробуйте повесить ИП для управления на сам бридж, а ем0 либо отключить, либо туда же, в бридж.


"FreeBSD и мосты "
Отправлено Chris , 24-Фев-12 10:01 
Попробывал.. результат один... Подебажил на пиксе (роутере) там только на 192,168,4,255 пакеты от 4,6 идут... фидимо где то фильтрует по пути, буду разбираться. Спасибо!

"FreeBSD и мосты "
Отправлено lavr , 22-Фев-12 15:57 
>> Подскажите, где может быть засада?
> Еще в восьмой ветке ИПФВ должен был быть статически вкомпилен в ядро
> с опцией
>   options         IPFIREWALL_DEFAULT_TO_ACCEPT
> для того, чтобы получить ARP-прозрачный бридж. Штатный кернел-модуль, подгружаемый по
> случаю, для этого не годился. Единственно, нужно самому дописывать в конфиг
> ипфв строчку 65535 deny all from any to any.
> Возможно, в девятке все уже иначе, но вот на этих граблях в
> бридже я в свое время потоптался изрядно.

в 9'ке by default GENERIC без ipfirewall, бридж подгружал модульно и проблем
не наблюдал, но без IPFIREWALL_DEFAULT_TO_ACCEPT в JAIL+VNET сходу получил
единственное правило:

65535 deny all from any to any

пришлось воткнуть:
jail_www_exec_afterstart4="/etc/rc.d/ipfw start"

ps. все же логично иметь в firewall'ах acccept by default


"FreeBSD и мосты "
Отправлено Chris , 22-Фев-12 16:01 
Привет, Андрей! Как там Дубна поживает? :-)

Да он default to accept! Ё-мое... :-)


"FreeBSD и мосты "
Отправлено Chris , 22-Фев-12 16:02 
bridge# ipfw show
00001 16138 1674738 allow ip from 192.168.5.0/24 to 192.168.5.0/24 via em0
00002 12982  675001 allow log logamount 10000 ip from any to any layer2
00003     0       0 allow log logamount 10000 ip from any to any out layer2
00004     0       0 allow log logamount 10000 ip from any to any layer2 mac-type 0x0806
00050   525   24150 count log logamount 1000 ip from any to any mac-type 0x0806
00060  2055  111596 allow log logamount 10000 ip from any to any layer2
00100     0       0 allow log logamount 10000 ip from any to any layer2 not mac-type 0x0800
00120     0       0 allow log logamount 10000 ip from any to any mac-type 0x0806
00200  2257  247577 allow log logamount 10000 ip from any to any
65535    49    3753 allow ip from any to any

"FreeBSD и мосты "
Отправлено Chris , 22-Фев-12 16:15 
Мас адресов я тоже с em1 почему то не наблюдаю...

bridge# ifconfig bridge0 addr
00:18:74:2f:c2:80 Vlan1 em2 668 flags=0<>
00:08:21:2b:78:85 Vlan1 em2 1198 flags=0<>
00:26:55:b3:7e:59 Vlan1 em2 1197 flags=0<>

:-\


"FreeBSD и мосты "
Отправлено lavr , 22-Фев-12 18:24 
Hi,

> Привет, Андрей! Как там Дубна поживает? :-)

стоит пока...

> Да он default to accept! Ё-мое... :-)

как уже посоветовали, попробуй ip от em0 навесить на bridge