接入点未将 DHCP 数据包转发到网关以分配 IP - Raspberry Pi Bridge

接入点未将 DHCP 数据包转发到网关以分配 IP - Raspberry Pi Bridge

我有一台带有 2 个无线接口的 Pi,1 个连接到网络网关,另一个充当接入点,这要归功于hostapd

AP 没有运行任何 DHCP 或 NAT 软件,只是运行 hostapt 以允许多个设备连接到它。

我正在尝试将我的笔记本电脑连接到该接入点。

使用静态 IP 地址并手动输入网关地址、DNS 等,它可以正常工作。

但是当我尝试使用 DHCP 进行连接时,它不起作用,从 wireshark 我可以看到,在尝试连接时,初始 DHCP Discover 数据包被发送到接入点。然而,尽管我在 Pi 上运行了一些用 python 编写的桥接软件,但这个数据包并没有从连接到网关的接口转发出去。

该软件只是将数据包发送到接收数据包的相反接口上(这是对其功能的过度简化,但这是此场景的一般要点,它是一个网络桥)。因此,AP 接口应接收 DHCP 数据包并将其转发到网关,网关应回复 DHCP 提议等。

该软件可以正常工作,因为我可以看到笔记本电脑上已经经过桥接软件的其他 DHCP 通知消息,以及桥接软件目前正在由于广播而发送到我的笔记本电脑的其他 DHCP 发现/提供/请求/确认。

我想知道这些 DHCP Discover 数据包未被转发到网关的原因是否是由于 hostapd 接入点的某些设置或功能?

我确信问题不在于我编写的代码,因为它对于 DNS 等来说运行得很好。

此外,如果我手动制作一个 DHCP 发现数据包,那么它会被连接到网关的接口转发和输出,没有任何问题,只有当我的笔记本电脑自动发送 DHCP 数据包并尝试从它试图连接的接入点获取 IP 地址时,DHCP 数据包才会被转发。

我认为接入点不需要直接提供 IP 地址,但可以联系网络上的实际 DHCP 服务器来正确分配 IP 地址。

如果有人知道为什么数据包在转发到另一个接口之前似乎被接入点吸收了,请告诉我!

答案1

我假设您在“上行链路”端使用 WPA2。这行不通,因为 WPA2 在加密时与 MAC 地址绑定。因此中继数据包将不起作用。

您需要构建一些带有代理 arp 或 IP 转发的东西。

如果您尝试在 Python 中重新发明轮子,请不要担心,一切都在 Linux 内核中。但请记住:DHCP Discover 是一种广播,答案是发送到发送 MAC 的二层单播。因此,如果您在这里翻译,则需要在数据包内部重写。使用 DHCP 中继设置进行实验可能更容易,因为 Raspi 就是一个执行此操作的交换机。

我的第一个建议是让中间盒上的 NAT 和 DHCP 服务器一起工作,然后作为第二步,努力实现更加透明的中间盒。

相关内容