- 我们执行hostapd进程时的命令举例如下:
hostapd -B /etc/misc/wifi/hostapd.conf -P /var/run/data/hostapd_ssid1.pid -dd -t -f /var/run/hostapd.log
直接敲hostapd可以查看具体参数代表什么意思,这里解释一下常用的:
-B代表后台运行
-dd代表打开更多的log选项
-t是在log中添加时间戳
-f+文件代表运行的log保存在这个文件中,比如上述命令中,当热点开启失败,或者说hostapd进程执行失败时。就可以直接查看/var/run/hostapd.log文件,比较方便
-P+文件表示这个hostapd进程的PID数保存在这个hostapd_ssid1.pid -dd文件中,有利于查看。当然,这里我们用ps|grep hostapd一样能找到
/etc/misc/wifi/hostapd.conf就是最重要的配置文件了,也是我们要详细展开说明的文件。
- 首先说明,hostapd.conf中的选项很多,大部分选项都不是必须要设置的,一方面是用不到,另一方面是因为每个选项都有默认值,更重要的原因是很多参数都是要靠底层驱动实现的,这里仅仅提供个接口,若底层没这个功能,这里修改了也没有用。以下详细列举每个配置的释义:
##### hostapd 配置文件相关 ############################################## | |
interface=wlan0 | hostapd操作进程的接口名称。用ifconfig -a看一下我们的网络设备口,当这里是对wlan0操作时,这里就写上interface=wlan0;当对wlan1操作时,这里就写上interface=wlan1。如果这里不配置的话就得在执行hostapd进程时加上-i wlan0的参数了。 当我们起多个AP时,这里是有区别的。 |
bridge=br0 | 用于上面的interface桥接在知道的网络桥上,这里br0是网桥的名称。用的少,更多的是直接用brctl命令来控制AP接口桥接到哪里。 |
driver=nl80211 | 驱动接口类型,我们一般都是nl80211/cfg80211的开源驱动架构,hostapd作为用户侧进程,需要和下层cfg80211驱动接口交互,所以这里用nl80211。 |
ctrl_interface=/var/run/hostapd | 用于独立控制进程的接口。在用户侧,可以通过hostapd_cli来与hostapd进程交互,这个接口就充当了中间人的角色,/var/run/hostapd是hostapd_cli和hostapd两者共同确定的,名字可以任意改,默认是/var/run/hostapd。但是当hostapd_cli指定为别的接口时,hostapd侧也应该随其指定。比如 hostapd_cli -i wlan0 -p /data/vendor/wifi/wpa/sockets,那么这里ctrl_interface就要变为/data/vendor/wifi/wpa/sockets才能让hostapd_cli顺利调用。 ctrl_interface_group=wheel。ctrl_interface_group类似ctrl_interface,由多用户组成的组来控制hostapd。 |
##### IEEE 802.11协议相关 ####################################### | |
ssid=SA515M_2_2G | ssid的值就是热点名,支持中文、数字、双引号和转码符号,当utf8_ssid=1时,(默认为1),是UTF-8转码。参考创建中文热点名/连接中文热点,要注意ssid最长32个字节 |
country_code=CN | 设置国家码。参考ISO/IEC 3166-1标准,默认是US,不同的国家码有着不同的频段限制和发送功率等限制。这里设置国家码有可能因为一些接口问题设置不到底层去,还需要进一步查看底层驱动的具体国家码设置情况。 |
ieee80211d=1 | 使能80211d协议,即将国家码存储在beacon帧中,便于环境中的设备知晓此热点的国家码,从而知道信道使用限制情况。但是一样的,这个配置生效与否归根结底要底层帮助实现,这里配置好不一定就生效。 |
ieee80211h=1 | DFS(动态频率选择)和TPC(传输功率控制有关),不同的国家码对应的频率和功率有不同的限制,DFS用来躲避5G下的雷达信道,和上面的11d参数一样,默认是打开的。 |
local_pwr_constraint=3 | Power Constraint element这个字段添加到beacon或probe response中,和功率传输控制相关。在ieee80211d=1生效下才生效。 |
spectrum_mgmt_required=1 | 将Spectrum Management filed 添加到Capability Information filed中去。在local_pwr_constraint生效时才生效。 |
hw_mode=g | 比较重要的参数之一。我们知道对于WiFi协议而言,早期的80211a/80211b/80211g物理层各不一样,11a是5G下的标准,11g是2.4G下的标准,11b虽然也是2.4G下的,但是因为它是非OFDM调制,所以后面的11n/11ac/11ax等不再兼容它。从80211n开始物理层没有根本性的变化,都是在前向兼容。所以对于802.11n/ac/ax等制式,物理层这里字段还是80211a(对应5G)或者80211g(对应2.4G),只有这两种选择。除此之外还有ad选择,对应60G频段,没有用过。 |
channel=0 | 信道值,默认为0,当为0时代表不指定信道,热点在环境中找个较干净的信道来实施,这个机制对应叫ACS(自动频率选择) |
op_class=131 | 协议IEEE 802.11, Annex E中有个Country information and operating classes部分,里面列出了各个国家码下面的信道集合,我们得出来的所有国家码下面的信道,都是从表里得出的。若指定了信道就不用指定class,前提是信道指定的对。 |
acs_num_scans=5 | 上面说的ACS的扫描次数,默认5次,增加的话会拖长AP开启时间。一般不改 |
acs_chan_bias=1:0.8 6:0.8 11:0.8 | ACS时的对信道加权重机制,加了权重的信道在选择时有更多的机会被选中。根据描述,这里添加的数值越大越不容易被选中。 |
#chanlist=100 104 108 112 116 #chanlist=1 6 11-13 #freqlist=2437,5945,5965 #freqlist=2437,5985-6105 |
和op_class类似,都是指定一个信道的范围供选择,而不是单单指定一个信道。用的比较少。 |
acs_exclude_dfs=1 | 用来在ACS的列表中执行DFS,就是说只要该信道在ACS列表中,哪怕没有最终被选中,也执行了一次DFS判断。 |
acs_exclude_6ghz_non_psc=1 | 只在6G信道上做ACS,用来给只支持6G信道的热点用。 |
beacon_int=100 | beacon包的间隔时间,单位是1.024ms,100就代表每隔近似100ms后发一个beacon,每秒发10个beacon,Beacon_int的大小会影响到漫游、power save等性能,一般默认不改。 |
dtim_period=2 | 是一个周期值,代表经过几个beacon周期出现一个DTIM,DTIM是一种位图结构的流量指示字段,在beacon中设置,当STA处于休眠模式没法及时收包时,AP用这个字段来指示哪个STA有待取走的包,然后唤醒STA。对于STA来说,dtim_period值越大就越省电,但是与此同时就可能不能及时接收AP为它缓存的包,造成延时高的后果。 |
max_num_sta=255 |
最大连接数。尽管理论下,协议中规定的极限STA接入数为2007个,但是没有厂商能支持这么多。就算这里设置了比较大的数,很多厂商仍然支持不到。这里只是一个限定值而已。 |
rts_threshold=-1 | RTS/CTS门限值,默认-1,disabled |
fragm_threshold=-1 | 分包门限值,默认-1,disabled |
#supported_rates=10 20 55 110 60 90 120 180 240 360 480 540 #basic_rates=10 20 |
物理层基本速率的设置,我们一般不改 |
#beacon_rate=10 | beacon发送时的物理层速率设置,为了更好的兼容性,即beacon按照最低物理层速率发送,以便让最多的WiFi设备接收到。我们一般不改 |
preamble=1 | 短前导码设置。像这种类型的参数很大程度上决定于驱动,这里只是提供个接口。默认是0,不允许短前导码 |
#macaddr_acl=1 #accept_mac_file=/etc/hostapd.accept #deny_mac_file=/etc/hostapd.deny |
黑名单配置方法: macaddr_acl=0 deny_mac_file=/etc/hostapd.deny #accept_mac_file=/etc/hostapd.accept 白名单配置方法: macaddr_acl=1 accept_mac_file=/etc/hostapd.accept #deny_mac_file=/etc/hostapd.deny 正常deny_mac_file和accept_mac_file都是注释掉的,当配置成黑白名单的时候就会打开。注意只对应打开一个,在hostapd.accept填入白名单的Mac地址,hostapd.deny中填入黑名单的mac地址,然后确保文件放置路径正确。 |
auth_algs=3 | # bit 0 = Open System Authentication # bit 1 = Shared Key Authentication (requires WEP) 其中bit 0表示开放系统认证(Open System Authentication, OSA),bit 1 表示共享密钥认证(Shared Key Authentication, SKA)。若设置alth_algs的值为1,表示只采用OSA,开出来的热点没有密码;如果为3则两种认证方式都支持,取决于其它参数来具体实行。 注:针对wep加密方式,曾有过笔记本连接不了auth_algs =2的热点,auth_algs=3就可以了,但是手机一切正常。本质上是兼容性问题。 |
ignore_broadcast_ssid=0 | 热点隐藏功能。ignore_broadcast_ssid=1时,发送的beacon中没有ssid值,长度为0,且不回复STA的probe request帧。用于STA知道热点存在的情况,STA可以直接关联该热点。ignore_broadcast_ssid=2时,发送的beacon中没有ssid值,但是长度还在。为了兼容一些不支持没有SSID字段的STA。 |
no_probe_resp_if_max_sta=0 | 在达到最大连接数时max_num_sta,用于不回应有的STA还想尝试关联的行为。这样那些STA就不会被reject后又重新发起连接请求了。 |
vendor_elements=dd0411223301 | 在Beacon和Probe Response帧后添加客制化元素,名字是vendor_elements,值为dd0411223301 |
assocresp_elements=dd0411223301 | 在(Re)Association Response 帧中添加客制化元素,名字是assocresp_elements,值为dd0411223301 |
# Low priority / AC_BK = background #tx_queue_data3_aifs=7 #tx_queue_data3_cwmin=15 #tx_queue_data3_cwmax=1023 #tx_queue_data3_burst=0 |
EDCA相关配置。AIFS:仲裁帧间间隔,AIFS=SIFS+n*SIFS。如果n越大,那么意味着每一次接入信道前需要等待更多的时间,从而优先级更低,CWmin和CWmax是竞争窗口最低和最高的设置值。burst:最大单次传输时间,单位是毫秒。 Low priority / AC_BK = background,低优先级,对应data3 Normal priority / AC_BE = best effort,普通优先级,对应data2 High priority / AC_VI = video,高优先级,对应data1 Highest priority / AC_VO = voice,最高优先级,对应data0 默认数据是AC_BE传输;管理帧是AC_VO;PS-POLL优先级最低,为AC_BE |
wmm_enabled=1 uapsd_advertisement_enabled=1 wmm_ac_bk_cwmin=4 wmm_ac_bk_cwmax=10 wmm_ac_bk_aifs=7 wmm_ac_bk_txop_limit=0 wmm_ac_bk_acm=0 |
WMM是WiFi联盟提出来的概念。WMM基本对应了EDCA,WMM-PS基本对应了ASPD。这里系列的参数是用来给与AP关联的STAs用的,让STA传到AP的数据遵循这些优先级。 wmm_enabled是开关,uapsd_advertisement_enabled用来让AP广播自己的u-apsd能力。 txop_limit是TXOP限制值,以32ms为单位。 |
multi_ap=0 | mesh功能相关的参数 ,backhaul BSS(回传bss,对于用户不可见),fronthaul BSS(前传bss,对于用户可见) 0 = disabled (default),1 = AP support backhaul BSS,2 = AP support fronthaul BSS,3 = AP supports both backhaul BSS and fronthaul BSS |
wep_default_key=0 #wep_key0=123456789a #wep_key1="vwxyz" #wep_key2=0102030405060708090a0b0c0d #wep_key3=".2.4.6.8.0.23" |
wep相关。wep_default_key的值决定了第几个wep_key生效,正常我们就用首个,wep_key0就行,别的不用管。注意输入的字符长度有规定,不能像PSK加密那样密码长度随意定。 密钥长度说明: 选择64位密钥,输入16进制数字符10个,或者ASCII码字符5个 选择128位密钥,输入16进制数字符26个,或ASCII码字符13个 选择152位密钥,输入16进制数字符32个,或ASCII码字符16个 |
#ap_max_inactivity=300 | 如果AP关联的STA在一定时间内没有和AP发生任何联系,那AP会发个问询包到STA,若STA没应答,那么AP就清理掉这个STA。这个值就是用来设置这个时间的。默认300秒。 |
#skip_inactivity_poll=0 | 这个参数用来打开还是关闭上面那个ap_max_inactivity的feature |
#disassoc_low_ack=1 | 用来当STA可能因为丢包导致回应过少时,主动断开该STA的连接。这里具体还是要取决于驱动。 |
#max_listen_interval=100 | 用来保活STA的最大beacon 间隔数,最大100的话,默认情况下就是10秒左右。 |
#wds_sta=1 |
用于关联的STA的4个addr都被用到的情况,典型的是桥接功能。只在driver=nl80211架构下有效。 |
#wds_bridge=wds-br0 | 如上,是桥的名称 |
#start_disabled=0 | 用于让AP起来的时候不产生beacon帧,但是其它帧比如probe response还是可以产生的,所以对于想连接它的STA来说并不是透明的,还是可以连接的。 |
#ap_isolate=1 | 与AP关联的STA之间的隔离可以用来防止低等级的桥接包在它们之间传递,默认值是0,即这些低等级的包默认允许。 |
#bss_load_update_period=50 | BSS load是一个用在beacon和probe response帧中的element,若这个值设置,则使能这个bss load element并设置更新间隔,时间间隔是这个值*beacon int |
#chan_util_avg_period=600 | Channel utilization是bss load element的一个字段。用来衡量信道利用情况。应该是bss_load_update_period的倍数来使信道利用率更精确。 |
#bss_load_test=12:80:20000 | 用来配置bss load element的具体值来用于测试目的。 |
#multicast_to_unicast=0 | 用来AP对一些ARP/IPV4/IPV6包进行多播转单播的申请对话过程。若被使能,则这些包被单独发给STA,DA被他们自己的MAC地址替代而不是组播地址。注意,这可能会打破接收方的某些期望行为。 |
#broadcast_deauth=1 | 在热点打开或关闭时发送deauth解除认证帧,默认是打开的。 |
##### IEEE 802.11n协议相关 ###################################### | |
#ieee80211n=1 | 是否HT字段被打开。我们现在的wifi模组至少都是WiFi4起步,所以这个是要打开的,默认关闭。 |
#ht_capab=[HT40-][SHORT-GI-20][SHORT-GI-40] | HT_capabilities 这是个对应11n协议的element, 常用的配置项: [HT40-][HT40+][SHORT-GI-20] [SHORT-GI-40] 不常用的配置项: [LDPC][GF][TX-STBC][RX-STBC1][RX-STBC12][RX-STBC123][DELAYED-BA][MAX-AMSDU-7935][DSSS_CCK-40][40-INTOLERANT][LSIG-TXOP-PROT]
我们知道WiFi信道原始只有20M,后面发展出40/80/160 M,要知道40M是由两个20M合并而来,有primary_channel和secondary_channel的概念。参考WiFi信道总结,记住关键点: 40M及往上都是规定好的信道,比如36/40合成一个40M信道,44/48合成一个40M信道,但是40和44不能合成一个40M 信道。 所以对于5G中HT40-,有下面的信道供选择:40,48,56,64...,对于这些信道而言,secondary_channel往低发展,所以是“-”,主信道就是'PrimaryChannelUpperBehavior' 对于5G中HT40+,有下面的信道供选择:36,44,52,60...,对于这些信道而言,secondary_channel往高发展,所以是"+",主信道就是‘PrimaryChannelLowerBehavior’
|
#require_ht=1 | 需要STA支持HT物理层,比如HT-SIG,HT_STF等前导字段,如果STA不支持,那就拒绝连接。现在基本上没有不支持的。 |
#obss_interval=0 | overlapping BSS(OBSS)是WiFi里面很普遍的现象,只要空间内有多个热点在同样的信道内构成相互影响,就叫OBSS。它是构成MAC竞争开销的主要原因,如果设置为非零,要求STA执行重叠通道扫描,以测试哪些STA会受到40mhz流量的影响。这里的参数若设置成非0值,则代表2.4G频段下的AP被允许移动到40M带宽上,前提是周围没有OBSS的热点。 |
#ht2040_coex_disable=0 | HT20/40共存是否被允许,默认是被允许,所以这里是0 |
##### IEEE 802.11ac协议相关 ##################################### | |
#ieee80211ac=1 | 11ac,对应VHT element被不被支持,默认是0不支持。 |
#vht_capab=[SHORT-GI-80][HTC-VHT] | VHT capabilities对应的配置,里面有很多filed,可以参照协议来配置。如:vht_max_mpdu_len/supported_chan_width/Rx LDPC coding capability等,我们一般不配置 |
#require_vht=1 | 和require_ht类似,需要STA支持VHT物理层,比如VHT-SIG,VHT-STF等前导字段,如果STA不支持,那就拒绝连接。 |
#vht_oper_chwidth=1 | VHT下控制带宽的一个比较重要的设置,不管是11ac还是11ax,但凡需要80M带宽,这里都得设置成1。此参数本质上是通过 Channel Width field和Supported Channel Width Set field这两个参数来具体设置带宽的。这具体设置如下: # 0 = 20 or 40 MHz operating Channel width # 1 = 80 MHz channel width # 2 = 160 MHz channel width # 3 = 80+80 MHz channel width |
#vht_oper_centr_freq_seg0_idx=42 #vht_oper_centr_freq_seg1_idx=159 |
用来计算信道的中心频率,计算公式如下,这里就是表示的是信道,代码里面要求个中心频率而已。 center freq = 5 GHz + (5 * index) |
#use_sta_nsts=0 | Nsts(space-time streams)时空中数据流数量。一种用来在(Re)Association Response frame此类帧中的标记,该标记是nsts capability字段,该标记显示要在beamforming框架下使用STA支持的空间流,也就是说此时beamforming决定于STA的能力,而不是AP能力。置1时生效。 |
##### IEEE 802.11ax 协议相关 ##################################### | |
#ieee80211ax=1 | 802.11ax (HE)是否被使能,默认disable。若要使能AP的11ax协议功能,此参数一定要打开。 |
#he_su_beamformer=1 #he_su_beamformee=1 #he_mu_beamformer=1 |
beamforming(波束成型)是WiFi等无线通信中的重要概念。它是一种'指定'天线方向的技术,利用电磁波的在某些位置相位得到增强的特性。beamformer是发波束成型的设备,beamformee是接收波束成型的设备,有利于在嘈杂的环境中,发送-接收端能彼此最大程度的相互倾听,排除环境干扰。SU和MU的区别在于同一时刻AP有没有能力向不同方向的STA发送数据,这也是为什么说MU比SU性能好的地方。 he_su_beamformer:HE single user beamformer support 单用户beamformer支持 he_su_beamformee:HE single user beamformee support 单用户beamformee 支持 he_mu_beamformer:HE multiple user beamformer support 多用户beamformer支持 |
#he_bss_color=1 | bss coloring是11ax的特有技术,用来在mac层和phy层增加一些字段,便于设备区别不同的BSS,有利于提升抗同频干扰的性能。目前可以标记达63个bss,所以这里的值he_bss_color范围是(1-63) |
#he_bss_color_partial=0 |
用来给bss color做辅助计算 |
#he_default_pe_duration=0 | HE Operation field下面的第一个default PE duration的值,单位是us |
#he_twt_required=0 | HE Operation field下面的twt_required设置值,TWT (Target Wakeup Time)目标唤醒时间是11ax的特有技术,在STA和AP关联后就建立一张时间表,然后彼此就能知道唤醒的具体时间点。这是一种高效的节能方式。默认是0,不打开。 |
#he_rts_threshold=0 | 是一种时间单位,用来管理非11ax的STA关联在支持ax的AP上时,rts/cts的使用。以16us为单位 |
#he_oper_chwidth #he_oper_centr_freq_seg0_idx #he_oper_centr_freq_seg1_idx |
he_oper_chwidth和vht_oper_chwidth一样。但凡需要80M带宽,这里都得设置成1 # 0 = 20 or 40 MHz operating Channel width # 1 = 80 MHz channel width # 2 = 160 MHz channel width # 3 = 80+80 MHz channel width 另外两个参数和VHT一样,也是用来计算信道的中心频率 |
#he_basic_mcs_nss_set | 基本NSS/MCS设置集, 0 = HE-MCS 0-7, 1 = HE-MCS 0-9, 2 = HE-MCS 0-11, 3 = not supported |
#he_mu_edca_qos_info_param_count #he_mu_edca_qos_info_q_ack #he_mu_edca_qos_info_queue_request=1 #he_mu_edca_qos_info_txop_request #he_mu_edca_ac_be_aifsn=0 #he_mu_edca_ac_be_ecwmin=15 #he_mu_edca_ac_be_ecwmax=15 #he_mu_edca_ac_be_timer=255 |
he下的edca参数配置,参考协议,qos info field部分 |
#he_spr_sr_control #he_spr_non_srg_obss_pd_max_offset #he_spr_srg_obss_pd_min_offset #he_spr_srg_obss_pd_max_offset |
Spatial Reuse空间复用技术,主要是我们前面说的bss color技术,这里的参数就是用来做Spatial Reuse设置集的,参考协议Spatial reuse operation部分 |
下面的设置不展开,一方面不熟悉,再者对于我们工业级非专业路由器WIFI产品来说,基本不会拿去做这些功能,比如企业级加密。值得一提的是我们最熟悉的Auth-Associate-四路握手的加密的连接过程里,其前面的Auth过程是一种开放系统的Auth(Open System authentication),不会起加密作用,和这里的802.1X/EAP authentication相对应。 ##### IEEE 802.1X-2004 相关配置################################## 802.1X-2004注意不要和802.11x混淆,802.1X标准是基于端口的访问控制标准,提供一个authorization框架。比较常见的加密方式如下: EAP-TLS EAP-TTLS/MSCHAPv2 PEAPv0/EAP-MSCHAPv2 PEAPv1/EAP-GTC/EAP-SIM EAP-AKA 有三个主要的组件: 第二层的authentication 协议叫做Extensible Authentication Protocol (EAP)在802.1X框架中使用,用来证明第二层里面的用户。 ##### MACsec ################################################################## ##### Integrated EAP server ################################################### 下面的设置集就和RADIUS认证服务相关 ##### RADIUS client configuration ############################################# ##### RADIUS authentication server configuration ############################## |
|
##### WPA/IEEE 802.11i configuration ########################################## 这里开始就是我们比较熟悉的加密方式了,比如wpa/wpa2/wpa3等等,这里有个统一的标准,叫做802.11i,又叫做RSN,强健安全网络 |
|
#wpa=2 | # bit0 = WPA # bit1 = IEEE 802.11i/RSN (WPA2) (作用于dot11RSNAEnabled) 在wpa时,wpa=1;单独wpa2或者单独wpa3时,wpa=2; 由上面基本的配置可以衍生出下面兼容配置:wpa/wpa2兼容时,wpa=3;wpa/wpa2/wpa3兼容时,wpa=3;wpa2/wpa3兼容时,wpa=2 |
#extended_key_id=0 | 用于不从key ID 0开始的一些重新键入PTK 的选项,默认是0,不打开。 |
#wpa_psk= #wpa_passphrase=secret passphrase |
# wpa_psk (作用于dot11RSNAConfigPSKValue) 这个wpa_psk是个固定64个hex大小的值,总计256bits,它是由ssid+passphrase(密码)算出来的,正常我们不会在这里赋值,而是直接给下面的值,就是密码。在四路握手过程中,总会要生成这个psk值的。 # wpa_passphrase (作用于dot11RSNAConfigPSKPassPhrase) 本热点的密码 |
#wpa_psk_file=/etc/hostapd.wpa_psk | 一个用来存储多个wpa_psk的txt文件,这里是绝对路径,用的较少 |
#wpa_psk_radius=0 |
WPA的密码从RADIUS服务器上接收,前置条件是macaddr_acl设置为2 |
#wpa_key_mgmt=WPA-PSK WPA-EAP | 作用于dot11RSNAConfigAuthenticationSuitesTable 接受的密钥管理集合。可以设置多个,中间以空格分开,分为wpa-psk 和wpa-eap两大类。常用的有以下: # WPA-PSK = WPA-Personal / WPA2-Personal # WPA-EAP = WPA-Enterprise / WPA2-Enterprise # SAE = WPA3-Personal # OWE = Opportunistic Wireless Encryption 用于WPA3中的开放加密,和SAE相对应 # DPP = Device Provisioning Protocol ,又叫wifi easy connect |
#wpa_pairwise=TKIP CCMP #rsn_pairwise=CCMP |
作用于dot11RSNAConfigPairwiseCiphersTable TKIP和CCMP都是RSN中的两个数据加密算法,和WEP相对应。CCMP又叫AES。wpa_pairwise作用于WPA,rsn_pairwise作用于WPA2及以上,但是我们经常只设置wpa_pairwise,因为rsn_pairwise默认是使用的wpa_pairwise的值,所以我们设置一个就等于全部设置了,除非我们想单独区分wpa,没这个必要。 值得注意的是,wpa_pairwise应用于单播帧,组播和广播加密算法在属于他们的参数(group_cipher)未被设置的情况下也派生自这里的wpa_pairwise参数,参考文档:TKIP/CCMP
即对应关系为: AP:wpa_pairwise(CCMP)---STA(CCMP+TKIP)or STA(CCMP) AP:wpa_pairwise(CCMP+TKIP)---STA(CCMP+TKIP) 这种组合就连接不了了:AP:wpa_pairwise(CCMP+TKIP)---STA(CCMP) 单独的TKIP加密不应该存在。所以wpa_pairwise设置CCMP,STA模式下设置CCMP+TKIP可以最大程度避免兼容性问题。 |
#group_cipher=CCMP | 这里的参数就是上面提到的组播和广播的加密方式,一般不设置,当然设置好的话可以避免一些兼容性问题,比如上面连接不了的组合在下面设置时又可以连接上: AP:wpa_pairwise(CCMP+TKIP)+group_cipher=CCMP ---STA(CCMP) |
#wpa_group_rekey=86400 | 作用于dot11RSNAConfigGroupRekeyTime 用来过一段时间更新GTK(组临时秘钥,它用于组播数据帧和广播数据帧的加密和解密),这里更新GTK并不是重新进行一次四路握手过程,只是第3/4个重新握手。CCMP时默认是一天时间、86400秒,TKIP默认是10分钟。若时间到了,AP进入更新流程,但是STA没做好准备,比如还处在睡眠中时,这时更新失败,STA断联AP。 我们知道四路握手就是PMK派生出PTK(GMK派生GTK),利用PTK来组成STA和AP之间的成对(pariwise)密钥,在个人加密中PMK就可以看出PSK,PSK就是我们WiFi的密码,PMK由PSK经hash运算生成。 |
#wpa_strict_rekey=1 | 作用于dot11RSNAConfigGroupRekeyStrict 是否使能任何断联的STA都会更新GTK,默认是打开的。 |
#wpa_group_update_count=4 | 作用于dot11RSNAConfigGroupUpdateCount 这个值用来设置一个尝试次数,尝试在四路握手1/2失败后重新四路握手的次数,默认4次。我们在输入密码错误后总计看到4次1/2流程源于此。 |
#wpa_gmk_rekey=86400 | 更新GMK的时间间隔,和wpa_group_rekey类似。 |
#wpa_ptk_rekey=600 #wpa_deny_ptk0_rekey=0 |
wpa_ptk_rekey,更新PTK的时间间隔,和wpa_group_rekey类似。用于减轻一些针对TKIP缺陷的攻击。PTK重键有很多驱动程序/设备的问题,对于这样的设备,惟一安全的更新PTK就是断开连接。wpa_deny_ptk0_rekey用来对上面hostapd-驱动之间更新PTK时问题的变通处理,简而言之就是标记什么情况下可以更新PTK。wpa_deny_ptk0_rekey为0时,表示只要wpa_ptk_rekey被配置即生效;为1时表示还要看看驱动显不显示支持;为2时代表不被允许更新。 |
#wpa_pairwise_update_count=4 | 作用于dot11RSNAConfigPairwiseUpdateCount 规定了四路握手中的1/3个帧被重试的次数,默认也是4。 |
#wpa_disable_eapol_key_retries=1 | 这个参数是用来抵御key值重安装攻击的变通办法。相当于前面的wpa_group_update_count和wpa_pairwise_update_count统统不生效了,这就导致了四路握手在嘈杂环境中有更大的概率握手不成功。默认是不打开的,个人觉得没什么用,现在的WPA3已经足够安全了。 |
#rsn_preauth=1 | 作用于dot11RSNAPreauthenticationEnabled 用来打开预认证功能(pre-authentication)以加速漫游的过程,这里的漫游仅针对企业级漫游,省掉了802.1x认证过程获取PMK的时间。 |
#rsn_preauth_interfaces=eth0 | 接受预认证帧的接口列表,以空格分隔(例如,'eth0'或'eth0 wlan0wds0')。该列表应包括用于连接到其他ap的所有接口。这可能包括有线接口和WDS链接。不应该添加指向STA的正常无线数据接口(例如wlan0),因为预认证只用于当前关联的ap之外的ap。 |
#ieee80211w=0 | ieee80211w是用来专门保护管理帧的协议(又叫PMF:protect managent frames),为了兼容性考虑,有可选(Management frame protection capable)和必需(Management frame protection required)两个选项。 # 0 = disabled (default) # 1 = optional=Management frame protection capable # 2 = required=Management frame protection required 在WPA3兼容模式时,wpa_key_mgmt=WPA-PSK SAE,ieee80211w=1 在WPA3 only模式时,wpa_key_mgmt=SAE,ieee80211w=2 参考文档80211w与WPA3的关系 |
#group_mgmt_cipher=AES-128-CMAC | 所有连接到BSS的STA也需要支持所选密码。默认的AES-128-CMAC是部署设备中通常可用的唯一选项 |
#beacon_prot=0 | beacon帧保护,默认关闭,取决于ieee80211w要等于非0值 |
#assoc_sa_query_max_timeout=1000 | 作用于dot11AssociationSAQueryMaximumTimeout SA_query(Security Association Query),是80211w中的一个新的过程标准,所有支持PMF的STA必需支持SA query过程,在STA已连接AP后,SA query request由STA发给AP,AP返回SA query response。 assoc_sa_query_max_timeout这个时间就用来STA在发完SA query request后,等待response最大的时间。单位是一个 beacon interval (1.024ms) |
#ocv=1 | ocv: Operating Channel Validation操作信道验证 一种防止多信道中间人攻击的方法,打开这个就需要打开ieee80211w,默认是关闭。 |
#disable_pmksa_caching=0 | PMKSA( PMK Security Association )是PMK缓存信息的名称。它对于企业级加密漫游很重要。 PMKSA包括AP的MAC地址、 PMK的生命周期( lifetime) , 以及PMKID( PMK IDentifier,用于标示这个PMKSA, 其值由PMK、 AP的MAC地址、 STA的MAC地址等信息用Hash计算得来) 。注意这里PMKID包含了STA和AP双方的mac地址。当STA连接AP时,STA会根据目标AP的MAC地址判断自己是否已经缓存PMKSA信息,有的话就把该PMKID放在assoccia req/re-associa req帧里告诉AP,AP再来根据这个PMKID判断是否缓存了PMKSA。这样当STA重新回到这个AP时,不用进行完整的认证过程(针对企业级加密,又可以理解成802.1x认证),直接进行四路握手就好了。 这里就是是否使能PMKSA缓存,默认不缓存。 |
#okc=1 | 和pmksa缓存类似,也是用于企业级加密缓存的一种方式。和pmksa区别在于,OKC会将PMK在AP之间进行交换。 |
#sae_password=secret | sae_password用来单独给WPA3(SAE)加密的连接作密码。而wpa2及以前的密码还是wpa_pairwise,两者在都使能的情况下互不影响,没用过,觉得没有必要使用。 |
#sae_anti_clogging_threshold=5 | 作用于dot11RSNASAEAntiCloggingThreshold 定义了多少个SAE加密的实体在抗拥塞机制前可以同时继续 |
#sae_sync=5 | 作用于dot11RSNASAESync 最大SAE加密错误允许发生的数量,超过这个错误就要被断联了 |
#sae_require_mfp=0 | 此参数可用于对所有协商使用SAE的关联强制进行MFP协商,使用在如下场景下:有SAE能力的设备肯定是MFP-capable的,并且该BSS配置了MFPC(ieee80211w=1)来兼容旧的设备。也就是说上面的AP和STA都是MFPC,也就是11w不是强制的,这时可以通过设置这个参数来让不支持WPA3的来不通过MFP(就是要检查11w这一项)来连接。总结就是当sae_require_mfp=1时,非SAE站点可以不使用MFP进行连接,而SAE站点需要协商MFP |
#dhcp_server=127.0.0.1 #dhcp_server_port=67 #dhcp_relay_port=67 |
若配置,则hostapd做DHCP转发角色,在接收到DHCPDISCOVER信息后把它转发给特定的DHCP服务器进一步处理,hostapd将等待来自该服务器的响应,然后用封装此DHCP响应的(Re)关联响应帧进行应答。own_ip_addr是用来和DHCP服务器交互的本地地址。dhcp_server_port是DHCP服务器的UDP端口,dhcp_relay_port是与DHCP服务器交互的本地UDP端口 |
#transition_disable=0x01 | 当网络完成transition步骤时,AP可以通知经过身份验证的站点在其网络配置文件中禁用transition模式,这里的transition mode是过渡模式的意思。例如,一旦周围充足的AP都已经升级过来支持更安全的另一个选项,当这个参数transition_disable被设置了,STA就会预期中将更低级别的安全模式disable掉,即禁用过渡模式,包含WEP、TKIP、和不带PMF的连接。 |
##### IEEE 802.11r configuration ############################################## 802.11r的功能是快速BSS切换(FT,Fast Basic Service Set Transition),也称为快速漫游(fast roaming)。802.11r是唯一可以应用在personal加密的漫游机制,且不需要四路握手,前面提到的pmksa_caching和OKC都是应用在企业级加密且需要四路握手。BTW:所有的漫游都不需要STA来重新获取IP地址 |
|
##### Neighbor table ########################################################## neighbor table:邻居报告,是漫游前置步骤中的重要一环。11r一般要结合11k来使用,neighbor table是11k中的概念。邻居报告请求被发送到一个AP,该AP返回一个邻居报告,其中包含关于作为服务集转换候选的已知邻居APs的信息。邻居报告包含来自MIB中关于邻居APs的表dot11RRMNeighborReportTable的信息。这个请求/报告对使STA能够获得关于相关AP的邻居的信息,以用作潜在的漫游候选对象。 |
|
##### Wi-Fi Protected Setup (WPS) ############################################# WPS又叫WSC,用于简化STA连接AP的过程,典型的有PBC和PIN连接。是P2P连接的基础,和p2p连接的区别在于WPS连接前设备角色是固定的,一个是AP一个是STA;而对于p2p来说,连接前设备角色都一样,需要协商出AP(GO)。 |