粗略的解决方案:
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通服务器,但是本地客户端和远程客户端之间没有连接。在服务器 ( ) 上使用数据包捕获程序 tsharktshark -i br200 -f "icmp"
我看到从远程客户端到本地的 icmp 回显请求。在本地客户端上,我没有看到该请求(使用 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/client-arm23
ifconfig-push 172.20.200.132 255.255.255.0
/etc/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
/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 和 MRU 一致。
bond0.200 是绑定设备上的 vlan 设备。也许这会以某种奇怪的方式导致错误?
您很可能忘记启用转发。添加
net.ipv4.ip_forward=1
到/etc/sysctl.conf
,然后sysctl -p
或重新启动。还尝试将以下内容添加到 OpenVPN 配置中:请注意,将接口添加到桥接器会适当地设置 promisc 标志。桥接口不需要处于混杂模式。
我运行了相同的设置,但在 OpenSUSE 上,TAP 接口是在启动期间创建的,而 OpenVPN 只是打开它们——OpenVPN 中没有启动/停止脚本。