如何使用多个 Raspberry Pi 创建接入点的单个网络(网状)

Mah*_*ena 6 wireless-networking raspberry-pi

我有多个 raspberry pi 3 B 型板,它们连接了外部 wifi 适配器。我的目的是:

  1. 创建 RSP 设备的网状网络。
  2. 每个 RSP 板都应该有自己的 AP,客户端(移动/笔记本电脑)可以连接到它。
  3. 这些 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 除外)为所有连接的客户端创建单个网络?

Nat*_*ini 3

您还没有提到任何有关 IP 配置的内容,而 IP 配置正是您解决问题 #3 所需要的。

仔细选择您的 IP 计划

你的整个网络将有一个“通用IP方案”。例如,许多网络使用192.168.*.*.

您可以使用任何 IP 私有空间,无论是 IPv4 还是 IPv6。确保它不会与您的用户或 RP可能连接到的任何其他网络发生冲突。

例如,假设我们将使用全球网络172.17.*.*。请注意,“全零”( 172.17.*.0) 和“全一”( 172.17.*.255) 地址在网络及其所有细分中保留(即不可用)。

我们必须将这个大网络细分为每个 RPi 都可以独立使用的更小的网络。其中一个子网将用于 RP 之间的通信,我们将保留该子网172.17.0.*。我们可以使用其他数字,但使用 0 可以轻松地使用脚本配置 Pi。

网络的“公共”部分将使用每个 RPi 唯一的172.17.xxx.*IP 。xxx同样,为了使脚本变得简单,我们从 1 开始,然后递增。

RP 需要在两个网络中都有一个 IP。对于公共网络,最好的做法是使用.254,所以会的172.17.xxx.254。但是中央网络呢?172.17.xxx.*RPi 将被其他 RP用作网络网关。将 IP 地址与中继网络相匹配才符合逻辑:我们将使用172.17.0.xxx.

设置 Pi

  1. 配置您的 RP wlan1公共接口)以使用固定IP 172.17.xxx.254,该 IPxxx在您的所有 RP 中是唯一的,而不是 0(见上文)。网络掩码是255.255.255.0.

  2. 配置您的 RP wlan0专用接口)以使用固定IP 172.17.0.xxx,与xxx上述相同。网络掩码是255.255.255.0.

  3. 在每个 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
    
    Run Code Online (Sandbox Code Playgroud)

TL;DR,我们执行以下操作:我们在这里选择一个大网络172.17.0.0/16。我们将其细分为 255 个较小的网络:172.17.xxx.0/24. 我们保留0自己的号码,并将所有其他号码提供给用户。然后,我们告诉 RPi 将发往其他计算机的数据包传输到适当的“网关”RPi。

告诉用户的设备寻找正确的位置

我假设您使用 dnsmasq 作为公共网络的 DHCP 服务器。为了正确配置用户设备,您需要调整其设置。

  1. 设置 DHCP,使其在适合网络的范围内提供地址,即 IE172.17.xxx.1172.17.xxx.253

  2. 在 dnsmasq 配置的 DHCP 部分添加静态路由(再次xxx适当替换):

    dhcp-option=121,16.172.17.0.0,172.17.xxx.254
    
    Run Code Online (Sandbox Code Playgroud)

使用静态路由可以避免覆盖客户端的默认网关。这样,如果它们仍然连接到另一个网络(即插入以太网的笔记本电脑),则应该不会有任何问题。

在承诺设置所有RP 之前,请确保使用 1 或 2 个 Pi 和 1 或 2 个客户端对此进行测试。