Linux
Речь пойдёт о семействе 2.6 ядер, для 2.4 ветки необходимо патчить ядро. Патчи можно найти по .
В ядро необходимо включить CONFIG_BRIDGE_NETFILTER=y
Если вы хотите фильтровать трафик, проходящий через мост - вы также должны включить CONFIG_BRIDGE_NF_EBTABLES=[y|m]
ebtables имеет достаточно много возможностей, которые вы можете включить в соответствующем разделе конфигурации netfilter.
ebtables заслуживает более детального описания. Ждите следующей статьи.
Device Drivers => Networking support => Networking support (NET [=y]) => Networking options => Network packet filtering (replaces ipchains) (NETFILTER) => Bridge: Netfilter Configuration
Для поддержки TAP надо включить соответствующий пункт, расположенный в:
Device Drivers => Networking support => Network device support (NETDEVICES [=y])
Утилиты по управлению функциональностью ядра можно взять по . Пересобираем ядро, перегружаем машину - всё - вы имеете готовый мост. Осталось его настроить.
Есть одна тонкость - в мост можно включать только интерфейсы, не имеющие назначенных ip адресов. #!/bin/sh modprobe tun
LOCAL_IF="eth0" REMOTE_IF="tap0" BRIDGE_IF="br0" BRIDGE_IP="w.x.y.z" BRIDGE_MASK="a.b.c.d" BRIDGE_BROADCAST="e.f.g.h" CONFIG="/path/to/config"
# Запускаем OpenVPN в режиме демона openvpn --config $CONFIG --daemon
# Выключаем мост (если он включен) ifconfig $BRIDGE_IF down # Удаляем мост (убираем мусор за предыдущим запуском скрипта) brctl delbr $BRIDGE_IF # Добавляем новый мост brctl addbr $BRIDGE_IF # Включаем в мост интерфейсы brctl addif $BRIDGE_IF $LOCAL_IF brctl addif $BRIDGE_IF $REMOTE_IF
# Убираем адреса с интерфейсов, входящих в мост и поднимаем их ifconfig $LOCAL_IF 0.0.0.0 promisc up ifconfig $REMOTE_IF 0.0.0.0 promisc up
# Назначаем мосту адрес, если это необходимо - например вместо адреса на интерфейсе локалки. ifconfig $BRIDGE_IF $BRIDGE_IP netmask $BRIDGE_MASK broadcast $BRIDGE_BROADCAST # Включаем мост ifconfig $BRIDGE_IF up
Готово.