1. 网络拓扑
在PC(ubuntu)上通过RNDIS虚拟出来一个vlan节点(vlan0),并通过这个节点操作ARM Linux设备上的Wi-Fi(wlan0),具体网络拓扑如下所示。
2. 具体实现步骤
2.1 确保RNDIS已连接
在ARM Linux设备上,RNDIS已经启用,并且PC能够通过RNDIS接口(通常是 usb0)ping ARM Linux设备。这意味着基本的网络连接已经建立。如何使能RNDIS,请参考如下文章:
- 【CSDN】i.MX8MP使能USB RNDIS
2.2 在PC上创建虚拟接口
使用vlan工具或ip命令在PC上创建一个虚拟接口,以便将PC上的流量通过RNDIS接口发送到ARM Linux设备的wlan0接口。
- 创建一个新的VLAN接口:
- 假设RNDIS接口在PC上被识别为usb0,我们可以创建一个新的虚拟接口vlan0,并将其与usb0绑定:
- sudo ip link add link usb0 name vlan0 type vlan id 10
- 这里,id 10是VLAN ID,可以根据需要选择。
- sudo ip link add link usb0 name vlan0 type vlan id 10
- 假设RNDIS接口在PC上被识别为usb0,我们可以创建一个新的虚拟接口vlan0,并将其与usb0绑定:
- 配置VLAN接口:
- 为新创建的vlan0接口配置IP地址并启用它:
- sudo ip addr add 192.168.1.6/24 dev vlan0
- sudo ip link set dev vlan0 up
- 为新创建的vlan0接口配置IP地址并启用它:
2.3 在ARM Linux设备上配置VLAN
ARM Linux设备需要将收到的VLAN流量路由到wlan0接口。
- 在ARM Linux上创建VLAN接口:
- ip link add link usb0 name usb0.10 type vlan id 10
- ip link set dev usb0.10 up
- 桥接VLAN接口和wlan0:
- 使用bridge-utils创建一个桥接接口,将usb0.10和wlan0接口连接起来:
- brctl addbr br0
- brctl addif br0 usb0.10
- brctl addif br0 wlan0
- 这里要确保Wi-Fi已经开启hostapd或者wpa_supplicant;
- ip link set dev br0 up
- ip addr add 192.168.1.2/24 dev br0
- 使用bridge-utils创建一个桥接接口,将usb0.10和wlan0接口连接起来:
2.4 在PC上操作ARM Linux的wlan0
现在,你可以在PC上通过vlan0接口向ARM Linux设备上的wlan0发送数据,仿佛你直接在ARM Linux设备上操作wlan0一样。
3. 总结
3.1 总结IP地址配置
- ARM Linux设备
- br0: 192.168.1.1/24
- usb0: 不需要单独配置
- usb0.10: 不需要单独配置
- wlan0: 加入br0,不需要单独配置
- PC(Ubuntu)
- usb0: 不需要单独配置
- usb0.10: 192.168.1.2/24
ARM Linux br0和usb0.10要在同一网关内。
3.2 其他注意事项
- 确保br0、usb0、wlan0等接口在ARM Linux设备上均已激活(UP状态)。
- 配置Wi-Fi网络:
- 如果wlan0正在作为AP(Access Point)使用,确保它已经配置并运行。如果wlan0是客户端模式,确保它已连接到所需的Wi-Fi网络。
- 配置Wi-Fi网络:
- VLAN ID(10)可以根据实际需求进行调整,但在ARM Linux和PC上必须保持一致。
- 在实际操作中,具体的IP地址应根据你的网络环境进行调整,以避免与其他网络冲突。
- 检查桥接转发规则:
- 默认情况下,桥接接口br0会自动转发数据包到已连接的接口(如usb0.10、wlan0)。如果你启用了额外的防火墙规则或其他网络配置,确保它们没有阻止转发操作。
- 查看当前的桥接配置是否允许转发:cat /sys/class/net/br0/bridge/forward_delay
- 默认情况下,桥接接口br0会自动转发数据包到已连接的接口(如usb0.10、wlan0)。如果你启用了额外的防火墙规则或其他网络配置,确保它们没有阻止转发操作。
- 测试网络连通性:
- 你可以通过ping命令或其他网络工具来测试从PC(通过vlan0接口)到wlan0上的设备的网络连通性。如果所有配置正确,数据包应该能够PC通过vlan0到br0,并通过wlan0发送出去。
- 启用IP转发:
- 如果需要跨网络的路由功能(例如从VLAN到外部网络),可以在ARM Linux设备上启用IP转发:sysctl -w net.ipv4.ip_forward=1