前言:这篇是「威玲旺卡Aileen」的原创笔记/教程。在没有告知本人的情况下请不要转载呐,谢谢。
适用情况
系统:Raspbian Jessie <= 4.9 (如果你的系统 <= 4.4,鉴于下文TroubleShooting出现的问题,我推荐更新到最新系统)
板:Raspberry Pi 1/2/3 图形界面和终端都适用
Raspbian为WPA-PSK提供了界面配置,但想要用WPA企业版的无线网络则需要一番周折。如果你发现你想要用的网络在Raspbian里成为了灰色不可选项,那这篇文章会指导你怎么进行手动配置。(本例采用欧洲高校的教育网络eduroam
)
更新时间:2017年7月
步骤:
- 准备工作和断开网络
- 自己手动编辑一个配置文件
wpa_supplicant.conf
- 调用刚才配置的
wpa_supplicant.conf
,连接到目标网络 - 用
dhclient
获取IP,就完成了
1. 准备工作和断开网络:
-
ssid
:记下无线网络的具体名称(例子:eduroam
); -
identity
和password
:用户名(例子:user_sample
)和密码(例子:pw_sample
); -
EPA Method
和Phase 2 authentication
:了解所在网络支持的扩展认证协议,最常用的方法有PEAP,EAP-TTLS,LEAP等(例子:使用MS-CHAPv2
的PEAP
) - 获得所在网络的证书(不同的高校和研究机构的
eduroam
都需要各自的证书,在企业中,询问网络管理员Linux下的***.pem
。对于RWTH,在这个链接 下载Root cacert.pem
并拷贝到本地,典型又安全的路径是/etc/certs/cacert.pem
) - 完成了准备工作,现在要断开网络,开始本地配置,断网的命令是:
sudo service networking stop
2. 自己手动编辑一个配置文件:
创建文本wpa_supplicant.conf
,典型又安全的路径是 /etc/wpa_supplicant/wpa_supplicant.conf
,可以用系统自带的leafpad
开始编辑:
network={
# -- MUST CONFIGURE --
# The 'identity' is the username actually used for authentication.
identity="user_sample"
# -- MUST CONFIGURE --
# Your password (so make sure the permissions on
password="pw_sample"
# -- MUST CONFIGURE --
# CA cert from here:
ca_cert="/etc/certs/cacert.pem"
# -- TO CHECK --
# EAP supports PEAP and TTLS.
eap=PEAP TTLS
# -- TO CHECK --
# use MS-CHAPv2 as the inner authentication scheme
# with the traditional label
phase1="peaplabel=0"
phase2="auth=MSCHAPV2"
# Set priority to a big number
priority=999
# Enable this network block
disabled=0
# -- MUST CONFIGURE --
# name of network
ssid="eduroam"
# SSID should be broadcast, so don't scan.
scan_ssid=0
# Infrastructure mode
mode=0
# WPA/WPA2 require OPEN
auth_alg=OPEN
# WPA and WPA2 (RSN) are both used for eduroam
# (depending on which organisation you are at)
# In the future 'WPA' can be removed (WPA2 only).
proto=WPA RSN
# CCMP (AES) is stronger, but some organisations use TKIP.
# In the future 'TKIP' can be removed.
pairwise=CCMP TKIP
# Use EAP
key_mgmt=WPA-EAP
# Use PMKSA caching
proactive_key_caching=1
}
注释 # -- MUST CONFIGURE --
的4处分别需要改成你自己的用户名,密码,证书地址和网络名称
注释# -- TO CHECK --
的2处是你需要注意的所在网络的EAP方式,如果不支持PEAP,TTLS则需要相应改动
其他部分很少变化,保存。
*配置文本参考了Bristol大学的网络配置文件
3. 调用自己写的wpa_supplicant.conf
,连接到目标网络:
调用命令如下,记得wpa_supplicant.conf
要对应你刚才保存的路径:
sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B
*网络论坛上有很多把这一步在/etc/network/interfaces
作改动,效果是一样的
现在,你应该已经连接到目标网络了,用iwconfig
命令查看,会发现有类似名叫wlan0
或者叫wlp2s0
的无线连接,记下这个interface name
,下一步有用。
4. 用dhclient
获取IP
本例中,我们用在典型的命名规则下最通常的情况wlan0
,但新的命名规则也在运行,所以刚才说注意一下。(Raspbian依旧运行system V通常是wlan0,Ubuntu运行systemd后会出现新命名),运行dhclient
要求获取ip:
sudo dhclient wlan0
用ifconfig
或ip addr show
或直接上网验证。
至此配置就完成了!你应该已经连接成功了。
TroubleShooting:
1. 如果你在运行时出现这样的问题
wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B
Successfully initialized wpa_supplicant
nl80211: Driver does not support authentication/association or connect commands
wlan0: Failed to initialize driver interface
看似驱动突然间就出问题了。
这个bug可以追溯到ArchLinuxArm的wpa_supplicant功能组件问题。(看来Raspbian 4.4以下都有这个问题。)
解决方法是更新你的Raspbian系统到最新(本例中是 v4.9)
更新系统的命令如下:
sudo apt-get update
sudo apt-get dist-upgrade
2. 我自己板上的/etc/network/interfaces文件内容(仅作参考)
# interfaces(5) file used by ifup(8) and ifdown(8)
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
auto lo
iface lo inet loopback
iface eth0 inet manual
allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
allow-hotplug wlan1
iface wlan1 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp
#iface lo inet loopback
#iface eth0 inet dhcp
#allow-hotplug wlan0
#iface wlan0 inet dhcp
# pre-up wpa_supplicant -B -Dwext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
# post-down killall -q wpa_supplicant
3. 我自己板上的/etc/wpa_supplicant/wpa_supplicant.conf文件内容(仅作参考)
country=GB
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="eduroam"
key_mgmt=WPA-EAP
pairwise=CCMP TKIP
group=CCMP TKIP
eap=PEAP TTLS
identity="user_sample"
password="password_sample"
ca_cert="/etc/certs/cacert.pem"
phase1="peapver=0"
phase2="MSCHAPV2"
scan_ssid=1
mode=0
auth_alg=OPEN
proto=WPA RSN
proactive_key_caching=1
}
4. 其他命令
kill掉正在执行的wpa_supplicant程序
sudo killall -q wpa_supplicant
*本次编辑时间:2017年7月
网友评论