奇怪的树莓派3B+无线网卡桥接现象

想把树莓派当作路由器用,eth1(USB网卡)连接外网,eth0跟wlan0则是内网,想把后两者桥接起来,但是每一次启动都只有eth0加进了桥接

问题

无法通过修改/etc/network/interfaces正常桥接wlan0eth0,系统启动后只有eth0加入了br0,而wlan0没有加入。查看syslog发现如下输出

1
networking[281]: Configuring network interfaces...can't add wlan0 to bridge br0: Operation not supported

上网查得Bridging wlan0 to eth0,里面提到,要桥接两者是不可能的。

但同时又搜到Raspberry PI 3 MODEL B - Wireless Bridge to ethernet,里面提到,需要输入命令

1
iw dev wlan0 set 4addr on

但需要网卡的支持,而树莓派3B+板载无线网卡是不支持的。

附上interfaces部分配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
auto lo
iface lo inet loopback
iface eth0 inet manual
iface wlan0 inet manual
auto br0
iface br0 inet static
address 192.168.1.1
netmask 255.255.255.0
metric 51
bridge_ports eth0 wlan0
bridge_stp on

尝试一

在开机后(此时eth0已加到br0)手动输入

1
sudo brctl addif br0 wlan0

没有像网上别人提到的报错,而且无线网卡成功加入桥接。嗯,此处应该有一串问号。

加入桥接后查syslog,发觉出现如下输出

1
2
3
4
5
[ 355.443955] device wlan0 entered promiscuous mode
[ 355.444078] br0: port 2(wlan0) entered listening state
[ 355.444121] br0: port 2(wlan0) entered listening state
[ 370.467574] br0: port 2(wlan0) entered learning state
[ 385.507531] br0: port 2(wlan0) entered forwarding state

故寻思或许是要提前开启promiscuous模式,故配置改为

1
2
3
4
5
6
7
iface br0 inet static
address 192.168.1.1
netmask 255.255.255.0
metric 51
pre-up ip link set wlan0 promisc on
bridge_ports eth0 wlan0
bridge_stp on

重启,发觉还是失败,有意思的是,明明我设定的是pre-up,但出错信息会出现在开启promiscuous模式的提示信息之前。

尝试二

修改interfaces

1
2
3
4
5
6
7
iface br0 inet static
address 192.168.1.1
netmask 255.255.255.0
metric 51
bridge_ports eth0
post-up brctl addif br0 wlan0
bridge_stp on

重启,仍是失败,而且那条networking出错信息在br0启动信息前边,说好的post-up呢?

尝试三

在开机之后,wlan0还没有加入桥接的情况下,执行

1
sudo service networking restart

wlan0成功加入网桥,syslog输出如下

1
2
3
[ 429.555486] device wlan0 entered promiscuous mode
[ 429.566743] br0: port 2(wlan0) entered forwarding state
[ 429.566824] br0: port 2(wlan0) entered forwarding state

到底是怎么一回事。

最终结果

去翻看hostapd.conf是发觉没有开bridge=br0选项,开启后,成功了。。。