Linux|centos7操作系统|无线WiFi的命令行配置---wpa_supplicant详解

前言:

Linux系统下,可以配置无线网卡的工具和方法有很多,比如,nmcli,iw,wap_supplicant,hostapd 或者直接安装桌面,图形化配置等等

这些工具比较多,但基本都是一个共同的流程:先利用工具扫描到AP,然后设置无线网卡的连接方式,最后无线网卡连接无线路由,完成WiFi连接

那么在最近的无线网卡安装学习中,感觉有一些地方自己还是比较糊涂,对于wap_supplicant这个工具的了解也不是太深,因此,本文对该工具的使用做一个总结,也算是给自己留一个笔记吧。

一,

wpa_supplicant是什么工具?有什么特点?哪里获取该工具?

网络配置管理工具wpa_supplicant,该工具更多的用在无线网络配置管理上,虽然此工具也支持有线网络的配置和管理

其次,wpa_supplicant这个工具并不是所有的驱动都支持,最后wpa_supplicant目前只能连接到那些你已经配置好ESSID的无线网络。wireless-tools支持几乎所有的无线网卡和驱动,但它不能连接到那些只支持WPA的AP

wpa_supplicant 被设计成一个“守护程序”,在后台运行充当控制无线连接的后端,主要实现与WPA 身份验证器的秘钥协商,并控制wlan驱动程序的漫游和IEEE802.11身份验证/关联

wpa_supplicant 具体支持哪些功能?
WPA-PSK (“WPA-Personal”)
带有 EAP 的 WPA(例如,使用 RADIUS 身份验证服务器)(“WPA-Enterprise”)
CCMP、TKIP、WEP104、WEP40 的密钥管理
WPA 和完整的 IEEE 802.11i/RSN/WPA2
RSN:PMKSA 缓存、预身份验证
IEEE 802.11r
IEEE 802.11w
Wi-Fi 保护设置 (WPS)

wpa_supplicant主要是以下三个命令构成,依次是客户端,密码管理,服务端

[root@centos10 network-scripts]# wpa_
wpa_cli         wpa_passphrase  wpa_supplicant  

例如,我已经配置好的无线网卡使用iwlist扫描到的WiFi:

无线网卡的名称是wls35u2, ESSID 就是AP 名称是mywife,验证方式是WPA2-PSK

[root@centos10 ~]# iwlist  wls35u2 scan
wls35u2   Scan completed :
          Cell 01 - Address: 50:33:F0:CD:21:D9
                    ESSID:"mywifi"
                    Protocol:IEEE 802.11bgn
                    Mode:Master
                    Frequency:2.432 GHz (Channel 5)
                    Encryption key:on
                    Bit Rates:867 Mb/s
                    Extra:rsn_ie=30140100000fac040100000fac040100000fac020000
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    IE: Unknown: DD9F0050F204104A0001101044000102103B00010310470010BC329E001DD811B286015033F0CD21D81021001852616C696E6B20546563686E6F6C6F67792C20436F72702E1023001C52616C696E6B20576972656C6573732041636365737320506F696E74102400065254323836301042000831323334353637381054000800060050F20400011011000B52616C696E6B4150535F3010080002008C103C000101
                    Quality=96/100  Signal level=34/100  
                    Extra:fm=0003

一般的Linux发行版都有wpa_supplicant这个工具,无需编译安装,例如centos,本地仓库配置好后,直接yum就可以安装了:

下面是在本地仓库找这个wpa_supplicant,可以看到介绍WPA/WPA2/IEEE 802.1X Supplicant,说明这个软件主要是无线网络用的

[root@centos10 ~]# yum search wpa_supplicant
Loaded plugins: fastestmirror
Repository 'local' is missing name in configuration, using id
Loading mirror speeds from cached hostfile
================================================================================================================ N/S matched: wpa_supplicant ================================================================================================================
wpa_supplicant.x86_64 : WPA/WPA2/IEEE 802.1X Supplicant

  Name and summary matches only, use "search all" for everything.

二,

wpa_supplicant配置无线网络的步骤

1,

无线和蓝牙内核是否禁用

[root@centos10 ~]# rfkill list
5: hci0: Bluetooth
	Soft blocked: no
	Hard blocked: no
