RPI 通过以太网和桥接 wifi 并行访问网络

RPI access network over ethernet and bridge wifi parallel

我目前正在尝试使用 pi 作为监控系统,这需要连接到本地以太网。现在我也想使用与 wifi ap 相同的 pi。但是我找到的所有用于 pi 桥接以太网和 wifi 的配置示例,因此 pi 本身无法再访问以太网。

目前的配置是这样的

auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
wireless-power off

如果我桥接网络(并且 rpi 按预期作为 wifi ap 工作),配置如下所示

auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet manual

auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
wireless-power off

auto br0
iface br0 inet static
address 192.168.1.11
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
bridge-ports eth0 wlan0
bridge-waitport 5
bridge-stp off
bridge-fd 0

所以问题是如何结合这两种配置,以便 pi 也可以访问同一个(桥接)网络?

对于像这样的拓扑,配置是this

             ________________________________________ 
            |                  RPi                   |
Internet ---  WLAN(WiFi)          (Ethernet Ports)LAN ----- Devices
            |________________________________________|

根据 Milinds 的评论,我从 post:

中推翻了一个解决方案

首先,安装以下软件包:

apt-get update && apt-get -y install hostapd hostap-utils iw bridge-utils dnsmasq

添加到 /boot/cmdline.txt:

[...] net.ifnames=0 [...]

替换/etc/network/interfaces:

auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
wireless-power off
address 192.168.2.1
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255

创建 /etc/hostapd/hostapd.conf:

ctrl_interface=/var/run/hostapd
macaddr_acl=0 auth_algs=1
driver=nl80211
interface=wlan0
hw_mode=g
ieee80211n=1
channel=1
ssid=REPLACE_WITH_YOUR_SSID
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=1
wpa=3
wpa_passphrase=REPLACE_WITH_YOUR_PASSPHRASE
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

替换/etc/dnsmasq.conf:

interface=wlan0 
listen-address=192.168.2.1 
bind-interfaces
server=8.8.8.8 
domain-needed 
bogus-priv
dhcp-range=192.168.2.2,192.168.2.100,12h

/etc/sysctl.conf 中取消注释:

[...]
net.ipv4.ip_forward=1
[...]

运行 现在 iptable 路由的以下命令:

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT  
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

启动时启用 ip table 路由

exit 0之前添加到/etc/rc.local:

[...]
iptables-restore < /etc/iptables.ipv4.nat
[...]

最后重新启动,pi 应该像 wifi ap 从以太网端口共享互联网一样按预期工作。