1) Необходимо в конфиге openvpn как на стороне клиента, так и на стороне сервера использовать dev tap
2) На сервере, необходимо что бы интерфейс tap был сбриджован с настоящим физическим интерфейсом локальной сети. Пример:bge0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
options=18<VLAN_MTU,VLAN_HWTAGGING>
inet 10.123.190.2 netmask 0xffff0000 broadcast 10.123.255.255
ether 00:19:bb:c6:42:ba
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
tap0: flags=8942<BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
ether 00:bd:aa:f9:d6:00
Opened by PID 64990
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether fe:74:f3:2c:36:62
priority 32768 hellotime 2 fwddelay 15 maxage 20
member: tap0 flags=3<LEARNING,DISCOVER>
member: bge0 flags=3<LEARNING,DISCOVER>
Отсюда видно, что tap0 не имеет адреса и поставлен в бридж с bge0(локальная сеть).
Для этого рекомендую использовать опции client-connect и client-disconnect приблизительно следующим образом:
client-connect /usr/local/etc/openvpn/client-connect.sh
client-disconnect /usr/local/etc/openvpn/client-disconnect.sh
client-connect.sh:
#!/bin/sh
/sbin/ifconfig bridge0 addm $dev
exit 0
client-disconnect.shЖ
#!/bin/sh
exit 0
Так же на сервере должна быть опция:
server-bridge 10.123.0.1 255.255.0.0 10.123.170.2 10.123.170.128
здесь первый аргумент --- шлюз, второй маска сети, началj динамического диапазона, конец динамического диапазона. Клиенту, если не указано другое будет выдаваться адрес из этого даипазана, маска, и шлюз.
Со стороны клиента, если openvpn установлен на роутере, так же интерфейс tap должен быть сбриджован с интерфейсом ЛАН, и ВСЕ МАШИНЫ в клиентской сети должны иметь адресе из диапазона УДАЛЕННОЙ ЛАН, то есть, в примере это 10.123.0.0/16
Все примеры приеведены для FreeBSD.