SDB:Решение проблем с беспроводной сетью

Перейти к: навигация, поиск
Беспроводные сети
leftlink=
Эта страница - попытка создать руководство по настройке, диагностике и решению проблем с беспроводной сетью с помощью различных компонентов, участвующих в создании беспроводного соединения, либо с помощью NetworkManager или YaST.

Основные компоненты

Основными компонентами используемыми для установки беспроводного соединения являются:

Наиболее распространённые проблемы

Фильтр MAC адреса

Убедитесь, что параметр Фильтр MAC адреса (MAC address filter) отключен в настройках точки доступа (WAP, AP) или добавьте MAC адрес вашей беспроводной карты в список разрешённых.

Аппаратный выключатель

Переключатели WiFi на ноутбуках HP

Большинство встроенных в ноутбуки беспроводных карт могут быть включены/выключены при помощи аппаратного переключателя - небольшого тумблера на торце ноутбука или одной из функциональных клавиш на клавиатуре. Убедитесь что беспроводной адаптер включен физически. Если аппаратный переключатель выключен, то драйвер не сможет управлять сетевой картой.

Прошивка

Для многих беспроводных карт (таких как iwl3945, iwlagn, b43, rtl8192, ...) требуется так называемая прошивка (Firmware) - микропрограмма, которая загружается в устройство операционной системой. Многие прошивки существуют в пакетной базе дистрибутива (например iwl3945-ucode или ralink-firmware), в репозиториях Службы сборки, но некоторые не могут быть включены в openSUSE по причине лицензионных ограничений. Такие прошивки могут быть установлены вручную. Часть из них могут быть загружены с помощью скриптов, расположенных в /usr/sbin (таких как install_acx100_firmware и install_intersil_firmware). Прошивку для карт Broadcom можно найти в репозитории Packman

Чтобы определить, нужна ли прошивка выполните команду:

dmesg | grep firmware

и проверьте вывод на предмет ошибок. Например такие записи говорят об отсутствии прошивки для карты Realtek:

[ 9162.144804] usb 1-2: firmware: requesting RTL8192SU/rtl8192sfw.bin
[ 9162.158346] rtl819xU:request firmware fail!

Каналы 12,13 и 14 отключены (wrong regulatory domain)

leftlink=
Это исправлено после перехода к использованию CRDA (Central Regulatory Domain Agent) начиная с версии 11.3

В разных странах набор доступных WiFi каналов разный – это зависит от местного законодательства и регламентируется FCC. Начиная с openSUSE 11.0 большинство драйверов беспроводных карт взаимодействует с подсистемой ядра mac80211, которая отвечает за обработку регуляторных областей (regulatory domain) и активна начиная с ядра 2.6.27. Для совместимости с FCC беспроводной стек включает только минимальный набор доступных каналов (1-11 в BG-диапазоне). Например в Германии каналы 12 и 13 разрешены, но по умолчанию отключены. Для того, чтобы включить эти каналы, нужно изменить регуляторную область (доступные параметры US, EU и JP):

# echo "options cfg80211 ieee80211_regdom=EU" > /etc/modprobe.d/cfg80211

После этого нужно перезапустить все беспроводные модули (mac80211, cfg80211, iwl3945, etc.) или просто перезагрузиться, чтобы изменения применились.

NetworkManager

NetworkManager регистрирует конфигурацию, которую он передаёт wpa_supplicant в своём журнале, что позволяет проверить параметры которые wpa_supplicant будет использовать для подключения к Wi-Fi сети. Для дальнейшей отладки потребуются логи самого wpa_supplicant, с их помощью можно отследить низкоуровневые проблемы, такие как невозможность подключения или разрывы соединения.

Необходимые логи

Для диагностики проблем беспроводного соединения с помощью NetworkManager необходимы следующие логи после неудачной попытки соединения:

  • /var/log/NetworkManager
  • /var/log/wpa_supplicant.log (если возможно с отладочным выводом)
  • вывод команды 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

и выполнить следующие команды:

# rcnetwork stop
# killall wpa_supplicant
# rcnetwork start

