粗略的解决方案:
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 中没有启动/停止脚本。