Solução aproximada:
iptables -A FORWARD -i br200 -j ACCEPT
iptables -A FORWARD -o br200 -j ACCEPT
Ainda não entendi o que está acontecendo. Bridging é feito em L2, o iptables não deve tocar nos pacotes.
Configuração:
Debian 6.0 Squeeze
OpenVPN 2.2.1 (de backports)
Minha tarefa é conectar clientes remotos com a rede local na camada de enlace de dados, para que permaneçam em um domínio de broadcast e tenham a mesma rede / máscara de rede que os clientes locais. Estou usando interfaces TAP e bridging. Todas as interfaces relacionadas (ethernet (rede local), TAP (VPN) e bridge) são configuradas para o modo promíscuo. Rede / netmask é 172.20.200.0/24. O endereço do servidor é 172.20.200.2.
Os clientes locais e remotos podem executar ping no servidor, mas não há conexão entre clientes locais e remotos. Usando o programa de captura de pacotes tshark no servidor ( tshark -i br200 -f "icmp"
), vejo solicitações de eco icmp do cliente remoto para o local. No cliente local, não vejo solicitações (usando o Wireshark). Além disso, o cliente local tem o endereço arp do cliente remoto no cache do arp, e o cliente remoto tem o endereço arp do cliente local no cache do arp. Então, eles se vêem na camada de rede de enlace de dados. Mas eles simplesmente não podem pingar uns aos outros! O firewall e o antivírus estão desativados nos dois clientes. Onde está o problema? Eu não entendo.
/ etc / network / interfaces
auto bond0.200
iface bond0.200 inet manual
vlan_raw_device bond0
up ifconfig bond0.200 0.0.0.0 promisc up
auto 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 tap200
script-security 2
up /etc/openvpn/bridge-start
down /etc/openvpn/bridge-stop
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
#crl-verify crl.pem
auth sha1
cipher AES-256-CBC
; !!!
; comp-lzo
tun-mtu 1500
mssfix 1450
client-config-dir /etc/openvpn/ccd
ccd-exclusive
client-to-client
keepalive 10 120
persist-key
persist-tun
status /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 up
brctl 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
MTU e MRU em todas as interfaces coincidem.
bond0.200 é dispositivo vlan sobre dispositivo de ligação. Talvez isso de alguma forma estranha cause erros?