Hostapd.conf详细释义

2023-05-16

  • 我们执行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_2Gssid的值就是热点名,支持中文、数字、双引号和转码符号,当utf8_ssid=1时,(默认为1),是UTF-8转码。参考创建中文热点名/连接中文热点,要注意ssid最长32个字节
country_code=CN设置国家码。参考ISO/IEC 3166-1标准,默认是US,不同的国家码有着不同的频段限制和发送功率等限制。这里设置国家码有可能因为一些接口问题设置不到底层去,还需要进一步查看底层驱动的具体国家码设置情况。
ieee80211d=1使能80211d协议,即将国家码存储在beacon帧中,便于环境中的设备知晓此热点的国家码,从而知道信道使用限制情况。但是一样的,这个配置生效与否归根结底要底层帮助实现,这里配置好不一定就生效。
ieee80211h=1DFS(动态频率选择)和TPC(传输功率控制有关),不同的国家码对应的频率和功率有不同的限制,DFS用来躲避5G下的雷达信道,和上面的11d参数一样,默认是打开的。
local_pwr_constraint=3Power 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.8ACS时的对信道加权重机制,加了权重的信道在选择时有更多的机会被选中。根据描述,这里添加的数值越大越不容易被选中。

#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=-1RTS/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
#basic_rates=10 20 55 110
#basic_rates=60 120 240

物理层基本速率的设置,我们一般不改
#beacon_rate=10beacon发送时的物理层速率设置,为了更好的兼容性,即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=50BSS load是一个用在beacon和probe response帧中的element,若这个值设置,则使能这个bss load element并设置更新间隔,时间间隔是这个值*beacon int
#chan_util_avg_period=600Channel 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]

  • 比较重要的是设置下面这个field:Supported channel width set,其中有两个参数配置是我们用的最多的:[HT40-][HT40+]

我们知道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’

  • 对于其它的field,[SHORT-GI-20] [SHORT-GI-40]等,协议中都有说明
#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=0HT20/40共存是否被允许,默认是被允许,所以这里是0
##### IEEE 802.11ac协议相关 #####################################
#ieee80211ac=111ac,对应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=0Nsts(space-time streams)时空中数据流数量。一种用来在(Re)Association Response frame此类帧中的标记,该标记是nsts capability字段,该标记显示要在beamforming框架下使用STA支持的空间流,也就是说此时beamforming决定于STA的能力,而不是AP能力。置1时生效。
##### IEEE 802.11ax 协议相关 #####################################
#ieee80211ax=1802.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=1bss coloring是11ax的特有技术,用来在mac层和phy层增加一些字段,便于设备区别不同的BSS,有利于提升抗同频干扰的性能。目前可以标记达63个bss,所以这里的值he_bss_color范围是(1-63)

#he_bss_color_partial=0

用来给bss color做辅助计算
#he_default_pe_duration=0HE Operation field下面的第一个default PE duration的值,单位是us
#he_twt_required=0HE 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

有三个主要的组件:
Supplicant:
打算进入无线网的设备,请求获得网络资源的host,每一个supplicant有被authentication server证明过得独特的证书,电脑或手机。
Authenticator:
准确的来说是用词不当,没有验证证书,只是简单的让通路畅通或者关闭。本质上来说它只要知道是谁提供了“宾客名单”,也就是Authentication Server,通常情况下是AP或WLAN controller。维持了俩个虚拟端口,一个未受控制的端口,这个端口被用来EAP通道,受控制的端口被用来作其它通道。首先,不受控制的端口是唯一打开并畅通的通道,一次成功的authentication 将触发受控制的端口被打开,允许其它traffic来穿过网络。
Authentication Server:
使supplicant请求进入的证书有效,并且通知authenticator此supplicant 被授权 。authentication server和supplicant通过第二层的EAP认证协议来联系。

第二层的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

  • 当wpa_pairwise只有一个CCMP加密方式时,那组播广播和单播的加密方式都是CCMP的。这时候只要支持CCMP的STA就可以连接的上。
  • 当wpa_pairwise包含了TKIP和CCMP两种加密方式时,组播广播是靠TKIP来加密,只有单播靠的是CCMP。在此情况下,所有的STA必须支持TKIP加密

即对应关系为:

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=0beacon帧保护,默认关闭,取决于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=secretsae_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)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hostapd.conf详细释义 的相关文章

随机推荐