Привязка IP к MAC с помощью bridge(4) и pf(4)

Материал из OpenBSD-Wiki
Перейти к навигации Перейти к поиску
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Данная статья 100 % копипаст с www.openbsd.ru

Мини-руководство "шаг за шагом"

Пример предоставления клиентам доступа к ресурсам сети с привязкой IP к MAC с помощью bridge и pf. В данном случае для создания моста достаточно одного внутреннего сетевого интерфейса ral0.

    Сервер. IP: 192.168.2.1
    Клиент 1. Hostname: evol, IP: 192.168.2.2, MAC: 00:0f:ea:91:43:f6
    Клиент 2. Hostname: aurora, IP: 192.168.2.3, MAC: 00:80:c8:2c:47:a1 

Включаем перенаправление 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), ifconfig(8), netstart(8).