Теперь wpa_supplicant будет выводить очень подробный лог в /var/log/wpa_supplicant.log

На короткое время

Если отладочный вывод нужен только на короткий промежуток времени (например для отладки одной попытки соединения), уровень отладки может быть изменён с помощью:

# kill -SIGUSR1 [PID процесса wpa_supplicant]

В лог wpa_supplicant (/var/log/wpa_supplicant.log) будет записана строка подтверждающая новый уровень логирования:

Signal 10 received - changing debug level to MSGDUMP
leftlink=
Этот способ специфичен для openSUSE, обработчик сигналов не реализован в оригинальной версии wpa_supplicant.


Как вручную установить соединение

Остановка NetworkManager и wpa_supplicant

Прежде чем установить соединение вручную, убедитесь, что экземпляры NetworkManager или wpa_supplicant остановлены.

# rcnetwork stop
# killall wpa_supplicant

Если ваша точка доступа не использует безопасное соединение или использует WEP, для установки соединения достаточно использовать iwconfig. Для всех других типов соединения (WPA-PSK, WPA-EAP, 802.1x с динамическим WEP) необходим 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. Повторите сканирование с указанием EESID.

# iwlist eth0 scan essid ваш_essid
...

iwconfig

Небезопасное соединение

Если используется драйвер, зависимый от mac80211 (например iwl3934, iwl4965, ath5k, b43, rtl8187, rt2x00, ...), прежде чем устанавливать соединение необходимо активировать интерфейс:

# ip link set eth0 up

Установить небезопасное беспроводное сетевое соединение с помощью iwconfig очень просто.

# iwconfig eth0 essid ваш_essid

Подождите несколько секунд и запустите 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

Полезная информация:

  • Access Point: XX:XX:XX:XX:XX:XX - содержит MAC адрес точки доступа
  • Link Quality=58/100 - качество сигнала, должен быть отличен от 0
  • Signal level=-68 dBm - уровень сигнала, должен быть отличен от 0
  • Noise level=-90 dBm - уровень помех, должен быть отличен от 0

Беспроводное соединение установлено :)

Но перед тем как это соединение можно использовать, нужно получить IP адрес (описано ниже).

Защищённое соединение WEP

leftlink=
В настоящее время технология WEP (Wired Equivalent Privacy) является устаревшей и не рекомендуется к использованию, так как ее взлом может быть осуществлен всего за несколько минут.

В этом случае команда подключения будет выглядеть так:

# iwconfig eth0 essid ваш_essid key ваш_WEP_ключ_вида_1234567890bcdefgh012345678

128-битный WEP использует ключ из 26 шестнадцатеричных символов, 64-битный - 10. Кроме того можно явно указать ключ с опцией s:, не переводя его в шестнадцатеричный код:

# iwconfig eth0 essid ваш_essid key s:ваш_WEP_ключ_вида_MyKey

Дальнейшие шаги ничем не отличаются от аналогичных для незащищённого соединения.


wpa_supplicant

Установка соединения с помощью wpa_supplicant немного сложнее, чем подключение к небезопасной беспроводной сети. Сначала нужно создать файл конфигурации, который должен содержать все необходимые данные - /etc/wpa_supplicant/wpa_supplicant.conf. Конфигурационный файл изначально содержит немного базовой информации, которая одинакова для всех сетей, к которым вы подключаетесь.

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
eapol_version=1
ap_scan=1
fast_reauth=1

На следующем шаге нужно включить в этот файл необходимый сетевой блок, который содержит специфичную информацию для конкретного вида защиты сети.

Open System WEP

network={
        ssid="ваш_ssid_здесь"
        key_mgmt=NONE
        group=WEP40 WEP104
        # Пароль должен быть заключён в двойные кавычки. Если он содержит только ASCII и HEX символы, то можно и без них
        wep_key0=FFFFFFFFFF
        # wep_key1="passphrase"
        # wep_key2=CCCCC
        # wep_key3="another_passphrase"
        priority=5
        #Убедитесь, что вы установили wep_keyX в порядке их использования
        wep_tx_keyidx=0
        auth_alg=OPEN
}

