通过 wifi 连接的多个客户端/AP

通过 wifi 连接的多个客户端/AP

我尝试创建的设置包含 5 个设备,所有设备都通过无线相互连接。在任何时候,您都可以连接到这些 AP 中的任何一个,并对该网络中的任何设备执行 ping 操作。每个 AP 也有自己的 DHCP 服务器。

为了使它更有趣,让它全部是动态的,即任何这些设备都可能会脱落或者可能会添加一个新设备。

A、E——客户。

B、C、D - AP 和客户端

WLAN1-AP接口

WLAN0 - 客户端接口

设置示例:

A(WLAN0) --- B(WLAN0,WLAN1) --- C(WLAN0,WLAN1) --- D(WLAN0,WLAN1) --- E(WLAN0)

任何建议什么是连接它们的正确方法。

迄今为止..

  • Wifi 驱动程序是 rtl8723ds,桥接接口似乎不起作用。

  • 为每个 AP 拥有不同的子网(设备作为客户端启动,扫描网络,在启动其 AP 之前选择一个未使用的子网) - 这看起来很有希望,但是,路由正在变成一场噩梦。

更新: 添加更多细节并澄清一些事情。

  • 仅具有可用的无线接口。无线局域网1、无线局域网0

  • 外部设备应该能够连接到 AP(或通过 WiFi),查看该网络中的所有设备并向其中任何设备发送 UDP 数据包。

  • 确实玩过 babeld ad-hoc/mesh 协议,但是......不过遇到了很多问题,为 babeld 提供了 WLAN0,为 AP 提供了 WLAN1,以便外部设备(例如智能手机)可以与 mesh 通信。我使用 hostapd 进行 AP 配置。
    当 AP 启动时出现了问题 - 无法再看到任何设备,即网格消失了。甚至需要在某些随机设备上重新启动 babeld。
    从未设法让 DHCP 为网格节点工作。也许是因为设备将以随机顺序启动,并且整个网络将经常启动/关闭。没有静态节点..
    运行了一些随机测试,奇怪的不稳定因素.. 例如:让网格运行一整晚,早上设备就无法再看到彼此。

更新2:更多详细信息请参见此处的最终目标。

一段时间以来我一直在强调这一点,并认为我在试图解释这一切的目的时遗漏了太多关键细节。也许有更好的方法。

小型嵌入式设备的集合,范围相对较近,全部相互连接。
唯一的连接选项是 WiFi。
其他一些支持 WiFi 的设备(例如智能手机)必须能够连接到发送自定义 UDP 数据/识别数据包的设备所有设备。最合乎逻辑的解决方案似乎是在其中一个设备上按下按钮,从而启动 AP。
没有什么是一成不变的,设备的数量会发生变化。

Babeld 有点让我放弃了网格的想法,但也许蝙蝠侠更有前途。没有更多的选择,是吗..?
连接 AP、客户端、AP...以及所有路由。我调查得越多,情况就会变得更糟。

更新3:

带有 rtl8723ds 驱动程序的蝙蝠侠 - 无法使模块工作。尝试加载模块时,不断出现分段错误。

再次陷入死胡同。。

答案1

“正确”的方法取决于您的设置情况。

如果您安装了许多固定设备,这些设备通过 LAN 相互连接,并且也连接到互联网,那么您希望将这些设备的整体用作分发系统具有相同的 BSSID,并在每台设备上运行一个接入点。这意味着您在每台设备上桥接 wlan AP 接口和以太网接口(例如wlan0和),并在其他地方(或在其中一台设备上)运行单个 DHCP 服务器。eth0就像使用任意数量的客户端一样,以同样的方式添加更多接入点“正常”。

另一方面,如果您有许多设备想要通过 WLAN 相互连接,那么您需要一个网状网络。这意味着您使用单身的每个设备上的 WLAN 接口处于“网状”或“ad-hoc”(IBSS) 模式,以及不是作为接入点和客户端。您还必须指定您的路由目标,即所有这些设备是否始终可以互相看到,或者您是否想在互相看不到的设备之间进行路由,等等。有许多网状路由协议可供您选择。可以玩。

尝试用多个接入点和客户端创建一个网状网络可能会……很有趣,但我不推荐这样做。

当您更新问题时会提供更多详细信息。

编辑

我仍然不完全确定你想要实现的场景。

如果你想要下面的场景:

  • 许多节点(“路由器”)通过 WLAN 相互连接,每个节点都提供一个 AP。或者,某些节点可以连接到互联网。

  • 许多客户端准确地选择其中一个节点 AP 进行连接,并且可能需要与“节点网络”隔离(需要,而不是必须)

那么我会推荐一个类似于所使用的基础设施弗莱芬克倡议。他们使用蝙蝠侠对于第 2 层路由,他们为基于 OpenWRT 和 Gluon 的“节点”提供现成的固件(通常是具有单个 WLAN 接口的廉价路由器,如果您有具有两个 WLAN 接口的硬件,那就更好了),并且它们通过以下方式连接本地网格:网关(您可能不需要)。这是与数百个节点、有时甚至数千个客户端的本地社区的成功合作。

具有第 3 层路由的 Babel 应该可以更好地扩展到更大的网络,我知道 Freifunk 的一些人正在研究它作为蝙蝠侠的替代品,但到目前为止它仍然有错误(这似乎符合你的经验)。

如果您的场景不同并且您想要其他东西,请注明。

编辑

是的,请添加更多有关最终目标的信息,图片仍然不清楚。问题:

  • 为什么智能手机必须发送识别数据包全部设备?一台设备还不够吗?您期望设备提供什么样的答案/交互?

  • 为什么突然出现用户交互(“必须按下按钮”)?认证需要这个吗?如果智能手机可以随时发送识别数据包,会出现什么问题?智能手机应用程序用户是否必须输入预共享密钥?

  • 您有任何安全考虑吗?节点之间必须相互验证吗?智能手机是否需要向节点验证自身身份?到一个节点?到所有节点?安全考虑很重要,请使其明确且完整。

  • 对客户端(智能手机)有什么要求?如果是智能手机,您是否只能运行应用程序(因此智能手机必须通过 AP 作为 STA 连接)?或者你可以修改网络设置吗?除了智能手机之外,还有其他类型的客户吗?

无论如何,根据我到目前为止的理解,以下内容怎么样:

  • wlan0所有节点通过 上的 IBSS和 上的开放 AP wlan1(无加密)实现蝙蝠侠网格。 AP ( wlan1) 桥接至蝙蝠侠网格 ( bat0)。整个网格有一个 DHCP 服务器来分配 IPv4 地址。或者,如果可以使用 IPv6,则链路本地 IPv6 地址就足够了。

    这意味着我们为所有设备提供一个开放的、不安全的传输层,它基本上是一个 LAN 网段。所有安全协议都必须在这一层之上实现。

  • 所有节点都运行一些守护程序以进行交互。节点通过 UDP 广播相互验证身份。

  • 客户端(智能手机)使用正常程序连接到任何 AP。智能手机上有一个应用程序通过 UDP 广播向所有节点验证自身身份。从那时起,它可以通过 UDP 单播(或 TCP 或其他)与一个、多个或所有节点恶魔进行交互。

是的,分布式网络应用程序很困难……您不能“快速编写”这些应用程序。

而且batman 完全独立于所使用的WLAN 驱动程序。确保您选择的蝙蝠侠版本对于您的内核版本来说足够新,编译内核模块并插入它。您应该获得一个bat0接口,然后用于batctl添加网格接口。

相关内容