Конфигурация:Debian 6.0 Squeeze
OpenVPN 2.2.1(from backports)
Задача - соединить удалённых клиентов с локальной сетью так, чтобы у них были одинаковые сеть/маска. Я использую OpenVPN TAP интерфейс, соединённый с помощью bridge с ethernet-интерфейсом в локальную сеть. Ethernet-интерфейс - bond0.200. Это 200 VLAN над bond-объединением 2-х обычных интерфейсов(bond-mode balance-alb)
И локальные, и удалённые клиенты могут пинговать и обмениваться данными с сервером, но не пингуют друг друга.
С помощью tshark видно, что пакеты, отправленные удалённым клиентом локальному, появляются в tap200 и br200, но не появляются в bond0.200. При этом MAC-адрес локального клиента есть у удалённого клиента в кеше arp, и наоборот О_о
Фаервол/антивирус вырублены.
MTU на eth2, tap200, bond200 совпадают: 1500.
Куда копать дальше?
/proc/sys/net/ipv4/ip_forward = 1
/etc/network/interfaces:
auto bond0.200
iface bond0.200 inet manual
vlan_raw_device bond0
up ifconfig bond0.200 0.0.0.0 promisc upauto br200
iface br200 inet static
bridge_ports bond0.200
bridge_stp off
bridge_fd 1
address 172.20.200.2
netmask 255.255.255.0
post-up ifconfig br200 promisc/etc/openvpn/server.conf:
mode server
tls-server
port *****
proto tcp-server
dev tap200script-security 2
up /etc/openvpn/bridge-start
down /etc/openvpn/bridge-stopca ca.crt
cert server.crt
key server.key
dh dh1024.pem
#crl-verify crl.pemauth sha1
cipher AES-256-CBC; !!!
; comp-lzotun-mtu 1500
mssfix 1450client-config-dir /etc/openvpn/ccd
ccd-exclusiveclient-to-client
keepalive 10 120persist-key
persist-tunstatus /var/log/openvpn/server-arm.status
log-append /var/log/openvpn/server-arm.log/etc/openvpn/ccd/client-arm23:
ifconfig-push 172.20.200.132 255.255.255.0/etc/openvpn/bridge-start:
#!/bin/bash
#set -x
#################################
# Set up Ethernet bridge on Linux
# Requires: bridge-utils
#################################br="br200"
tap="tap200"openvpn --mktun --dev $tap
ifconfig $tap 0.0.0.0 promisc upbrctl addif $br $tap
exit 0
/etc/openvpn/bridge-stop:
#!/bin/bash
#set -x
####################################
# Tear Down Ethernet bridge on Linux
####################################br="br200"
tap="tap200"brctl delif $br $tap
openvpn --rmtun --dev $tap
exit 0
Проблема решилась так:
iptables -A FORWARD -i br200 -j ACCEPT
iptables -A FORWARD -o br200 -j ACCEPTЭто конечно грубое решение, потом поаккуратнее правила выставлю.
Но какого хрена? bridge работает на уровне L2, эти пакеты не должны проходить через FORWARD. Ничего не понимаю
> Проблема решилась так:
>
> iptables -A FORWARD -i br200 -j ACCEPT
> iptables -A FORWARD -o br200 -j ACCEPT
>
> Это конечно грубое решение, потом поаккуратнее правила выставлю.
> Но какого хрена? bridge работает на уровне L2, эти пакеты не должны
> проходить через FORWARD. Ничего не понимаютам в sysctl есть ключики, которые этим управляют
sysctl -a |grep bridge
2) /etc/network/interfaces:добавляем
# OpenVPN
auto tap200
iface tap200 inet manual
up ifconfig $IFACE up
down ifconfig $IFACE down
pre-up openvpn --mktun --dev $IFACE
post-down openvpn --rmtun --dev $IFACEпотом правим bridge_ports -добавляем туда тап200, из конфига опенвпн-а выкидываем ап-даун скрипты, имхо промиск не нужен совсем, бриджинг сам всё сделает.
Хитро устроено. Спасибо.ИМХО логичнее всё же создавать TAP'ы скриптами: работает сервер - есть соотв. интерфейс, не работает - нет интерфейса.
> Хитро устроено. Спасибо.
> ИМХО логичнее всё же создавать TAP'ы скриптами: работает сервер - есть соотв.
> интерфейс, не работает - нет интерфейса.Это ваше имхо.
Мое имхо - все интерфейсы должны быть всегда.
Тогда в них можно прописывать маршруты, и они тоже будут всегда..
Это удобно для каналов, которые работают большую часть времени (типа постоянно).Хотя скрипты тоже имеют место быть. Если это "более клиентское подключение" и работает "менее постоянно".
> Но какого хрена? bridge работает на уровне L2, эти пакеты не должны
> проходить через FORWARD. Ничего не понимаюВидишь ли, в чём дело, Пух... Вот я, например, _фильтрующим_мостом_ (именно iptables, не ebtables на мосту) пользовался, а эти ваши восьмиуровневые модели, кому они сдались. </университетиев не кончали>