wifi桥接-sta和ap共存

wifi常见的几个模式,sta,ap,monitor,中继,桥接,本文主要讲述linux wifi做桥接的通用方法
-----再牛逼的梦想,也抵不住傻逼般的坚持! --2023-12-27 10:15:13

ps:这里问大家一个问题,你认为中继和桥接的区别是什么?
谈谈个人看法:中继的主要功能是扩展无线信号的传输范围;桥接的主要是将两个局域网(LAN)连接起来,可以通过有线或无线连接的方式将数据包转发到另一个LAN。简单的说,中继多通过无线拓展,桥接则通过有线或者无线拓展;
另外中继 sta和ap网段不通,ap会单独启一个udhcpd,无线桥接时,sta和ap共存,ap下的节点设备ip是从路由器获取。(如有描述错误,欢迎指正)

2024-01-20 11:00 更新 近期开发过程中遇到另外一个需求,对中继和桥接有了点新的认识,这里做下补充下自己的理解
wifi桥接: 单个设备如果需要做桥接,是将一个物理网卡虚拟出两张,例如,wlan0, wlan1,两张网卡之间搭建一个“bridge”,比如br0,这个时候br0则在wlan0 和wlan1之间建立了桥接,至于wlan0和wlan1分别用于sta还是ap,这只需看用户自身的需求即可。(ps:1.需要sta和ap同信道;
2.sta和ap网卡ip均从上级路由获取,为同一个网段)
wifi中继: 同样,单个设备如果需要做中继,即做sta又做ap,类似于路由器,则是将两张网卡,wlan0,wlan1一个做sta一个做ap,在共存的基础上,在使用iptables工具创建规则;(ps:1.sta和ap同信道;2.sta和ap ip可不同网段,ap可以自己起一个udhcpd)
2024-04-18 14:50 更新近期对网桥和中继又有了新的认识,这里做下记录。网桥的数据流是走的二层,而中继则是走三层,他们依赖的一些产物也不同,比如走二层网络的话需要在内核开启bridge相关配置,数据转发管控是通过ebtables,走三层则可使用iptables对数据转发进行管控。

讲到这里,我发现原来自己的这篇文章主题是错误的,这里应该是一篇桥接文章,而不是中继;如果大家想了解中继文章,可打开传送门:https://blog.csdn.net/Bgm_Nilbb/article/details/135712893

言归正传,wifi做桥接,主要分为如下四步,

一.内核修改

1.menuconfig打开bridge选项

-# CONFIG_BRIDGE is not set
+CONFIG_STP=m
+CONFIG_BRIDGE=m
+CONFIG_BRIDGE_IGMP_SNOOPING=y
 CONFIG_HAVE_NET_DSA=y
 # CONFIG_NET_DSA is not set
 # CONFIG_VLAN_8021Q is not set
 # CONFIG_DECNET is not set
+CONFIG_LLC=m

2.屏蔽STATION判断

--- a/src/net/wireless/core.c
+++ b/src/net/wireless/core.c
@@ -1117,8 +1117,8 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
-               if ((wdev->iftype == NL80211_IFTYPE_STATION ||
+               if ((
                     wdev->iftype == NL80211_IFTYPE_P2P_CLIENT ||
                     wdev->iftype == NL80211_IFTYPE_ADHOC) && !wdev->use_4addr)

3.加载相关ko

insmod llc.ko
insmod stp.ko
insmod bridge.ko

二.wifi驱动修改

驱动中需要支持bridge功能,具体修改需要咨询厂商
(ps:若不涉及fw修改,也可自行处理)

三.开源库处理

1.wpa_supplicant交叉编译
参考https://blog.csdn.net/Bgm_Nilbb/article/details/120724443
2.hostapd交叉编译
参考https://blog.csdn.net/Bgm_Nilbb/article/details/135413262
3.brctl交叉编译
参考https://blog.csdn.net/Bgm_Nilbb/article/details/135118007
4.dhcp(udhcoc&udhcpd)交叉编译
参考https://blog.csdn.net/Bgm_Nilbb/article/details/131786487

四.验证方法

1.驱动加载

insmod llc.ko 
insmod stp.ko
insmod bridge.ko
insmod wifi.ko
sleep 3
ifconfig wlan0 up
ifconfig p2p0 up
ifconfig wlan0 0.0.0.0
ifconfig p2p0 0.0.0.0
brctl addbr br0 //ifconfig -a能看到br0
brctl addif br0 wlan0
brctl addif br0 p2p0
ifconfig br0 up

2.连接路由器

wpa_supplicant -iwlan0 -Dnl80211 -c sta.conf  -b br0 &
sleep 2
udhcpc -i br0 &

3.启动softap

killall udhcpd    //(IP地址由连接的路由器分配,不需要udhcpd进程)
hostapd  ./ap.conf & //(ap.conf需要加上bridge=br0)

ps:softap和路由器的信道需要保持一致,另内核中很有可能会通过国家码限制信道的使用

五.附录

sta.conf

ctrl_interface=/var/run/wpa_supplicant
network={
        ssid="aaa"
        #ssid="mi"
        psk="12345678"
}

ap.conf

interface=p2p0
driver=nl80211
bridge=br0
ssid=ap_test
hw_mode=g
channel=13
skip_inactivity_poll=1
ap_max_inactivity=300
beacon_int=100
dtim_period=1
max_num_sta=10
rts_threshold=2347
fragm_threshold=2346
macaddr_acl=0
auth_algs=3
ignore_broadcast_ssid=0
ieee80211n=1
###IEEE 802.11ax (HE) is enabled/disable
#ieee80211ax=1
ht_capab=[HT20][SHORT-GI-20][RX-STBC1] #only HT20
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸡蛋炒肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值