7: phy0: Wireless LAN
	Soft blocked: no
	Hard blocked: no

 内核禁用WiFi和启用WiFi

[root@centos10 network-scripts]# rfkill block wifi
[root@centos10 network-scripts]# rfkill list
5: hci0: Bluetooth
	Soft blocked: no
	Hard blocked: no
7: phy0: Wireless LAN
	Soft blocked: yes
	Hard blocked: no
[root@centos10 network-scripts]# rfkill unblock wifi

 2,

wpa_supplicant扫描WiFi热点

严重注意:wpa_cli 运行需要有服务端,也就是wpa_supplicant -D nl80211 -i wls35u2  -c /etc/wpa_supplicant/wpa_supplicant.conf  ,该命令必须先运行,不管是在前台还是在后台(后台运行是加参数 -B),否则 

wpa_cli 将会报错,这里说的no such file通常指的是/var/run/wpa_supplicant/wls35u2

[root@centos10 ~]# wpa_cli  -i wls35u2 status
Failed to connect to non-global ctrl_ifname: wls35u2  error: No such file or directory

 wpa_supplicant 前台运行后,如下输出:

[root@centos10 ~]# wpa_supplicant -D nl80211 -i wls35u2 -c /etc/wpa_supplicant/wpa_supplicant.conf 
Successfully initialized wpa_supplicant
wls35u2: Trying to associate with 50:33:f0:cd:21:d9 (SSID='mywifi' freq=2432 MHz)
wls35u2: Associated with 50:33:f0:cd:21:d9
wls35u2: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
wls35u2: CTRL-EVENT-REGDOM-CHANGE init=COUNTRY_IE type=COUNTRY alpha2=CN
wls35u2: WPA: Key negotiation completed with 50:33:f0:cd:21:d9 [PTK=CCMP GTK=CCMP]
wls35u2: CTRL-EVENT-CONNECTED - Connection to 50:33:f0:cd:21:d9 completed [id=0 id_str=]

看到有Connection后,才可以执行下面的扫描: 

[root@centos10 ~]# wpa_cli -i wls35u2 scan
OK
[root@centos10 ~]# wpa_cli -i wls35u2 scan_result
bssid / frequency / signal level / flags / ssid
50:33:f0:cd:21:d9	2432	-65	[WPA2-PSK-CCMP][WPS][ESS]	mywifi
52:33:f0:2d:21:d9	2432	-64	[WPA2-PSK-CCMP][WPS][ESS]	mywifi-WiFi5
52:33:f0:7d:21:d9	2432	-65	[WPA2-PSK-CCMP][WPS][ESS]	
f8:cd:c8:90:bc:32	2432	-76	[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS]	ChinaNet-gTUm
74:05:a5:dc:86:c2	2412	-77	[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]	YBJ
7c:b5:9b:82:f6:8b	2462	-83	[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]	KaiHome_2.4
7e:b5:9b:92:f6:8b	2462	-84	[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]	TPGuest_F68B
f4:32:3d:98:9a:39	2412	-80	[WPA-PSK-CCMP+TKIP][ESS]	ChinaNet-6b4R
0a:10:7b:70:7e:21	2447	-81	[WPA2-PSK-CCMP][ESS]	
52:a0:30:bd:d3:f8	2412	-86	[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]	
56:ae:86:7a:bc:0e	2412	-87	[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS]	
52:33:f0:7d:21:a5	2422	-87	[WPA2-PSK-CCMP][WPS][ESS]	
52:33:f0:7c:1f:11	2422	-87	[WPA2-PSK-CCMP][WPS][ESS]	
08:10:7b:f0:7e:21	2447	-83	[WPA2-PSK-CCMP][WPS][ESS]	zhwww
58:c6:7e:fb:4f:38	2427	-84	[WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS][ESS]	ChinaNet-wfJ9
46:f9:71:2d:a0:b6	2462	-84	[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]	
f4:32:3d:98:b6:a1	2447	-86	[WPA-PSK-CCMP+TKIP][ESS]	ChinaNet-Y3Th
44:f9:71:0d:a0:b6	2462	-86	[WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS][ESS]	MIQI
a0:cf:f5:e2:ce:18	2447	-88	[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS]	CMCC-DXk7
2a:77:77:3d:ff:30	2457	-89	[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]	
5c:e5:0c:cb:4e:c3	2412	-87	[ESS]	MiDeskLamp1S-4EC2-CB4EC2


