wpa_supplicant.conf 可以存放在任何位置, 供 wpa_supplicant 应用程序读取.
“wpa” 全称 “Wifi Protected Access”, 译为 “Wifi 安全访问”, 指通过安全的手段接入 wifi 网络.
“supplicant” 中文译为 “请求方”, 这个术语是 IEEE 802.1X 标准中定义的. 通常表示在点对点网络中用户端的一个软件(也可以是个硬件). 客户通过 “请求方” 向服务端提交凭据, 在身份验证器通过后就会允许该客户连接到安全网络. 我们日常用到的 vpn 登录器 AnyConnect 就是一种 supplicant, 还有 wpa_supplicant 等.
推荐标准配置
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="wifi name"
psk="your wifi password"
}
最小化配置
network={
ssid="wifi name"
psk="your wifi password"
}
连接 “隐藏” AP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="wifi name"
psk="your wifi password"
scan_ssid=1
}
scan_ssid
规定了探测请求帧中带有特定 ssid 标识, 这样可以连接上那些 “隐藏自己”(即不响应广播探测请求) 的 ap.仅限 WPA-PSK 认证且 WPA2 加密的网络
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="wifi name"
proto=RSN
key_mgmt=WPA-PSK
psk="your wifi password"
}
连接公司网络
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="wifi name"
key_mgmt=WPA-EAP
eap=PEAP
identity="[email protected]"
password="foobar"
ca_cert="/etc/cert/ca.pem"
phase2="autheap=MSCHAPV2"
}
ca_cert
那一行. 如果没有设置任何证书相关的内容, 就会略过证书校验, 但是也会带来巨大的安全隐患. 有个中间人就会窃取到你的用户名密码, 以及所有的通讯数据.对不同的 AP 采用不同的 ip 策略
如果我们的树莓派需要链接不同的 AP, 并且为不同的 AP 设置不同的 ip 策略, 例如在家用静态 ip, 在公司则采用 DHCP. 那么可以使用以下方式实现:
# /etc/wpa_supplicant
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
id_str="home"
ssid="wifi name"
psk="your wifi password"
}
network={
ssid="wifi name"
key_mgmt=WPA-EAP
eap=PEAP
identity="[email protected]"
password="foobar"
}
还需要对 /etc/network/interfaces
进行配置, 用于对不同网络接入点采用不同的 ip 分配策略:
# /etc/network/interfaces
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
iface home inet static
address 192.168.0.11
network 255.255.255.0
gateway 192.168.0.1
}
整个 wpa_supplicant 配置分为三部分: 全局参数, 认证块和网络配置块. 所有的内容都是以 key=value
的方式描述的. 一般只会用到全局参数和网络配置. 样例如下:
# 全局参数写在这里
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
....
network={
# 这里就是网络配置块的内容
ssid="wifi name"
....
}
全局参数用来描述一些通用的配置.
update_config
是否允许 wpa_cli/wpa_gui 这种应用程序修改配置文件. 如果为 0 那么 wpa_cli 的修改就无法持久化到配置文件中. 如果为 1 则表示可以持久化到配置文件.
device_name
一个对外显示的设备名. 例如: 在路由器的管理界面里会看到.
ctrl_interface
提供一个控制接口, 供外部程序操控 wpa_supplicant. 比如 GUI 程序等, 就可以通过这里开放的接口来与 wpa_supplicant 进行协同管理网络.
有三种配置方法:
ctrl_interface=/var/run/wpa_supplicant
设置一个目录, 可以通过里面的 socket 与 wpa_supplicant 进行交互.ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
在 [1] 的技术上, 支持通过 netdev
组进行操作, 用于向非 root 用户开放权限.ctrl_interface=SDDL=D
这种是 Windows 用到的 DACL 权限控制, 详情请参考: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/security_descriptor_string_format.aspmac_addr
0
表示使用固定的 mac 地址.
1
每次连接时使用不同的 mac 地址. 对于路由器而言, 每次看到的都是一个新设备. 所以如果 ip 地址是通过 DHCP 自动分配的, 那么地址每次连接都会变.
2
与 1
类似, 但是 OUI(本地管理位集)保持一致. mac 地址的前 24 bit 称之为 OUI, 是 IEEE 组织分配给网卡厂家用于区别制造商的.
以上的配置更多是作为 Station 使用的. 如果你想成为一个 AP, 那么以下这些参数可能会被用到: