LINUX.ORG.RU
ФорумAdmin

OpenVPN bridge: удалённые клиенты не видят локальных

 ,


0

1

Конфигурация:

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 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


Последнее исправление: selivan (всего исправлений: 1)

Посмотреть состояния интерфейсов, что все в UP. Посмотреть на всякий случай в ebtables. Проверить с brctl show, что оба интерфейса действительно в бридже. Проверить что на обоих интерфейсах в бридже внезапно не оказались IP адреса

vasily_pupkin
()

А точно не фаерволл?

iptables -A FORWARD -i br200 -o br200 -j ACCEPT

Yur4eg
()

На интерфейсах ip-адреса нет, на бридже, разумеется, есть.

# ip a s tap200
44: tap200: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
    link/ether 92:ea:8a:fc:a3:31 brd ff:ff:ff:ff:ff:ff
# ip a s br200
42: br200: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether 00:15:17:b8:27:8c brd ff:ff:ff:ff:ff:ff
    inet 172.20.200.2/24 brd 172.20.200.255 scope global br200
# ip a s bond0.200
41: bond0.200@bond0: <BROADCAST,MULTICAST,PROMISC,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    link/ether 00:15:17:b8:27:8c brd ff:ff:ff:ff:ff:ff
root@armada-sc-02 /proc/sys/net/bridge #
# brctl show
bridge name     bridge id               STP enabled     
br200           8000.001517b8278c       no       bond0.200
                                                 tap200

ebtables пустые, всюду policy ACCEPT.

selivan
() автор топика

Проверить ядро(CONFIG_BRIDGE_NETFILTER). Если там «y» - открыть в файрволле форвардинг через мост и включить ip_forward в sysctl

Pinkbyte 👍
()
Последнее исправление: Pinkbyte (всего исправлений: 1)

Да, Yur4eg и Pinkbyte совершенно правы, проблема решается так:

iptables -A FORWARD -i br200 -j ACCEPT
iptables -A FORWARD -o br200 -j ACCEPT
Это конечно грубое решение, потом поаккуратнее правила выставлю.

Но какого хрена? bridge работает на уровне L2, эти пакеты не должны проходить через FORWARD. Ничего не понимаю

selivan
() автор топика
Ответ на: комментарий от selivan

Это конечно грубое решение, потом поаккуратнее правила выставлю.

iptables -A FORWARD -i br200 -o br200 -j ACCEPT

Разрешит ходить пакетам между интерфейсами бриджа. Еще можешь покурить критерий physdev

эти пакеты не должны проходить через FORWARD

Отключи CONFIG_BRIDGE_NETFILTER в ядре - и не будут

Pinkbyte 👍
()
Ответ на: комментарий от Pinkbyte

Нагуглил:

В sysctl net.bridge.* есть куча параметров, включающих/выключающих и меняющих порядок выполнения хуков на бридже - правила iptables, arptables, VLAN(802.1Q) и т. д.

net.bridge.bridge-nf-call-arptables
net.bridge.bridge-nf-call-ip6tables
net.bridge.bridge-nf-call-iptables

Хитро, блин. Pinkbyte, Yur4eg, спасибо :)

selivan
() автор топика
Ответ на: комментарий от selivan

Кстати, про эти параметры я забыл, так что и тебе спасибо, добрый человек, за напоминание :-)

Pinkbyte 👍
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.