目标
在嵌入式Linux设备下,使用单一的网卡(前提支持STA+AP共存),使用NAT(网络地址转换)实现软路由,以自身为热点,将接收到的流量数据全部转发出去。
一,STA+AP共存
在嵌入式设备中使用时往往是需要WiFi模块既能上网也能做一个热点,可能用于web配置,或者控制一些子模块,就像物联网的一些WiFi芯片ESP32、ESP8266
而且在安卓手机中很多的设备也是同时支持者两种模式的(后期很多厂家给阉割了)
所以WiFi模块同时支持这两种工作模式还是很有必要的,需要修改驱动配置文件,重新编译ko文件即可,以RTL8733bu模组为例,以下是官方文档给的解决方案👇
拿到对应的驱动后在autoconf.h
文件中,添加宏定义:CONFIG_CONCURRENT_MODE
重新编译驱动后,ifconfig -a
就可以 看到两个网络节点,两个都可以sta或ap模式
二,内核支持
使能内核支持网络地址转换(NAT)和包过滤等功能,配置内核支持以下选项
CONFIG_NETFILTER
CONFIG_IP_NF_IPTABLES
CONFIG_IP_NF_NAT
CONFIG_IP_NF_FILTER
Networking support -> Networking options -> Network packet filtering framework (Netfilter)
Networking support -> Networking options -> IP tables support
Networking support -> Networking options -> NAT support
三,ip_tables命令
- 配置 wlan1 为AP模式(
hostapd udhcpd
),wlan0为sta模式 (wpa_supplicant udhcpc
)
👉Linux下的STA和AP控制 - 配置网络共享(NAT 和 IP 转发)
为了让连接到 wlan1 的设备能够通过 wlan0 上网,必须配置网络地址转换(NAT)和 IP 转发。
启用 IP 转发:
sysctl -w net.ipv4.ip_forward=1
- 配置 NAT:
使用 iptables 设置 NAT,将 wlan1 的流量通过 wlan0 转发:
iptables --table nat -A POSTROUTING -o wlan0 -j MASQUERADE
iptables -A FORWARD -i wlan1 -o wlan0 -j ACCEPT
- 连接wlan1产生的热点信息,测试网络连接情况