Назад | Перейти на главную страницу

Мост OpenVPN: удаленные клиенты не видят локальные

Грубое решение:

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 нет сценария запуска / остановки.