Linux以太网桥可以在路由器后面访问

我运行Debian 8并需要将tap0接口连接到eth0 (尝试设置OpenVPN服务器)。 我使用OpenVPN帮助页面中的标准桥接脚本:

 #!/bin/sh # Define Bridge Interface br="br0" # Define list of TAP interfaces to be bridged, # for example tap="tap0 tap1 tap2". tap="tap0" # Define physical ethernet interface to be bridged # with TAP interface(s) above. eth="eth0" eth_ip="192.168.0.140" eth_netmask="255.255.255.0" eth_broadcast="192.168.0.255" for t in $tap; do openvpn --mktun --dev $t done brctl addbr $br brctl addif $br $eth for t in $tap; do brctl addif $br $t done for t in $tap; do ifconfig $t 0.0.0.0 promisc up done ifconfig $eth 0.0.0.0 promisc up ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast 

其中,192.168.0.140是路由器的DHCP为该服务器保留的IP地址。 路由器(192.168.0.1)用于访问Internet。

当我运行这个脚本时,局域网内的一切似乎都很好。 但是,在路由器中转发到192.168.0.140的所有端口突然停止应答。

我注意到,路由器的DHCP使用MAC地址来识别服务器,并且br0具有与eth0不同的MAC。 所以我补充说

 ifconfig $br hw ether d0:50:99:3b:4e:ff 

在桥接脚本的结尾,使br0具有与eth0相同的MAC。 它实际上将“正确的”MAC分配给br0 ,但不幸的是,这并不能解决问题。

问题似乎是在路由器本身,因为服务器仍然可以从局域网访问。

好的,答案很简单。 当网桥向上时,默认网关的路由消失。 所以

 route add default gw 192.168.0.1 br0 

作为一种魅力。