SDB:Tracking down wireless problems

跳转到:导航搜索
Icon-cleanup.png
本文需要关注,因为它不符合我们的wiki 指南似乎没有及时更新 - 例如,没有关于有线等效隐私 (WEP) 作为一种已弃用且不安全的旧技术的警告。--Pistazienfresser 16:32, 6 February 2011 (MST)
如果您想贡献,请阅读此维基的规则,如果您有任何问题,请随时联系维基团队,我们非常乐意帮助您!:-)


此页面旨在成为跟踪无线问题的指南,因为在设置无线连接时会涉及许多组件,无论是使用 Network Manager 还是 YaST

目的

设置无线连接的主要组件是

常见陷阱

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。监管域处理已在无线堆栈中实现,但在 kernel 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 等)或重新启动以启用新的监管域。

由于使用 CRDA,Factory 中已修复此问题

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 特有的,wpa_supplicant 上游中未实现信号处理程序

如何手动设置连接

停止 NetworkManager 和 wpa_supplicant

为了手动设置连接,请确保此时没有运行 NetworkManager 或 wpa_supplicant 的任何实例。

> rcnetwork stop
> killall wpa_supplicant

如果您的接入点不使用任何安全措施,您可以使用纯 iwconfig 设置连接。即使 WEP 保护的连接也可以这样设置。对于所有其他连接类型(WPA-PSK、WPA-EAP、使用动态 WEP 的 802.1x),需要 wpa_supplicant。

基本命令

首先运行 iwconfig 以找出要使用的无线接口。

> iwconfig
lo        no wireless extensions.

eth1      no wireless extensions.

eth0      unassociated  ESSID:""
          Mode:Managed  Frequency=2.412 GHz  Access Point: Not-Associated
          Bit Rate:0 kb/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:0  Signal level:0  Noise level: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
...
          Cell 02 - Address: XX:XX:XX:XX:XX:XX
                    ESSID:"XXXXXX"
                    Protocol:IEEE 802.11bg
                    Mode:Master
                    Channel:2
                    Frequency:2.417 GHz (Channel 2)
                    Encryption key:off
                    Bit Rates: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
                    Quality=37/100  Signal level=-78 dBm
                    Extra: 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="your_ssid_here"
        key_mgmt=NONE
        group=WEP40 WEP104
        # Passphrase keys must be in double-quotes. Hex and ASCII are ok unquoted
        wep_key0=FFFFFFFFFF
        # wep_key1="passphrase"
        # wep_key2=CCCCC
        # wep_key3="another_passphrase"
        priority=5
        #Be sure to set the wep_keyX you want to try first using this
        wep_tx_keyidx=0
        auth_alg=OPEN
}

WPA 与共享密钥 (PSK)

对于 wpa-psk 保护的网络,只需使用此配置并修改 ssidpsk 参数。

network={
	ssid="your_essid_here"
	psk="your_password_here"
	key_mgmt=WPA-PSK
	priority=5
	proto=WPA
}

WPA-EAP

 network={
       ssid="your_essid_here"
       identity="your_usename_here"
       psk="your_password_here"
       # wpa_supplicant debug output will tell you what to put here
       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/your_config_file -dddt

-Dwext 告诉 wpa_supplicant 使用 wext 驱动程序与低级驱动程序通信,大多数当前驱动程序都应该可以很好地使用此设置(至少添加基于 mac80211 的驱动程序)。
-ieth0 描述应使用哪个接口进行无线连接
-c/etc/your_config_file 只是告诉 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_cliwpa_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 实例一起工作,因为它使用 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 statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2008ms
rtt min/avg/max/mdev = 151.011/152.976/156.665/2.648 ms

如果输出如下所示,则连接正常工作!

如果您没有得到此响应,您可能需要检查是否至少可以访问 AP。在此示例中,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 statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3012ms
rtt min/avg/max/mdev = 1.754/1.874/2.145/0.160 ms

如果您可以 ping AP 但无法访问 Internet 地址,则名称解析可能存在问题。这可能是由启用两个 NIC(即有线和无线),每个 NIC 都有 dhcpcd 运行引起的。

请关闭这两个接口,然后启动无线 NIC 并从头开始重试。

# ifdown eth0
# ifdown wlan0 
# ifup wlan0

TODO:解释现在该怎么做..

捕获数据包,又称监视模式

所需软件

要捕获无线接口上的数据包,可以使用 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 接收的所有帧。

常见问题解答

问:我的连接每隔几分钟就会断开
答:某些接入点如果客户端处于非活动状态一段时间,则会断开连接。有时可以在接入点的配置界面中更改此行为。

链接到 Novell 和 openSUSE 页面

外部链接

作者

<hschaa@suse.de>