OpenVPN 桥接:远程客户端看不到本地

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 接口和桥接。所有相关接口(以太网(本地网络)、TAP(VPN)和桥接)都设置为混杂模式。网络/网络掩码为 172.20.200.0/24。服务器地址为 172.20.200.2。

本地和远程客户端都可以 ping 服务器,但是本地和远程客户端之间没有连接。使用服务器上的数据包捕获程序 tshark ( tshark -i br200 -f "icmp"),我看到远程客户端向本地发出 icmp echo 请求。在本地客户端上,我没有看到该请求(使用 Wireshark)。此外,本地客户端在 arp 缓存中有远程客户端 arp 地址,远程客户端在 arp 缓存中有本地客户端 arp 地址。因此,它们在数据链路网络层上可以互相看到。但它们就是无法 ping 通对方!两个客户端上的防火墙和防病毒软件都已禁用。问题出在哪里?我不明白。

/etc/网络/接口

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/客户端-arm23

ifconfig-push 172.20.200.132 255.255.255.0

在/etc/openvpn/bridge启动

#!/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 中停止

#!/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 是 Bond 设备上的 vlan 设备。这是否会以某种奇怪的方式导致错误?

答案1

最有可能的是你忘记启用转发。添加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 标志。桥接器接口不需要处于 promisc 模式。

我运行了相同的设置,但在 OpenSUSE 上,TAP 接口是在启动期间创建的,而 OpenVPN 只是打开它们 - OpenVPN 中没有启动/停止脚本。

相关内容