我有多个 Raspberry Pi 3 Model B 主板,并连接了外部 WiFi 适配器。我的目的是:
- 创建 RSP 设备的网状网络。
- 每个 RSP 板都应有自己的 AP,并且客户端(手机/笔记本电脑)可以连接到它。
- 这些 AP 的客户端可以在不同的 RSP 设备范围内移动,并且无论连接到哪个 AP,都应该能够相互通信(就像它们连接到单个网络一样)
修复 #1:我在 RSP3 的内部 wifi 接口(wlan0)上使用了 batman-adv,现在所有设备都可以通过它们的虚拟 bat0 接口相互 ping 通。
对于 #2:我使用了外部 wifi 适配器 (wlan1),在 hostapd 和 dnsmasq 的帮助下,我可以在每个 RSP 板上运行 AP(所有 AP 上的 ssid 和信道相同)。我现在还在不同的 AP 中连接了一些移动设备。
我的主要阻碍问题是目标#3:
为了解决这个问题,我尝试使用 bridge-utils 工具在 wlan0 和 wlan1 接口之间创建桥接。但在 RSP 中,这两个接口都不支持 WDS 模块。所以到目前为止,我无法为所有客户端创建单个网络。我还尝试在 wlan0 和 wlan1 之间使用 IP 转发,但我无法从其他 RSP 设备 ping 连接的客户端。
有没有其他方法(除了 WDS)可以为所有连接的客户端创建单一网络?
答案1
为了使这个功能正常工作,需要调整几件事。
首先,您不应该让每个 RPI 的 wlan1 AP 位于同一频道上,因为这会导致它们之间产生严重的干扰。
您也不需要使用 WDS。请参阅这个解释了解更多信息。只需确保每个 AP 具有相同的 SSID、WiFi 安全类型和相同的密码即可。
您的想法是正确的,您需要在每个 RPI 上创建 wlan0 和 wlan1 之间的桥接。我不熟悉 bridge-utils,但最好按照 batman-adv 文档中关于创建桥接的说明进行操作这里。
另外需要注意的是,您可能不需要为 DHCP 服务运行 dnsmasq。您的客户端只需使用自动分配的链路本地 IPv6 地址即可通过此无线 LAN 相互通信。
编辑:我错了。听起来好像不支持在 RPI3 上使用 wlan 建立真正的桥接。看来可以使用 NAT 来解决这个问题这里。如果您连接两个支持桥接连接的外部 WiFi 适配器,也有可能实现。
答案2
您没有提及任何有关 IP 配置的内容,而 IP 配置正是解决问题 #3 所需要的。
谨慎选择你的 IP 计划
您的整个网络将有一个“通用 IP 方案”。例如,许多网络使用192.168.*.*
。
您可以使用任何 IP 私有空间,包括 IPv4 和 IPv6. 确保它不会与用户的任何其他网络发生冲突或 RPis可能连接到。
例如,假设我们将使用全局网络。请注意,在网络及其所有子区域中,172.17.*.*
“全零”(172.17.*.0
)和“全一”( )地址是保留的(即不可用)。172.17.*.255
我们必须将这个大网络细分为更小的网络,每个 RPi 都可以独立使用。其中一个子网络将用于 RPi 之间的通信,我们将保留这个子网络172.17.0.*
。我们可以使用其他数字,但使用 0 可以轻松使用脚本配置 Pi。
172.17.xxx.*
网络的“公共”部分将使用每个 RPi 独有的IP xxx
。同样,为了方便编写脚本,我们从 1 开始,然后递增。
RPi 需要一个 IP两个都网络。对于公共网络,最佳做法是使用.254
,因此它将是172.17.xxx.254
。但是中央网络呢?RPi 将被其他 RPi 用作网络网关172.17.xxx.*
。将 IP 地址与中继网络匹配才是合乎逻辑的:我们将使用172.17.0.xxx
。
设置 Pis
配置你的 RPis
wlan1
(民众接口)使用固定的IP在所有 RPi 中是唯一的,并且不为 0(见上文)。网络掩码172.17.xxx.254
为。xxx
255.255.255.0
配置你的 RPis
wlan0
(私人的接口)使用固定的IP172.17.0.xxx
与xxx
上文相同。网络掩码为255.255.255.0
。在每个 RPi 上,运行以下脚本,并将其替换
$END
为您使用的 RPi 数量:echo 1 > /proc/sys/net/ipv4/ip_forward for i in $(seq 1 $END); do route add -net 172.17.$i.0 netmask 255.255.255.0 gw 172.17.0.$i; done iptables -A FORWARD -s 172.17.0.0/16 -d 172.17.0.0/16 -j ACCEPT
TL;DR,我们执行以下操作:我们选择一个大网络,这里172.17.0.0/16
。我们将其细分为 255 个较小的网络:172.17.xxx.0/24
。我们保留0
这些数字,并将其他所有数字提供给用户。然后,我们告诉 RPi 将发往其他计算机的数据包传输到适当的“网关”RPi。
告诉用户的设备在正确的位置查找
我假设您使用 dnsmasq 作为公共网络的 DHCP 服务器。为了正确配置用户设备,您需要调整其设置。
设置 DHCP 以便它提供适合网络范围的地址,
172.17.xxx.1
即172.17.xxx.253
。在 dnsmasq 配置的 DHCP 部分添加静态路由(再次进行
xxx
适当替换):dhcp-option=121,16.172.17.0.0,172.17.xxx.254
使用静态路由可避免覆盖客户端的默认网关。这样,如果它们仍连接到另一个网络(即插入以太网的笔记本电脑),它们就不会遇到任何问题。
在进行设置之前,请确保使用 1 或 2 个 Pi 和 1 或 2 个客户端进行测试全部你的 RPi。