Пример предоставления клиентам доступа к ресурсам сети с привязкой IP к MAC с помощью bridge и pf. В данном случае для создания моста достаточно одного внутреннего сетевого интерфейса ral0.
Включаем перенаправление IPv4-пакетов между сетевыми интерфейсами: # sysctl -w net.inet.ip.forwarding=1 Добавляем соответствующую запись в /etc/sysctl.conf: # vi /etc/sysctl.conf net.inet.ip.forwarding=1 Редактируем /etc/bridgename.bridge0: # vi /etc/bridgename.bridge0 add ral0 blocknonip ral0 link0 -discover ral0 -learn ral0 flushall static ral0 00:0f:ea:91:43:f6 static ral0 00:80:c8:2c:47:a1 up rulefile /etc/bridge.conf Редактируем /etc/bridge.conf: # vi /etc/bridge.conf pass in on ral0 src 00:0f:ea:91:43:f6 tag evol pass in on ral0 src 00:80:c8:2c:47:a1 tag aurora block in on ral0 Создаем и поднимаем псевдоустройство bridge: # ifconfig bridge0 create # sh /etc/netstart bridge0 Для проверки смотрим информацию о бридже: # brconfig bridge0 bridge0: flags=1041<UP,RUNNING,LINK0> Configuration: priority 32768 hellotime 2 fwddelay 15 maxage 20 Interfaces: ral0 flags=4<BLOCKNONIP> port 2 ifpriority 128 ifcost 55 pass in on ral0 src 00:0f:ea:91:43:f6 tag evol pass in on ral0 src 00:80:c8:2c:47:a1 tag aurora block in on ral0 Addresses (max cache: 100, timeout: 240): 00:80:c8:2c:47:a1 ral0 1 flags=1<STATIC> 00:0f:ea:91:43:f6 ral0 1 flags=1<STATIC> Редактируем /etc/pf.conf: # vi /etc/pf.conf ext_if = "vr0" int_if = "ral0" evol = "192.168.2.2" aurora = "192.168.2.3" nat on $ext_if inet from { $evol, $aurora } to any -> ($ext_if) block in quick on $int_if from ! $evol to any tagged evol block in quick on $int_if from ! $aurora to any tagged aurora block return pass quick on { lo, $int_if } inet all pass quick on $ext_if inet all keep state Перезагружаем набор рулесетов файервола: # pfctl -f /etc/pf.conf Дополнительную информацию можно получить, прочитав статью "Настройка Ethernet Bridge", а также из справочных man-страниц: bridge(4), pf(4), bridgename.if(5), brconfig(8), netstart(8). |