Настройка Ethernet Bridge


Опубликовано на сайте OpenBSD.ru

Начиная с версии 2.5, появилась возможность использования OpenBSD в качестве Ethernet Bridge. Использование функции Bridge позволяет объединить несколько сегментов Ethernet в один логический сегмент. При этом допустимо использование правил фильтрации pf/ipf, что позволяет превратить OpenBSD в прозрачный IP фильтр.

Чтобы настроить OpenBSD в качестве Ethernet Bridge, нужно выполнить следующие шаги:
Сконфигурировать ядро OpenBSD, включив в него псевдо-устройство "bridge". Файл конфигурации ядра должен содержать строку "pseudo-device bridge 1". Вместо числа 1 нужно подставить количество предполагаемых логических сегментов.
Создать файл конфигурации /etc/bridgename.bridge0, содержащий команды конфигурации Bridge, например:
add rl0
add fxp0
up
В данном случае мы объявляем интерфейсы fxp0 и rl0 одним логическим Ethernet сегментом. Подробнее о командах конфигурирования Bridge можно прочитать в brconfig(8). При использовании нескольких логических сегментов, следует создать файл конфигурации для каждого псевдоустройства bridge.

Создать файлы конфигурации сетевых интерфейсов:

/etc/hostname.fxp0:
inet 194.226.170.3 255.255.255.0 NONE media 100baseTX

/etc/hostname.rl0:
up media 100baseTX
Подробнее о файлах конфигурации сетевых интерфейсов можно прочитать в hostname.if(5)

Обратите внимание, что IP адрес присваивается только одному интерфейсу. Допускается также создание Bridge, не имеющего своего IP адреса.

Перезагрузить машину.
Замечания
При использовании OpenBSD Packet Filter, пакет проходящий через Bridge попадает под проверку PF два раза, при входе на одном интерфейсе и при выходе на другом. Чтобы производить keep-state фильтрацию, нам необходимо разрешить все входящие и исходящие пакеты на одном интерфейсе, а на другом производить фильтрацию. Пример правил:
# фильтрация производится на rl0, поэтому пропускаем все пакеты на rl1
pass in quick on rl1 all
pass out quick on rl1 all

# по умолчанию мы блокируем все пакеты, и пропускаем только
# icmp запросы с получившимися keep-state ответами в обе стороны.
block in on rl0 all
block out on rl0 all
pass in on rl0 inet proto icmp all icmp-type echoreq keep state
pass out on rl0 inet proto icmp all icmp-type echoreq keep state
При использовании ipf для фильтрации пакетов, проходящих через Bridge, действуют только правила для входящих пакетов.
Если во время работы Bridge, производится перенос какого-нибудь компьютера (или другого устройства, имеющего свой Ethernet адрес) с одного Ethernet сегмента на другой, следует выполнить команду
# brconfig bridge0 flush
(где bridge0 - псевдо-интерфейс Bridge, к которому относится Ethernet сегмент, в котором раньше находился компьютер).

Обновлено: 13.03.2015