Грубое решение:
iptables -A FORWARD -i br200 -j ACCEPT
iptables -A FORWARD -o br200 -j ACCEPT
Я до сих пор не понимаю, что происходит. Мостовое соединение выполняется на L2, iptables не должен трогать эти пакеты.
Конфигурация:
Debian 6.0 сжатие
OpenVPN 2.2.1 (из бэкпортов)
Моя задача - подключить удаленных клиентов к локальной сети на уровне канала передачи данных, чтобы они оставались в одном широковещательном домене и имели ту же сеть / маску сети, что и локальные клиенты. Я использую интерфейсы TAP и мосты. Все связанные интерфейсы (Ethernet (локальная сеть), TAP (VPN) и мост) установлены в неразборчивый режим. Сеть / маска сети 172.20.200.0/24. Адрес сервера 172.20.200.2.
И локальные, и удаленные клиенты могут пинговать сервер, но между локальными и удаленными клиентами нет связи. Используя программу захвата пакетов tshark на сервере (tshark -i br200 -f "icmp"
) Я вижу эхо-запросы icmp от удаленного клиента к локальному. На локальном клиенте я не вижу этих запросов (используя Wireshark). Более того, у локального клиента есть ARP-адрес удаленного клиента в ARP-кеше, а у удаленного клиента есть ARP-адрес локального клиента в ARP-кеше. Итак, они видят друг друга на уровне сети передачи данных. Но они просто не могут пинговать друг друга! Брандмауэр и антивирус отключены на обоих клиентах. В чем проблема? Я не понимаю
/ и т.д. / сеть / интерфейсы
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
/ и т. д. / openvpn / ccd / client-arm23
ifconfig-push 172.20.200.132 255.255.255.0
/ и т.д. / openvpn / мост-старт
#!/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
/ и т. д. / openvpn / мост-стоп
#!/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 и MRU на всех интерфейсах совпадают.
bond0.200 - это устройство vlan поверх устройства связи. Может это каким-то странным образом вызывает ошибки?
Скорее всего, вы забыли включить пересылку. Добавить net.ipv4.ip_forward=1
к /etc/sysctl.conf
, затем sysctl -p
или перезапустите. Также попробуйте добавить в конфигурацию OpenVPN следующее:
server-bridge 172.20.200.2 255.255.255.0 172.20.200.100 172.20.200.200
push "route 172.20.200.0 255.255.255.0"
Обратите внимание, что добавление интерфейса к мосту устанавливает соответствующий флаг promisc. Интерфейс моста не обязательно должен быть в промисковом режиме.
У меня работает такая же установка, но в OpenSUSE интерфейсы TAP создаются во время запуска, и OpenVPN просто открывает их - в OpenVPN нет сценария запуска / остановки.