此时查看网络状态和wpa_supplicant的状态:

wpa的状态,注意,这里wpa的状态是COMPLETED

[root@centos10 ~]# wpa_cli -i wls35u2 status
bssid=50:33:f0:cd:21:d9
freq=2432
ssid=mywifi
id=0
mode=station
pairwise_cipher=CCMP
group_cipher=CCMP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
p2p_device_address=00:5c:c2:ce:dc:24
address=00:5c:c2:ce:dc:24
uuid=9437e8d3-f5a2-5382-8425-e6753f8d72ee

网络状态,只有ipv6:

[root@centos10 ~]# ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33:  mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0c:29:e8:89:a2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.123.20/24 brd 192.168.123.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fd15:4ba5:5a2b:1008:162e:7500:4e67:2fb1/64 scope global noprefixroute dynamic 
       valid_lft 86386sec preferred_lft 14386sec
    inet6 fe80::523b:7d77:34e9:fa42/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: wls35u2:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:5c:c2:ce:dc:24 brd ff:ff:ff:ff:ff:ff
    inet6 240e:348:378:4020:25c:c2ff:fece:dc24/64 scope global mngtmpaddr dynamic 
       valid_lft 6959sec preferred_lft 3359sec
    inet6 fe80::25c:c2ff:fece:dc24/64 scope link 
       valid_lft forever preferred_lft forever

wpa_states的取值如下。

  • WPA_DISCONNECTED: 表示当前未连接到任何无线网络。
  • WPA_INTERFACE_DISABLED: 代表当前此wpa_supplicant所使用的网络设备
    被禁用。
  • WPA_INACTIVE: 代表当前此wpa_supplicant没有可连接的无线网络。 这种情况
    包括周围没有无线网络, 以及有无线网络, 但是因为没有配置信息( 如没有设置密码等) 而
    不能发起认证及关联请求的情况。
  • WPA_SCANNING、 WPA_AUTHENTICATING、 WPA_ASSOCIATING: 分别
    表示当前wpa_supplicant正处于扫描无线网络、 身份验证、 关联过程中。
  • WPA_ASSOCIATED: 表明此wpa_supplicant成功关联到某个AP。
  • WPA_4WAY_HANDSHAKE: 表明此wpa_supplicant处于四次握手处理过程中。当使用PSK( 即WPA/WPA2-Personal) 策略时, STA收到第一个EAPOL-Key数据包则
    进入此状态。 当使用WPA/WPA2-Enterprise方法时, 当STA完成和RAIDUS身份验证后
    则进入此状态。
  • WPA_GROUP_HANDSHAKE: 表明STA处于组密钥握手协议处理过程中。 当STA
    完成四次握手协议并收到组播密钥交换第一帧数据后即进入此状态( 或者四次握手协议中携
    带了GTK信息, 也会进入此状态。 详情见4.5.5节EAPOL-Key交换流程分析) 。
  • WPA_COMPLETED: 所有认证过程完成, wpa_supplicant正式加入某个无线网

 

此时,给网卡wls35u2通过DHCP增加ipv4地址,该网卡就可以使用了:

一般,这个命令会非常快就完成,如果卡住很长时间,通常是wpa_supplicant 服务端报错了

dhclient wls35u2

 上面的命令执行完毕后,查看wpa的状态,有ipv4地址了:

[root@centos10 ~]# wpa_cli -i wls35u2 status
bssid=50:33:f0:cd:21:d9
freq=2432
ssid=mywifi
id=0
mode=station
pairwise_cipher=CCMP
group_cipher=CCMP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
ip_address=192.168.2.7
p2p_device_address=00:5c:c2:ce:dc:24
address=00:5c:c2:ce:dc:24
uuid=9437e8d3-f5a2-5382-8425-e6753f8d72ee

 去掉ipv4地址:

