Linux 无线网卡配置
无线网卡常见的配置选项
某TL-WR842N路由器无线配置选项含义:
无线名称
路由器的无线(Wi-Fi)名称。
无线密码
无线加密使用WPA2-PSK/WPA-PSK加密方式、AES加密算法,无线密码为8-63个字符,最好是数字、字母、符号的组合。
信道
无线数据信号传送的通道,建议保持默认的自动,此时路由器会自动根据周围的无线环境选择一个最好的信道。模式
路由器工作的无线模式。
频段带宽
路由器传输无线数据的频段宽度。
信号强度
可以根据实际使用需要选择不同档次的信号强度。
开启AP隔离
开启之后可以安全隔离连接到路由器的各个无线设备。
无线网卡工作工作模式
无线网卡一共有4种工作模式。
被管理模式(Managed mode):你作为无线客户端直接与无线接入点(Wireless Access Point,WAP)连接时,就使用这个模式。在这个模式中,无线网卡的驱动程序依赖WAP管理整个通信过程。
Ad hoc模式:当你的网络由互相直连的设备组成时,就使用这个模式。在这个模式中,无线通信双方共同承担WAP的职责。
主模式(Master mode):一些高端无线网卡还支持主模式。这个模式允许无线网卡使用特制的驱动程序和软件工作,作为其他设备的WAP。
监听模式(Monitor mode):就我们的用途而言,这是最重要的模式。当你希望无线客户端停止收发数据,专心监听空气中的数据包时,就使用监听模式。要使Wireshark捕获无线数据包,你的无线网卡和配套驱动程序必须支持监听模式(也叫RFMON模式)。
大部分用户只使用无线网卡的被管理模式或ad hoc模式。图11-4展示了各种模式如何工作。
如何判断无线网卡是否识别
根据设备是
PCI 还是
USB 连接,执行
lspci -k
或
lsusb -v
检查设备驱动是否已经加载
$ lspci -k
06:00.0 Network controller: Intel Corporation WiFi Link 5100
Subsystem: Intel Corporation WiFi Link 5100 AGN
Kernel driver in use: iwlwifi
Kernel modules: iwlwifi
如果是 USB 设备,执行 dmesg | grep usbcore
可以看到类似下面的输出 usbcore: registered new interface driver rtl8187
。
如果无线usb网卡后插入的话, 也会打印上述信息.
通过 ip link
查看无线 (设备名,通常是类似 wlp2s1
) 的设备。启用设备:
# ip link set <设备名>
up
如果设备加载,接口正常启用,说明不需要安装额外的驱动和固件。
错误信息SIOCSIFFLAGS: No such file or directory
说明需要固件才能工作,
根据获得的信息,在下面网址查找硬件支持:
-
Ubuntu Wiki 维护了一个设备被内核和用户空间驱动支持状况的列表。
-
Linux 无线支持页面 和硬件兼容性列表(HCL)也维护了一个内核友好的设备列表。
-
内核页面 也有一个支持的硬件矩阵。
如果列表中没有,可能你的设备只提供了 Windows 驱动(比如 Broadcom, 3com 等)。这时需要用 ndiswrapper.
Ndiswrapper 可以在
Linux 中使用
Windows 驱动。兼容性列表在
这里.
需要
Windows 中安装的
.inf
和
.sys
文件。如果有更新的网卡,请通过互联网搜索型号名称
+ 'linux' 以获取更多信息。
如何静态配置无线网卡
Unix一切皆文件,其它网络配置工具都是直接或者间接地修改这些虚拟文件来达到设置目的的。
pi@raspberrypi ~ $ ls -l /sys/class/net
total 0
lrwxrwxrwx 1 root root 0 May 8 08:12 eth0 -> ../../devices/platform/bcm2708_usb/usb1/1-1/1-1.1/1-1.1:1.0/net/eth0
lrwxrwxrwx 1 root root 0 May 8 08:12 lo -> ../../devices/virtual/net/lo
lrwxrwxrwx 1 root root 0 May 8 08:13 wlan0 -> ../../devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2:1.0/net/wlan0
可以看到,系统当前存在三个网络设备:lo为回环设备;eth0为有线网卡;wlan0为无线网卡。
/etc/network/interfaces文件记录了所有的静态配置信息。内核在引导的时候,会自动启动标志为“auto”的设备,例如:
auto lo
auto eth0
auto wlan0
而如果设备标志为“allow-hotplug”,那么内核在检测到热插拔事件的时候,也会自动启动。例如:
allow-hotplug lo
allow-hotplug eth0
allow-hotplug wlan0
因为回环设备始终应该是存在的,所以/etc/network/interfaces文件的内容至少是:
auto lo
iface lo inet loopback
内核启动网络设备调用的是ifupdown工具,而ifupdown工具也是依赖于/etc/network/interfaces配置文件的。
对于有线(Wired)设备,物理层和数据链路层无须操作系统干预,网卡根据CSMA/CD协议就能够自行设置,所以/etc/network/interfaces文件只需包含网络层以上的配置信息,例如IP地址、子网掩码、默认网关等。例如:
iface eth0 inet static
address 192.168.11.100
netmask 255.255.255.0
gateway 192.168.11.1
“默认网关”其实是路由的概念,在这里作为设备的一个属性,和IP地址子网掩码放在一起我觉得很不妥,很容易误导初学者,尤其是存在多网卡多IP地址的情况。默认网关的生成与这条配置有关, 如果去除这条, 网络连接将变慢.
对于DNS,首先需要注意的是它属于应用层协议,和网络设备以及网络层并无直接联系。传统上Linux的DNS配置文件为/etc/resolv.conf,一行一个服务器IP地址。例如:
nameserver 218.2.135.1
nameserver 61.147.37.1
如果安装了resolvconf工具,那么DNS的配置会被接管,此时/etc/resolv.conf就变成了一个符号链接,链接到了resolvconf运行时候动态维护的一个文件。在这种情况下,DNS的配置也可以写到/etc/network/interfaces文件中了,例如:
iface eth0 inet static
address 192.168.11.100
netmask 255.255.255.0
gateway 192.168.11.1
dns-nameservers 218.2.135.1 61.147.37.1
ifupdown工具会自动调用resolvconf完成DNS设置。
此处我也甚觉不妥,因为上面讲过,DNS是应用层的概念,这样写的话让初学者觉得好像DNS是网络设备的属性一样(传统Linux还真是有很多不足之处)。
如果安装了isc-dhcp-client工具,那么/etc/network/interfaces文件中就可以直接配置DHCP,例如:
iface eth0 inet dhcp
isc-dhcp-client有自己的配置文件,可以控制从DHCP服务器上获取哪些信息(例如DNS服务器地址)。
ifupdown工具会自动调用isc-dhcp-client完成DHCP设置。
此处需要注意的是:不论resolvconf是否存在,dhclient均会直接修改/etc/resolv.conf文件(不管它是不是一个链接),不过一般情况下也没有什么问题。
对于无线(Wireless)设备,工作方式和有线设备有很大的不同(不是插上网线就能直接用的)。数据链路层的连接必须由操作系统协同完成,例如连接哪个SSID、使用哪条信道、采用什么认证方式(WEP、WPA...)。这些链路层配置信息也可以写到/etc/network/interfaces文件中以供ifupdown工具使用。
iface wlan0 inet dhcp
wpa-ssid homezone
wpa-psk 密码
ifupdown工具会自动调用wpasupplicant完成WPA设置。
例如WEP的配置:
iface wlan0 inet dhcp
wireless-essid Home
wireless-key1 0123-4567-89ab-cdef
wireless-key2 12345678
wireless-key3 s:password
wireless-defaultkey 2
wireless-keymode open
ifupdown工具会自动调用wireless-tools完成WEP设置。
wpa_supplicant 配置文件, 配置方法:
更详细的配置可参考手册man wpa_supplicant.conf
如何动态配置无线网卡
为了管理已经安装好的无线驱动,并且使无线能正常工作,需要安装一个无线连接管理工具。需要使用的工具,将依赖于下面几个因素:
-
配置方式,从完全手动执行每一步到软件自动管理、自动启动
-
是否使用加密及加密类型
-
是否需要区分网络配置,是否经常切换不同网络(比如手提电脑)。
下表列出可以使用的管理无线网络的方法,按照加密和管理方式分类,给出了需要的工具。虽然还有其他办法,但这些是最常使用的
管理方法 |
接口激活 |
无线连接管理
|
IP 地址分配
|
---|---|---|---|
手动设置,
|
ip |
iw / iwconfig |
ip / dhcpcd / dhclient |
手动管理,
|
ip |
iw / iwconfig + wpa_supplicant |
ip / dhcpcd / dhclient |
自动管理,
|
netctl, Wicd, NetworkManager, etc. 这些工具会自动安装手动配置需要的工具。 |
软件包 wireless_tools 提供了建立无线连接的基础工具。如果你需要使用 WPA/WPA2 加密,还需要 wpa_supplicant。如下这些用户空间工具可以对无线连接进行完整控制。
-
iw - 当前的 nl80211 标准,不是所有的芯片都支持。
-
wireless_tools - 已经过时,但是依然广泛使用。
-
wpa_supplicant - 提供 WPA/WPA2 加密支持
下面表格给出了
iw
和
wireless_tools
命令的对比
根据加密方式不同,需要使用密码将无线设备关联到接入点。
假设要使用的接入点
ESSID 为
MyEssid
:
-
无加密
# iw wlan0 connect MyEssid
-
WEP
使用十六进制或 ASCII 密码(格式是自动识别出来的,因为 WEP 密码长度是固定的):
# iw dev wlan0 connect your_essid key 0:your_key
使用十六进制或 ASCII 密码,第三个是默认 (从0计数,共四个):
# iw dev wlan0 connect your_essid key d:2:your_key
WPA/WPA2
如果要连接WPA认证的无线网络,wireless-tools就无可奈何了,必须使用wpasupplicant。
wpasupplicant并不是像wireless-tools一样简单地用命令行配一配就可以了,它必须先启动一个服务进程,然后使用另外一个命令行工具对服务进程进行设置,而且在WIFI连接期间该服务进程必须始终运行着。
wpa_supplicant -i wlan0 -D nl80211,wext -s -B -P /var/run/wpa_supplicant.wlan0.pid -C /var/run/wpa_supplicant
其中:-i指定设备名;-D指定认证协议;-s -B指定在后台运行,并且调试输出到syslog中;-C参数指定“ctrl_interface”的位置,注意,wpa_supplicant是可以有配置文件的,而且配置文件中可以记录WIFI的静态配置,类似于/etc/network/interfaces的功能,但是我们这里用不到,在没有配置文件的情况下,“ctrl_interface”是必不可少的,wpa_cli通过它与之交互。
前台方式:
wpa_supplicant -i wlan0 -D nl80211,wext -dd -P /var/run/wpa_supplicant.wlan0.pid -C /var/run/wpa_supplicant
其中,-dd表示输出更详细的调试信息。
查看后台启动的进程参数:
pi@raspberrypi ~ $ ps ax | grep wpa
1618 ? Ss 0:00 /sbin/wpa_supplicant -s -B -P /var/run/wpa_supplicant.wlan0.pid -i wlan0 -D nl80211,wext -c /etc/wpa_supplicant/wpa_supplicant.conf
2379 pts/0 S+ 0:00 grep --color=auto wpa
然后使用wpa_cli进行设置。wpa_cli可以工作在交互模式,也可以命令行模式。例如在交互模式下执行如下命令加入并启用网络:
status:列出目前的联网状态。
list:列出所有备选网络。目前正连接到的网络会标[CURRENT],禁用的网络会标[DISABLE]。
add_network:增加一个备选网络,输出新网络的号码(这个号码替代下文的[network_id])。注意新网络此时是禁用状态。
set_network
[network_id] ssid “Your SSID”:设置无线网的名称(SSID)
set_network
[network_id] key_mgmt WPA-PSK:设置无线网的加密方式为WPA-PSK/WPA2-PSK
set_network
[network_id] psk “Your Password”:设置无线网的PSK密码
enable_network
[network_id]:启用网络。启用后如果系统搜索到了这个网络,就会尝试连接。
disable_network
[network_id]:禁用网络。
save_config:保存配置。
> add_network
0 <--- 记住这个号码!
> set_network 0 ssid "ChinaUnicom-Me"
OK
> set_network 0 key_mgmt WPA-PSK
OK
> set_network 0 psk "密码"
OK
> enable_network 0
OK
>
save_config <--------
别忘了这个,否则重启之后网络配置可能丢失
OK
查看配置文件
:
pi@raspberrypi
~ $ sudo cat /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant
GROUP=netdev
update_config=1
network={
ssid="Lair"
psk="knc4-102"
key_mgmt=WPA-PSK
scan_ssid=1
手动添加这一行
,
可以支持链接隐藏的
wifi
}
配置静态无线
ip:
auto
wlan0
allow-hotplug
wlan0
iface
wlan0 inet manual
wpa-conf
/etc/wpa_supplicant/wpa_supplicant.conf
address
192.168.1.105
netmask
255.255.255.0
gateway
192.168.1.1
以上配置有错误.
网络配置修改后, 重启服务
sudo /etc/init.d/networking restart
sudo service networking restart
假设设备使用 wext
驱动。如果无法工作,可能需要调整选项,参见 WPA_Supplicant(https://wiki.archlinux.org/index.php/WPA_supplicant_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29)。
如果连接成功,在新终端中执行后续命令或(或者通过 Ctrl+c
退出并使用 -B
参数在后台再次执行上述命令。WPA_Supplicant 页面包含更多参数和配置文件的信息。
通过下面命令确认是否连接成功:
# iw dev wlan0 link
获取 IP 地址
使用 DHCP: # dhcpcd wlan0
或 # dhclient wlan0
如果要设置DHCP,很简单。例如:
dhclient wlan0 -r (释放IP, 相当于windows下的 ipconfig /release)
dhclient wlan0 (申请IP, 相当于windows下的 ipconfig /renew)
静态 IP:
ip address add 192.168.1.3/24 dev wlan0
ip route add default via 192.168.1.1 dev wlan0
第一行增加IP地址,第二行设置默认路由。
若要删除以 10. 起始的 IP 路由表中的所有路由,请键入:
route delete 10.*
route del default
https://wireless.wiki.kernel.org/en/users/Documentation/iw/replace-iwconfig
https://wiki.archlinux.org/index.php/WPA_supplicant_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29
http://www.jb51.net/network/60999.html
http://www.cnblogs.com/abel/p/3441175.html
http://www.oschina.net/question/23734_117144
http://blog.csdn.net/jacobywu/article/details/7366080 wpa配置文件
http://shumeipai.nxez.com/2013/09/30/use-wpa-cli-command-line-to-configure-wi-fi-wireless-lan.html wpa_cli 命令使用方法
http://blog.csdn.net/stephen_yu/article/details/12492839 iwconfig 使用
http://www.360doc.com/content/14/0521/16/7821691_379668471.shtml wpa_supplicant.conf 配置说明