WPA-PSK/WPA2-PSK (с общими ключами)

Примечание: также известен как WPA-Personal Для безопасной сети WPA-PSK, просто скопируйте нижеприведённый код и измените параметры ssid,psk на свои и в параметре proto впишите версию WPA или WPA2 .

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"
       # протокол - WPA или WPA2
       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_cli и wpa_gui. Wpa_cli является частью пакета wpa_supplicant, а wpa_gui нужно устанавливать отдельно.

# zypper in wpa_supplicant-gui

Для того чтобы wpa_gui имел возможность взаимодействовать с wpa_supplicant, нужно отредактировать файл /etc/wpa_supplicant/wpa_supplicant.conf любым текстовым редактором:

# vim /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, нажимаем Сканировать и получаем окно со списком всех доступных точек доступа. Двойной щелчок на любой из них откроет другой диалог, который позволит ввести пароль. Нажатие кнопки Добавить добавляет соединение в wpa_gui и выполняет попытку его запустить. При этом wpa_gui также записывает рабочие параметры в wpa_supplicant.conf, так что если интересно, то можно посмотреть эти параметры:

# cat /etc/wpa_supplicant/wpa_supplicant.conf

Это работает для незащищённых, WEP и защищённых WPA сетей.

Примечание: wpa_gui не будет работать с экземпляром wpa_supplicant, запущенным wpa_supplicant, поскольку он использует для управление интерфейс D-Bus. wpa_gui прекрасно работает с экземпляром wpa_supplicant запущенным ifup, не требуется даже файл конфигурации.

Получение IP адреса

DHCP

Если в сети для получения ip адреса используется dhcp, то сначала необходимо проверить наличие запущенных экземпляров dhcpcd или dhclient и остановить их, если таковые имеются.

# killall -TERM dhcpcd dhclient

Теперь можно использовать либо dhcpcd wlan0 или dhclient wlan0 для получения IP-адреса.

# dhcpcd wlan0

Если dhcpcd вернёт управление в командную строку, значит интерфейсу успешно был назначен 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 адреса

Просто установите нужный IP адрес используя iproute2

> 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

Если ответ выглядит примерно как в примере выше — значит сетевое соединение работает! Если ответ не получен, нужно проверить доступна хотя бы точка доступа. В нашем примере это 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

Если точка доступа доступна, а адреса в Интернете нет, то причиной этого иногда могут быть проблемы с получением адресов - например активны две сетевые карты (проводная и беспроводная), и для каждой из них запущен dhcpcd.

Попробуйте отключить оба интерфейса, потом включить только один беспроводной и снова проверьте пингом работу сети.

# ifdown eth0
# ifdown wlan0 
# ifup wlan0

Кроме того стоит проверить настройки точки доступа и попробовать выполнить ping в Интернет из интерфейса AP.

Захват пакетов в режиме монитора

Необходимое ПО

Для захвата пакетов с беспроводного интерфейса можно использовать kismet. Потом можно прочитать файл, в который записывались захваченные пакеты при помощи Wireshark, он выведет информацию в удобном виде.

Включение режима монитора

Если есть вторая беспроводная карта, которая может быть использована для мониторинга беспроводного трафика, следующая последовательность команд запустит захват трафика:

# 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

Кроме того наблюдать за пакетами можно при помощи программы tcpdump.

FAQ

Q: Соединение обрывается каждые несколько минут
A: Некоторые точки доступа сбрасывают соединение, если клиент неактивен в течении определённого промежутка времени. Иногда это можно настроить через интерфейс управления точки доступа.

Q: Адреса в Интернет недоступны, хотя с соединением всё в порядке
A: Проверьте конфигурацию DNS. Файл /etc/resolv.conf должен содержать IP адреса работающих DNS серверов.

Также смотрите

Ссылки на ресурсы SUSE и openSUSE

Внешние ссылки

Автор

Helmut Schaa <hschaa@suse.de>