[root@centos10 ~]# dhclient wls35u2 -r
[root@centos10 ~]# ifconfig  wls35u2
wls35u2: flags=4163  mtu 1500
        inet6 240e:348:378:4020:25c:c2ff:fece:dc24  prefixlen 64  scopeid 0x0
        inet6 fe80::25c:c2ff:fece:dc24  prefixlen 64  scopeid 0x20
        ether 00:5c:c2:ce:dc:24  txqueuelen 1000  (Ethernet)
        RX packets 847  bytes 85582 (83.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 34  bytes 4384 (4.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0




二,

wpa_supplicant的配置文件

上面的扫描已经说了,必须要有配置文件,那么配置文件如何写呢?

1.

利用wpa_passphrase 指定WiFi名称和 WiFi的密码重定向到wpa_supplicant的主配置文件

wpa_passphrase mywife AP的密码 >/etc/wpa_supplicant/wpa_supplicant.conf


2,

WiFi的安全标准和wpa_supplicant服务的配置文件

  • IEEE 802.11 所制定的是技术性标准 ,Wi-Fi 联盟所制定的是商业化标准 , 而 Wi-Fi 所制定的商业化标准基本上也都符合 IEEE 所制定的技术性标准。
  • WEP 是1999年9月通过的 IEEE 802.11 标准的一部分;WPA(Wi-Fi Protected Access) 事实上就是由 Wi-Fi 联盟所制定的安全性标准 , 这个商业化标准存在的目的就是为了要支持 IEEE 802.11i 这个以技术为导向的安全性标准;而 WPA2 其实就是 WPA 的第二个版本。直观点说,WEP是较老的认证方法它有好几个弱点,因此在2003年被WPA淘汰,WPA又在2004年由完整的 IEEE 802.11i 标准(又称为 WPA2)所取代。
  • ​ WEP(Wired Equivalent Privacy),采用名为RC4的RSA加密技术
  • WPA(Wi-Fi Protected Access) ,采用新的TKIP算法,TKIP算法保留了RC4所以也有其弱点,但是这个时候更好的CCMP还没完成,所以先在WPA上用TKIP技术
  • WPA2是WPA的第2个版本,采用CCMP加密协定(在有些路由器等设备上设定加密协定或者加密算法的时候,可能会用类似AES之类的字眼替代CCMP)。所以WPA2+AES是安全性最强的。

​ 另外,在有些无线网路设备的参数中会看到像 WPA-Enterprise / WPA2-Enterprise 以及 WPA-Personal / WPA2-Personal 的字眼 , 其实 WPA-Enterprise / WPA2-Enterprise 就是 WPA / WPA2 ; WPA-Personal / WPA2-Personal 其实就是 WPA-PSK / WPA2-PSK, 也就是以 ”pre-share key” 或 ” passphrase” 的验证 (authentication) 模式来代替 IEEE 802.1X/EAP 的验证模式 ,PSK 模式下不须使用验证服务器 ( 例如 RADIUS Server), 所以特别适合家用或 SOHO 的使用者。

​ 还有,wep是旧的加密方式,工作于802.11B/G模式下而802.11N草案并不支持此加密方式,所以如果802.11N的设备采用wep加密方式后,它也只会工作在802.11b/g模式下,N的性能发挥不出来。

在本例中,mywif查询出来的 是         50:33:f0:cd:21:d9    2432    -65    [WPA2-PSK-CCMP][WPS][ESS]    ,因此,我的无线路由使用的是WPA2

3,

wpa_supplicant主配置文件:

cat /etc/wpa_supplicant/wpa_supplicant.conf

# WPA-PSK/TKIP

ctrl_interface=/var/run/wpa_supplicant

network={
	ssid="example wpa-psk network"
	key_mgmt=WPA-PSK
	proto=WPA
	pairwise=TKIP
	group=TKIP
	psk="secret passphrase"
}

 在本例中ssid是mywifi,psk是WiFi的密码,因此,本例使用的配置文件如下,主要是认证方式key_mgmt=WPA-PSK:

[root@centos10 ~]# cat /etc/wpa_supplicant/wpa_supplicant.conf 
ctrl_interface=/var/run/wpa_supplicant/
network={
	ssid="mywifi"
	psk="WiFi密码"
        key_mgmt=WPA-PSK
	#psk=0093d6fd4ee9d59e1c19c5468969b916ecdd3ab9011c766e8ae0761f706b0f6d
}

带证书的EAP:

# WPA2-EAP/CCMP using EAP-TLS

ctrl_interface=/var/run/wpa_supplicant

network={
	ssid="example wpa2-eap network"
	key_mgmt=WPA-EAP
	proto=WPA2
	pairwise=CCMP
	group=CCMP
	eap=TLS
	ca_cert="/etc/cert/ca.pem"
	private_key="/etc/cert/user.p12"
	private_key_passwd="PKCS#12 passhrase"
}

 IEEE 802.1X:

# IEEE 802.1X with dynamic WEP keys using EAP-PEAP/MSCHAPv2

ctrl_interface=/var/run/wpa_supplicant

network={
	ssid="example 802.1x network"
	key_mgmt=IEEE8021X
	eap=PEAP
	phase2="auth=MSCHAPV2"
	identity="user name"
	password="password"
	ca_cert="/etc/cert/ca.pem"
}



三,

WiFi自动连接的设置

编辑/etc/sysconfig/wpa_supplicant这个文件,该文件是wpa_supplicant服务的环境变量文件,文件内容如下:

(wls35u2是无线网卡名称,ip a 命令可以看到的那个  -D nl80211是该无线网卡的驱动)

# Use the flag "-i" before each of your interfaces, like so:
#  INTERFACES="-ieth1 -iwlan0"
INTERFACES="-iwls35u2"

# Use the flag "-D" before each driver, like so:
#  DRIVERS="-Dwext"
DRIVERS="-D nl80211"

# Other arguments
#   -u   Enable the D-Bus interface (required for use with NetworkManager)
#   -f   Log to /var/log/wpa_supplicant.log
#   -P   Write pid file to /var/run/wpa_supplicant.pid 
#        required to return proper codes by init scripts (e.g. double "start" action)
#        -B to daemonize that has to be used together with -P is already in wpa_supplicant.init.d
OTHER_ARGS="-P /var/run/wpa_supplicant.pid"

 编辑文件/usr/lib/systemd/system/wpa_supplicant.service 

cat /usr/lib/systemd/system/wpa_supplicant.service
[Unit]
Description=WPA Supplicant daemon
Before=network.target
After=syslog.target

[Service]
Type=dbus
BusName=fi.w1.wpa_supplicant1
EnvironmentFile=-/etc/sysconfig/wpa_supplicant
ExecStart=/usr/sbin/wpa_supplicant -u -f /var/log/wpa_supplicant.log -c /etc/wpa_supplicant/wpa_supplicant.conf $INTERFACES $DRIVERS $OTHER_ARGS && ifconfig wls35u2 up && dhclient  wls35u2

[Install]
WantedBy=multi-user.target

编辑/etc/rc.local 这个文件,在末尾添加如下命令:

[root@centos10 ~]# cat /etc/rc.local 
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local
ifconfig wls35u2 up&&ifconfig wls35u2 up&ifconfig wls35u2 up&&sleep 40&&systemctl restart wpa_supplicant && ifconfig wls35u2 up && dhclient wls35u2

给这个文件/etc/rc.local 执行权限:

chmod a+x /etc/rc.local

 重启服务器后,将会自动发现无线网卡并通过DHCP自动分配ip地址:

[root@centos10 ~]# ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33:  mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0c:29:e8:89:a2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.123.20/24 brd 192.168.123.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fd15:4ba5:5a2b:1008:162e:7500:4e67:2fb1/64 scope global noprefixroute dynamic 
       valid_lft 86378sec preferred_lft 14378sec
    inet6 fe80::523b:7d77:34e9:fa42/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: wls35u2:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:5c:c2:ce:dc:24 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.7/24 brd 192.168.2.255 scope global dynamic wls35u2
       valid_lft 604670sec preferred_lft 604670sec
    inet6 240e:348:378:4020:25c:c2ff:fece:dc24/64 scope global mngtmpaddr dynamic 
       valid_lft 7067sec preferred_lft 3467sec
    inet6 fe80::25c:c2ff:fece:dc24/64 scope link 
       valid_lft forever preferred_lft forever

 

你可能感兴趣的:(Linux,网络,分布式,运维,linux,服务器,大数据)