编辑:我发现这是Why ARP Response only when network adapter in promiscuous mode 的副本?.
我使用带有 Rasbian Stretch 的 Raspberry Pi 3B+,并按照 Debian 的教程使用代理 arp 进行设置:使用代理 ARP 桥接网络连接以“桥接”eth0 到 wlan0。根据这个很容易设置代理arp:
rpi3 ~# echo 1 > /proc/sys/net/ipv4/conf/all/proxy_arp
rpi3 ~# echo 1 > /proc/sys/net/ipv4/ip_forward
rpi3 ~# ip route add 192.168.10.60/32 dev eth0
192.168.10.60
是应该“桥接”到 wlan0 的 eth0 上的客户端。
但它不起作用。我必须在 wlan0 上启用混杂模式才能使其工作,但找不到任何提示来执行此操作。
rpi3 ~# ip link set wlan0 promisc on
是否需要混杂模式Stretch
?如果没有,我该如何避免呢?
更新:
检查rp_filter
设置为0。
hostapd
未安装。wlan0
处于客户端模式并由 管理wpa_supplicant
。
显然,无法在客户端模式下的无线和以太网之间桥接以太网帧。例如它不会工作。
此外,请注意不要将来自其他来源的帧作为客户端注入到 AP 基础设施中。
这似乎只是 Raspberry Pi 的 wifi 上的问题。也是一个重复的问题为什么只有当网络适配器处于混杂模式时才响应ARP?使用树莓派。在任何教程的其他地方都找不到为代理 arp 启用混杂模式的说明。我已经在我的笔记本电脑上验证了它,代理 arp 在没有混杂模式的情况下工作。
我认为这个问题只能由 RASPBERRY PI 基金会和/或其闭源驱动程序制造商解决。在那之前,我们必须忍受它。
使用具有 promisc 模式的 ARP 代理进行桥接
可以使用具有promisc 模式的 ARP-proxy来“桥接”从 WiFi 到 LAN 的连接(例如,在具有 microUSB-LAN 适配器的 Raspberry Pi Zero W 上)使所有设备位于同一子网(IP 范围)。
•方案:
[Router] <---WiFi---> [RasPi wlan0 <---bridge---> eth0] <---LAN cable---> [有线设备,例如计算机]
•提示:提供的解决方案基于这些优秀的资源
来源#1,Pascal Geiser
来源#2,Will Haley
•这些示例中使用的硬件/操作系统:
Raspberry Pi Zero W with microUSB-to-LAN 适配器
Raspbian Stretch Lite (2019-04-08) + 更新
解决方案 #1 - 通过接口的 ARP 代理(手动配置)
注意:这取决于您的 WiFi 路由器是否支持“IP 第 3 层解决方案”(网络层)
1)假设树莓派与路由器的 WiFi 连接已经建立并连接
2)安装包
3)编辑并添加以下行:
假设
4)启用数据包转发:
5)配置 DHCP 中继
DHCP 助手将捕获请求并将它们转发到“真正的”DHCP 服务器:
6)配置 AVAHI
启用“反射器模式”将允许客户端浏览连接到网桥的所有服务:
7)重启 RasPi
重启后,通过 eth0 / LAN 连接的设备应该可以访问 WiFi 路由器的同一网络。
注意:工作解决方案取决于您的 WiFi 路由器是否支持“IP 第 3 层解决方案”(网络层)
解决方案 #2 - 通过 SERVICES 的 ARP 代理(自动脚本解决方案)
注意:这取决于您的 WiFi 路由器是否支持“IP 第 3 层解决方案”(网络层)
1)使用以下内容创建 bash 脚本:
2)执行 bash 脚本(检查输出是否有任何错误):
3)重启 RasPi
通过 eth0 / LAN 连接的设备重启后应该可以访问 WiFi 路由器的同一个网络。注意:这取决于您的 WiFi 路由器是否支持“IP 第 3 层解决方案”
一般注意事项:
在支持的接口模式部分
如果此处未明确列出WDS ,则WiFi 芯片不支持 WDS(Raspberry Pi Zero W 不支持 WDS)。