SDB:无线故障检测
此頁面需要清理 因為他不遵循我們的 維基規範。 Seems to be not up to date - e. g. no warning about Wired Equivalent Privacy (WEP) as a deprecated and insecure old technique. --Pistazienfresser 16:32, 6 February 2011 (MST) 如果您想要貢獻,請務必要熟悉這些規範。如果您有任何問題,別猶豫,快 聯絡我們, 我們十分樂意能幫助您! :-) |
目录
目的
设置无线连接时使用的主要部件有:
- nm-applet (GNOME 中) 或 KNetworkManager (KDE 中)
- NetworkManager 和/或 YaST
- wpa_supplicant
- 无线驱动 (和 mac80211 有点关系)
常见陷阱
MAC 地址过滤
确保在无线连接点 (WAP,AP) 中禁用了 MAC 地址过滤或者已将您的无线网卡 MAC 地址加入到白名单中。
硬件开关
大多数内置无线网卡都可以使用 硬件开关 激活/禁用。请确保您物理激活了无线设备。如果硬件开关是关闭的那么驱动是没有机会设置网络的。
固件
有些无线设备 (例如 iwl3945, iwlagn, b43, ...) 需要一个所谓的固件,固件是由操作系统提供的。openSUSE 已经以 RPM 软件包的方式提供了一些固件文件 (例如 iwl3945-ucode 或 ralink-firmware),但由于版权原因也没有提供一些固件文件。因此需要手动安装它们。有些固件可以使用 /usr/sbin 中提供的脚本下载 (例如 install_acx100_firmware, install_bcm43xx_firmware 和 install_intersil_firmware)。
要确定您是否需要安装固件:
dmesg | less
并浏览输出来查找错误消息。
频道 12,13 和 14 被禁用 (错误的管理域)
截至 openSUSE 11.0 多数无线驱动都依赖 mac80211。在无线堆栈中已经实现了管理域处理,但是内核版本 2.6.27 之前是没有的。为了与 FCC 兼容,无线堆栈只启用了可用频道的最小子集 (bg 频带的 1-11 频道)。例如在德国频道 12 和 13 也是允许的但是默认是禁用的。可以通过覆盖管理域来启用这些频道 (允许的参数有 US, EU 和 JP):
echo "options cfg80211 ieee80211_regdom=EU" > /etc/modprobe.d/cfg80211
之后重新装载全部无线模块 (mac80211, cfg80211, iwl3945, 等) 或重启来应用新的管理域。
该问题在 Factory 已修复,由于采用了 CRDA
NetworkManager
需要的日志
为了检测 NetworkManager 无线问题,在连接尝试失败后需要以下日志:
- /var/log/NetworkManager
- /var/log/wpa_supplicant (如果可以的话最好是带详细调试输出的版本)
- dmesg 的输出
启用 wpa_supplicant 调试输出
永久
要取得 wpa_supplicant 的最大调试输出您需要修改文件 /usr/share/dbus-1/system-services/fi.epitest.hostap.WPASupplicant.service.
修改这行
Exec=/usr/sbin/wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -u -f /var/log/wpa_supplicant.log
为
Exec=/usr/sbin/wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -u -dddt -f /var/log/wpa_supplicant.log
并以 root 身份运行如下命令:
> rcnetwork stop > killall wpa_supplicant > rcnetwork start
现在 wpa_supplicant 将写入非常详细的调试输出到 /var/log/wpa_supplicant.log
短期
如果只需要短期启用调试输出 (例如调试一次连接尝试) 可使用下面命令修改调试级别:
> kill -SIGUSR1 `pidof wpa_supplicant`
supplicant 日志 (/var/log/wpa_supplicant) 将打印一行表示切换到了新的调试级别:
Signal 10 received - changing debug level to MSGDUMP
JFI: 这是 openSUSE 专有的,上游的 wap_supplicant 并没有实现信号处理器。
如何手动设置连接
停用 NetworkManager 和 wpa_supplicant
要手动设置连接请确保当前并未运行 NetworkManager 或 wpa_supplicant 实例。
> rcnetwork stop > killall wpa_supplicant
如果您的访问点没有使用任何安全设置您可以单纯使用 iwconfig 设置该连接。也可以使用该方法设置 WEP 加密连接。其它连接类型 (WPA-PSK, WPA-EAP, 802.1x with dynamic WEP) 需要 wpa_supplicant。
基本命令
首先运行 iwconfig 来找出您想要使用的无线接口。
> iwconfig lo 没有无线扩展。 eth1 没有无线扩展。 eth0 未连接 ESSID:"" 模式:受管的 频率=2.412 GHz 访问点: 未连接 比特率:0 kb/s 天线强度=20 dBm 敏感度=8/0 重试限制:7 RTS thr:off Fragment thr:off 加密密钥:关闭 电源管理:关闭 连接质量:0 信号级别:0 噪声级别:0 Rx invalid nwid:0 Rx invalid crypt:3 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:53 Missed beacon:0
本例中 eth0 是无线接口。
如果您不知道您的无线网络名称 (ESSID),您可能需要运行一次扫描。
> iwlist eth0 scan ... 蜂巢 02 - 地址: XX:XX:XX:XX:XX:XX ESSID:"XXXXXX" 协议:IEEE 802.11bg 模式:主控 频道:2 频率:2.417 GHz (频道 2) 加密密钥:关闭 比特率:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 6 Mb/s; 9 Mb/s 11 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s 48 Mb/s; 54 Mb/s 质量=37/100 信号级别=-78 dBm 额外: Last beacon: 488ms ago ...
该命令将分区段打印出全部访问点。如果您的访问点未显示在列表中,那它可能没有广播它的 ESSID。尝试扫描该指定网络。
> iwlist eth0 scan essid your_essid_here ...
iwconfig
不安全的连接
如果您正在使用 mac80211 驱动 (如 iwl3934, iwl4965, ath5k, b43, rtl8187, rt2x00, ...),在建立连接前需要先打开接口:
> ip link set eth0 up
使用 iwconfig 设置不安全的无线连接非常简单。
> iwconfig eth0 essid your_essid_here
等几秒后,再运行 iwconfig 查看是否建立了连接。
> iwconfig eth0 eth0 IEEE 802.11g ESSID:"XXXXXX" Mode:Managed Frequency:2.417 GHz Access Point: XX:XX:XX:XX:XX:XX Bit Rate:54 Mb/s Tx-Power=20 dBm Sensitivity=8/0 Retry limit:7 RTS thr:off Fragment thr:off Encryption key:off Power Management:off Link Quality=58/100 Signal level=-68 dBm Noise level=-90 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:10
重要信息有
- 访问点:XX:XX:XX:XX:XX:XX - 应该包含您的访问点的 MAC 地址
- 连接质量=58/100 - 不应该是 0
- 信号级别=-68 dBm - 不应该是 0
- 噪声级别=-90 dBm - 不应该是 0
现在无线连接就设置好了:)
但是在您真正使用此连接前您需要取得一个 IP 地址,方法见下 (获取 IP 地址)。
WEP 加密连接
待写
wpa_supplicant
使用 wpa_supplicant 设置连接比设置不安全无线网络连接要稍微复杂一些。您首先需要写一个包括全部所需信息的配置文件。该配置文件首先包含一些基本信息,这些信息对您要连接的每个网络都是相同的。
ctrl_interface=/var/run/wpa_supplicant ctrl_interface_group=0 eapol_version=1 ap_scan=1 fast_reauth=1
下一步是在配置文件中写所需的网络信息。无线安全类型不同,需要的网络信息也不同。
开放式系统 WEP
network={ ssid="在此输入您的 SSID" key_mgmt=NONE group=WEP40 WEP104 # 密码必须以双引号括起来。Hex 和 ASCII 可以不括起来 wep_key0=FFFFFFFFFF # wep_key1="密码" # wep_key2=CCCCC # wep_key3="另一个密码" priority=5 # 请使用下面选项设置您想要首先尝试的 wep_keyX wep_tx_keyidx=0 auth_alg=OPEN }
带共享密钥的 WPA (PSK)
对于一个 wpa-psk 加密的网络,请使用该配置并修改参数 ssid 和 psk。
network={ ssid="在此输入您的 ESSID" psk="在此输入您的密码" key_mgmt=WPA-PSK priority=5 proto=WPA }
WPA-EAP
network={ ssid="在此输入您的 ESSID" identity="在此输入您的用户名" psk="在此输入您的密码" # wpa_supplicant 调试输出会告诉你在这里填什么 subject_match="/C=US/ST=Utah/L=Provo/O=Novell, Inc./CN=foo.novell.com" proto=WPA key_mgmt=WPA-EAP group=CCMP TKIP eap=PEAP phase2="auth=MSCHAPV2" ca_path="/etc/ssl/certs" }
启动连接
要使用 wpa_supplicant 启动之前配置好的连接,请运行如下命令:
> wpa_supplicant -Dwext -ieth0 -c/etc/您的配置文件 -dddt
-Dwext 告诉 wpa_supplicant 使用 wext 驱动与底层驱动通信,大多数驱动使用该设置都应该可以工作(至少基于 mac80211 的驱动是可以的)
-ieth0 描述了无线连接应使用的接口
-c/etc/您的配置文件 告诉 wpa_supplicant 应使用的配置
-dddt 启用最大调试输出
几秒后,wpa_supplicant 最好是显示像下面这样的信息:
1213018160.349324: State: GROUP_HANDSHAKE -> COMPLETED 1213018160.349334: CTRL-EVENT-CONNECTED - Connection to XX:XX:XX:XX:XX:XX completed (auth) [id=0 id_str=] 1213018160.349341: wpa_driver_wext_set_operstate: operstate 0->1 (UP) 1213018160.349348: WEXT: Operstate: linkmode=-1, operstate=6 1213018160.349880: EAPOL: External notification - portValid=1 1213018160.349899: EAPOL: External notification - EAP success=1 1213018160.349905: EAPOL: SUPP_PAE entering state AUTHENTICATING 1213018160.349911: EAPOL: SUPP_BE entering state SUCCESS 1213018160.349917: EAP: EAP entering state DISABLED 1213018160.349924: EAPOL: SUPP_PAE entering state AUTHENTICATED 1213018160.349930: EAPOL: SUPP_BE entering state IDLE 1213018160.349954: RTM_NEWLINK: operstate=1 ifi_flags=0x11043 ([UP][RUNNING][LOWER_UP]) 1213018160.349965: RTM_NEWLINK, IFLA_IFNAME: Interface 'wlan0' added 1213018161.356786: RSN: processing PMKSA candidate list 1213018161.356821: RSN: not in suitable state for new pre-authentication 1213018161.852768: EAPOL: startWhen --> 0
这时无线连接就设置好了,您可以在新控制台使用 iwconfig 验证它,方法见上面。
wpa_gui
为了活得轻松点,wpa_supplicant 有两个伴侣应用程序 wpa_cli 和 wpa_gui。虽然 wpa_cli 是 wpa_supplicant 软件包的一部分,但是您需要单独安装 wpa_gui。
# zypper in wpa_supplicant-gui
要让 wpa_gui 能与 wpa_supplicant 协作,我们需要使用 gedit 或您喜欢的编辑器编辑 /etc/wpa_supplicant/wpa_supplicant.conf 文件。
# gedit /etc/wpa_supplicant/wpa_supplicant.conf
添加 "update_config=1" 到现有的行之后并保存文件。wpa_supplicant 配置参考请见 /usr/share/doc/packages/wpa_supplicant/wpa_supplicant.conf
现在启动 wpa_supplicant
# wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf -B
然后运行
# wpa_gui
在 wpa_gui 对话框打开后,按扫描将弹出一个列有全部检测到的访问点的窗口。双击任意项将打开另外一个对话框让您输入密码,点击添加,网络将被添加到 wpa_gui,连接也就创建好了。这适用于开放网络,WEP 和 WPA 加密网络。wpa_gui 也能向 wpa_supplicant.conf 写入合适的参数,如果您感兴趣写了什么,可以
# cat /etc/wpa_supplicant/wpa_supplicant.conf
注意:wpa_gui 不能与 NetworkManager 启动的 wpa_supplicant 实例一起工作,因为 NM 使用 D-Bus 通信。然而它能完美地与 ifup 启动的实例协作,甚至不需要配置文件。
获取 IP 地址
DHCP
如果您的网络使用 DHCP 进行 IP 地址分配,您需要先检查 dhcpcd 或 dhclient 实例是否运行,如果运行着请停止它们。
# killall -TERM dhcpcd dhclient
现在您可以使用 dhcpcd wlan0 | eth1 或 dhclient wlan0 | eth1 来请求 IP 地址了。
# dhcpcd wlan0
如果 dhccpcd 响应命令行的话接口现在应该已经分配了一个 IP 地址。可以通过 ip 命令验证。
> ip addr 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 50 link/ether XX:XX:XX:39:49:b4 brd ff:ff:ff:ff:ff:ff inet 192.168.0.173/24 brd 196.168.0.255 scope global eth0 inet6 fe80::212:f0ff:fe39:49b4/64 scope link valid_lft forever preferred_lft forever
相关的部分是 192.168.0.173。
手动 IP 设置
可使用 iproute2 设定想要的 IP 地址
> ip addr add 192.168.0.145/24 dev eth0
校验连接是否正常
确定连接是否正常的方法是 ping 一个网站
> ping google.com PING google.com (64.233.167.99) 56(84) bytes of data. 64 bytes from py-in-f99.google.com (64.233.167.99): icmp_seq=1 ttl=242 time=156 ms 64 bytes from py-in-f99.google.com (64.233.167.99): icmp_seq=2 ttl=242 time=151 ms 64 bytes from py-in-f99.google.com (64.233.167.99): icmp_seq=3 ttl=242 time=151 ms ^C --- google.com ping 统计 --- 3 个数据包已传输,3 个数据包已收到,0% 丢包,时间 2008ms rtt min/avg/max/mdev = 151.011/152.976/156.665/2.648 ms
如果输出像上面一样连接就是正常的!
如果您没有得到上面的响应,您可能希望至少检查一下访问点是可访问的。以 192.168.0.1 为例:
ping 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=1.75 ms 64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=2.14 ms 64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=1.75 ms 64 bytes from 192.168.0.1: icmp_seq=4 ttl=64 time=1.84 ms ^C --- 192.168.0.1 ping 统计 --- 4 个数据包已传输,4 个数据包已收到,0% 丢包,时间 3012ms rtt min/avg/max/mdev = 1.754/1.874/2.145/0.160 ms
如果您可以 ping 访问点但是没有互联网地址,那就是名称解析出现了问题。这可能是由于启用了两个 NIC (例如有线和无线) 而每个都跑了一个 dhcpd 造成的。
请关闭两个接口然后打开无线 NIC 并重试上述步骤。
# ifdown eth0 # ifdown wlan0 # ifup wlan0
TODO: Explain what to do now..
抓包 aka 监视模式
需要的软件
要在无线接口抓包您可以使用 kismet。之后 Wireshark 可以读取 kismet 制作的抓包文件并以用户友好的方式显示数据包。
启用监视模式
如果您有第二块无线网卡可以用来监视无线流量,可进行如下步骤启动流量捕获:
> ip link set wlan0 down > iwconfig wlan0 mode monitor > ip link set wlan0 up > iwconfig wlan0 channel X > wireshark -i wlan0 -k
这将打开 wireshark 并开始抓取 wlan0 在频道 X 上收到的全部帧。
问答
Q: 我的连接每几分钟就断开
A: 有些连接点会在客户端超过一定时间不活动时尝试断开连接。有时这种行为可以在连接点配置界面修改。
到 Novell 和 openSUSE 页面的链接
- 无线论坛 于 forums.opensuse.org
外部链接
- http://wireless.kernel.org/en/users/Reporting_bugs
- KDE 网络管理工具的特殊技巧
- Network Manager Debuging in Gnome
作者
Helmut Schaa <hschaa@suse.de>