Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Аппаратное обеспечение

Беспроводная сеть в Linux

Оригинал: "Linux Wireless Networking"
Автор: Петер Харрисон (Peter Harrison)
Перевод: Н.Ромоданов
Дата перевода: 10.09.2009 г.

Устранение проблем в вашей беспроводной сети

Средства устранения проблем в беспроводной сети, имеющиеся в Linux, довольно обширны и предоставляют достаточно полезной информации, которая поможет сделать вашу сеть работоспособной. В этом разделе рассматрены многие важные стратегии, облегчающие традиционные процедуры, такие как просмотр файла /var/log/messages.

Проверьте состояние сетевой платы

Когда используется технология беспроводных сетей, команды iwconfig, iwlist и iwspy могут предоставить вам полезную информацию о состоянии вашей сети. Рассмотрим их подробнее.

Команда iwconfig

В дополнение к обычной команде ifconfig, которая проверяет состояние ваше сетевой платы, Вы можете воспользоваться командой iwconfig для просмотра состояния вашей беспроводной сети – просто не указывайте каких-либо параметров. В частности, Вы можете увидеть такую важную информацию, как качество соединения, MAC адрес точки доступа WAP, скорость передачи данных, ключи шифрования, что позволит убедиться в том, что эти параметры одинаковы для всей сети. Например:

[root@bigboy tmp]# iwconfig
eth0      IEEE 802.11-DS  ESSID:"homenet"   Nickname:"bigboy"
          Mode:Managed   Frequency:2.462GHz  Access Point: 00:09:5B:C9:19:22
          Bit Rate:11Mb/s   Tx-Power=15 dBm   Sensitivity:1/3
          Retry min limit:8   RTS thr:off   Fragment thr:off
          Encryption key:98D1-26D5-AC   Security mode:restricted
          Power Management:off
          Link Quality:36/92   Signal level:-92 dBm  Noise level:-148 dBm
          Rx invalid nwid:0  Rx invalid crypt:2  Rx invalid frag:0
          Tx excessive retries:10  Invalid misc:0   Missed beacon:0
[root@bigboy tmp]#

Команда iwlist

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

[root@bigboy tmp]# iwlist key
...
...
eth0      2 key sizes : 40, 104bits
          4 keys available :
                [1]: 9671-36DE-AC (40 bits)
                [2]: off
                [3]: off
                [4]: off
          Current Transmit Key: [1]
          Security mode:open
...
...
[root@bigboy tmp]#

Команда iwlist может проверять скорость, с которой работает сетевая плата, в нашем случае – 11Мбит/сек. Это полезно при определении возможных причин замирания сети, поскольку плохое качество сигнала может быть причиной низкой скорости взаимодействия сетевой платы с точкой доступа WAP.

[root@bigboy tmp]# iwlist rate
...
...
eth0      4 available bit-rates :
          1Mb/s
          2Mb/s
          5.5Mb/s
          11Mb/s
          Current Bit Rate:11Mb/s
...
...
[root@bigboy tmp]#

Дальнейшую информацию о команде iwlist смотрите на страницах man.

Команда iwspy

Команда iwspy предоставляет статистику по качеству соединения между вашей сетевой платой и другими беспроводными устройствами в сети. Она не работает все время; Вы должны сначала активировать команду iwspy для вашего интерфейса. Если команда iwspy не активирована, то она выдаст сообщение "no statistics to collect" ("статистика не собрана").

[root@bigboy root]# iwspy eth0
eth0      No statistics to collect
[root@bigboy root]#

Для активации требуется, чтобы Вы указали целевой IP адрес и беспроводный интерфейс сетевой платы, через который этот адрес может быть найден.

[root@bigboy tmp]# iwspy eth0 192.168.1.1

Если Вы используете команду iwspy без указания IP адреса, то она выдаст статистику сети с указанием типичного значения и значения, относительно которого делается сравнение. В примере, приведенном ниже, сигнал с качеством 64/92 можно рассматривать как сильный в сравнении с типичным значением 36/92, но он может быть слабым в другое время. Из-за возможности флуктуации сигнала следует периодически повторять такие проверки.

[root@bigboy tmp]# iwspy eth0
eth0      Statistics collected:
    00:09:5B:C9:19:22 : Quality:0  Signal level:0  Noise level:0
    Link/Cell/AP      : Quality:64/92  Signal level:-51 dBm   Noise level:-149 dBm (updated)
    Typical/Reference : Quality:36/92  Signal level:-62 dBm   Noise level:-98 dBm
[root@bigboy tmp]#

Для того чтобы отключить мониторинг iwspy, добавьте аргумент off.

[root@bigboy root]# iwspy eth0 off

Проверка конфликтов прерываний

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

Прежде, чем конфигурировать программное обеспечение вашей беспроводной сети, Вы должны убедиться, что номер прерывания, присвоенный беспроводной сетевой плате, не конфликтует с другим устройством на вашем компьютере. Вставьте плату в пустой слот вашего Linux компьютера согласно инструкциям, изложенным в руководстве по компьютеру, перезагрузитесь и снова проверьте файл /var/log/messages.

[root@bigboy tmp]# tail -300 /var/log/messages

Внимательно поищите любые признаки, указывающие на то, что плата влияет на номера прерываний IRQ для ранее вставленных плат. Если конфликт существует, то обычно выдается предупреждение или сообщение вида "IRQ also used by ..." ("прерывание IRQ используется также ..."). В этом случае переставьте плату в другой слот, либо ликвидируйте конфликт вынув конфликтующее устройство, если оно в действительности вам не нужно.

Вам следует также проверить файл /proc/interrupts на наличие устройств, имеющих одно и то же прерывание.

[root@bigboy tmp]# cat /proc/interrupts
11:     4639     XT-PIC     wlan0, eth0      (potentially bad)
 
[root@bigboy tmp]# cat /proc/interrupts
11:     4639     XT-PIC     wlan0            (good)

Прим. пер.: potentially bad – потенциально плохо; good - хорошо

Конфликты по прерываниям обычно более проблематичны со старыми шинами PC-AT; более новые системы PCI обрабатывают конфликты лучше. Первый вариант (потенциально плохой) взят из функционирующего Linux компьютера, использующего шину PCI. Он работал потому, что хотя прерывание было то же самое, базовые адреса памяти, которые Linux использует для связи с платами, были различными. Вы можете проверить как прерывания, так и базовые адреса ваших сетевых плат с помощью команды ifconfig –a:

[root@bigboy tmp]# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:08:C7:10:74:A8
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:11 Base address:0x1820 

wlan0 Link encap:Ethernet HWaddr 00:06:25:09:6A:B5
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:215233 errors:0 dropped:0 overruns:0 frame:0
TX packets:447594 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:39394014 (37.5 Mb) TX bytes:126738425 (120.8 Mb)
Interrupt:11 Memory:c887a000-c887b000

[root@bigboy tmp]#

Ошибки ядра

Сообщения, касающиеся совместимости вашей беспроводной платы с вашей версией главной программы Linux – ядра, обычно можно найти одним из двух способов: увидеть в файле /var/log/messages или показать с помощью команды dmesg.

Использование файла /var/log/messages

Если Вы найдете в файле /var/log/messages ошибку ядра p80211, то это обычно указывает на некорректно сконфигурированный идентификатор SSID, либо причиной ошибки может быть сетевая плата с устаревшей версией прошивки. Например:

Nov 13 22:24:54 bigboy kernel: p80211knetdev_hard_start_xmit: Tx attempt prior to association, frame dropped.

Использование команды dmesg

Другой хороший источник информации – команда the dmesg, которая показывает ошибки, возникшие в ядре. В приведенном ниже примере указывается, что не найден микрокод для сетевой платы Broadcom 43XX. Эту ошибку можно устранить с помощью применения пакета ndiswrapper , как это описано в настоящее главе.

[root@bigboy tmp]# dmesg
...
...
bcm43xx: PHY connected
b43-phy0 debug: Adding Interface type 2
b43-phy0 ERROR: Microcode "bcm43xx_microcode5.fw" not available or  load failed.
b43-phy0 ERROR: You must go to http://linuxwireless.org/en/users/Drivers/b43#devicefirmware and download the correct firmware (version 4)
bcm43xx: core_up for active 802.11 core failed (-2)
[root@bigboy tmp]# dmesg

Невозможно пропинговать шлюз, используемый по умолчанию

Если Вы не можете пропинговать шлюз, используемый по умолчанию, то сначала проверьте журнал ошибок ядра. Если в файле /var/log/messages ошибок нет, но Вы не можете пропинговать ваш шлюз или получить IP адрес, то проверьте конфигурационные файлы /etc/sysconfig/network-scripts/ на предмет правильной конфигурации IP и проверьте таблицу маршрутизации с тем, чтобы убедиться, что там все правильно. С помощью команды iwconfig Вы можете также проверить, не выходит ли ваш Linux компьютер из диапазона адресов, обслуживаемых точкой доступа WAP.

Ошибки "Unknown Device" - "Неизвестное устройство"

Следите за тем, чтобы во время установки или конфигурирования в журнальных файлах или на экране не появилось сообщение "unknown device" или "no such device" ("неизвестное устройство" или "нет такого устройства"). Причины таких сообщений могут быть следующие:

  • Сетевая плата неправильно вставлена в PCI слот
  • Несовместимое железо
  • Вы можете увидеть сообщения об ошибках, связанных с несовместимостью железа, в файле /var/log/messages:

    00:0c.0 Network controller: BROADCOM Corporation: Unknown device 4301 (rev01)
    Subsystem: Unknown device 1737:4301
    Flags: bus master, fast devsel, latency 64, IRQ 5
    Memory at f4000000 (32-bit, non-prefetchable) [size=3D8K]
    Capabilities: [40] Power Management version 2
    

    Либо Вы можете увидеть сообщения об ошибках на экране:

    Ошибки чипсета Hermes

    Я встречался со случаями, когда сетевая плата на чипсете Hermes, совместимая с Linux, отказывалась реагировать на запросы после того, как она нормально проработала несколько дней, а в файле /var/log/messages выдавалась следующая диагностика:

    Взаимодействие с платой обычно восстанавливалось только после перезагрузки. Наилучшем решением в этом случае было либо использование ndiswrapper, либо замена сетевой платы на действительно совместимое устройство.

    Ошибки Broadcom SoftMac

    Если ваша конфигурация правильная, а ваша сетевая плата отказывается работать и выдает в файл /var/logs/messages повторяющиеся сообщения об отказе запроса на аутентификацию SoftMAC, так как это показано ниже, то, возможно, это проблема несовместимости вашей сетевой платы с Linux.

    Попытайтесь использовать ndiswrapper в качестве быстрого решения этой проблемы.

    Ошибки ndiswrapper

    Имеется ряд общих ошибок, которые возникают при использовании ndiswrappers. Ниже приведены некоторые общие примеры.

    Ошибки CONFIG_4KSTACKS во время установки пакета

    Иногда из-за несовместимости с ядром при установке ndiswrapper выдаются ошибки CONFIG_4KSTACKS, похожие на те, что приведены ниже:

    *** WARNING: Kernel seems to have 4K size stack option (CONFIG_4KSTACKS) removed; many Windows
    drivers will need at least 8K size stacks. You should read wiki about 4K size stack issue. Don't
    complain about crashes until you resolve this.
    ...
    ...
    [root@bigboy ndiswrapper-1.16]#
    

    Предупреждение гласит: Кажется, что в ядре удалена опция размера стека в 4К; многие драйвера Windows требуют стек размером как минимум 8К. Почитайте в wiki раздел о стеке рамером 4К. Не жалуйтесь на сбои, пока не решите эту проблему.

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

    1. На сайте ndiswrapper приведены ссылки на сайты, откуда можно загрузить ядра с размером стека больше 16K. Ниже приведен приме такой ссылки. Это будет быстрее, чем создавать свое собственное ядро. http://ndiswrapper.sourceforge.net/mediawiki/index.php/Fedora

    Помните, что нужно загрузить ядро, которое соответствует архитектуре вашей системы и версии ядра. Проверить это можно с помощью команды uname –a. Ниже видно, что наша система Fedora Core 5 с версией ядра 2.6.16-1.2122 для платформы i686.

    [root@bigboy linux]# uname -rp
    2.6.16-1.2122_FC5 i686
    [root@bigboy linux]#
    

    Если Вы скачали подходящее ядро, то загрузите его. Установите RPM, перезагрузитесь и затем продолжайте в соответствие с разделом "Установка и конфигурирование ndiswrapper".

    Если Вы решили создать свое собственное ядро, то выполните следующие рекомендации.

    2. Если Вы перешли к этому шагу, то это означает, что Вы решили перекомпилировать ядро. Это нетрудный процесс, состоящий из нескольких шагов, но время компиляции может быть большим. Первый шаг – установить файлы исходных кодов ядра. Он описывается в Главе 33 "Модификация ядра для улучшения производительности".

    3. После установки исходных кодов ядра, Вы должны подготовить новое ядро, настроенное для использования с ndiswrapper, для компиляции. Первым шагом будет очистка всех временных файлов, которые могут существовать с предыдущих компиляций. Это можно сделать с помощью команды make mrproper. Затем вам нужно использовать команду make oldconfig для создания используемого по умолчанию варианта файла .config, который потребуется Linux при компиляции нового настроенного ядра.

    [root@bigboy tmp]# cd /usr/src/linux
    [root@bigboy linux]# make mrproper
    [root@bigboy linux]# make oldconfig
    

    4. Отредактируйте файл .config и установите переменную CONFIG_4KSTACKS равной "n".

    [root@bigboy linux]# vi .config
    
    #
    # File: /usr/src/linux/.config
    #
    
    #CONFIG_4KSTACKS=y
    CONFIG_4KSTACKS=n
    
    [root@bigboy linux]#
    

    5. Процесс компиляции ядра читает также файл Makefile для определения нового имени, которое будет использовать ядро. Переменная EXTRAVERSION в этом файле добавляет суффикс к имени ядра, это позволит вам отслеживать номера версий. Отредактируйте Makefile и задайте переменной EXTRAVERSION значение -ndis-stk16 с тем, чтобы новое ядро легко идентифицировалось как версия, поддерживающая работу с ndiswrapper.

    [root@bigboy linux]# vi Makefile
    
    #
    # File: /usr/src/linux/Makefile
    #
    
    EXTRAVERSION = -ndis-stk16
    
    [root@bigboy linux]#
    

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

    [root@bigboy linux]# make; make modules_install; make install
    

    7. Если Вы установили новую версию ядра, то теперь вам надо сделать так, чтобы ваша система при перезагрузке выбирала правильную версию ядра. Для этого вам потребуется отредактировать файл /etc/grub.conf так, как это описано в Главе 33 "Модификация ядра для улучшения производительности".

    8. Остановите систему, установите сетевую плату и перезагрузитесь. Система теперь загрузит ваше новое ядро, это можно проверить с помощью команды uname.

    [root@bigboy linux]# uname -r
    2.6.16-ndis-stk16
    [root@bigboy linux]#
    

    9. Если Вы установили новую версию ядра и ваша система не смогла правильно загрузиться, то ищите подсказку в разделе "Восстановление ядра после его краха" в Главе 33 "Модификация ядра для улучшения производительности". Когда Вы заставите систему перезагрузится правильно, снова пересмотрите шаги инсталляции и удостоверьтесь, что Вы изначально установили правильную версию.

    После того, как новое ядро заработает, переустановите и сконфигурируйте ndiswrapper.

    Неправильные драйвера

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

    [root@bigboy tmp]# 
    ...
    ...
    ...
    wlan0: ndiswrapper ethernet device 00:06:25:1b:b2:a9 using driver
    wmp11v27, 14E4:4301:1737:4301.5.conf
    ndiswrapper (set_auth_mode:702): setting auth mode to 3 failed
    (C0010015)
    [root@bigboy tmp]#
    

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

    1. Скачайте пакет драйверов из правильного источника и выберите драйвер для вашей системы Linux

    2. С помощью команды lsmod проверьте, что модуль ndiswrapper уже загружен, а затем удалите его из памяти с помощью команды rmod.

    [root@bigboy tmp]# lsmod
     Module                  Size  Used by
     ...
     ...
     ndiswrapper           145584  0 
     ipv6                  225504  16 
     autofs4                19204  1 
     [root@bigboy tmp]# rmmod ndiswrapper
    

    3. С помощью команды ndiswrapper с флагом –l получите список установленных драйверов, а затем с помощью команды ndiswrapper –r удалите старый драйвер.

    [root@bigboy tmp]# ndiswrapper -l
    Installed drivers:
    wmp11v27                driver installed, hardware present 
    [root@bigboy tmp]# ndiswrapper -r wmp11v27 
    [root@bigboy tmp]# 
    

    4. Установите новый драйвер с помощью команды ndiswrapper –i и с помощью команды ndiswrapper –l проверьте, что драйвер загружен.

    [root@bigboy tmp]# ndiswrapper -i bcmwl5.inf
    Installing bcmwl5
    [root@bigboy tmp]# ndiswrapper -l
    Installed drivers:
    bcmwl5          driver installed, hardware present 
    [root@bigboy tmp]#
    

    5. Используйте команду depmod чтобы перезагрузить таблицу модулей операционной системы.

    [root@bigboy tmp]# depmod -a 
    

    6. Используйте команду modprobe для того, чтобы загрузить в память модуль ndiswrapper.

    [root@bigboy tmp]# modprobe ndiswrapper
    

    7. Наконец, с помощью команды dmesg проверьте, что с загрузкой не было проблем. Если проблем не было, сконфигурируйте ваш интерфейс wlan0 аналогично другим интерфейсам сетевых плат вашей системы Linux

    8. Даже если не было ошибок, на этой стадии может потребоваться перезагрузка для того, чтобы ваша беспроводная плата заработала.

    Для уменьшения риска отказов при установке всегда следует использовать правильные драйвера. К счастью описанная выше процедура восстановления должна заставить вашу систему заработать правильно.

    Сетевые платы, несовместимые с ndiswrapper

    Предполагается, что модуль ndiswrapper работает в случае, если операционная система Linux не распознает сетевую плату. Если Linux распознает плату, то модуль не загрузится корректно. Команда ndiswrapper -l будет выдавать список установленных драйверов, в файле /var/log/messages будут новые записи модуля ndiswrapper, но команда dmesg вообще не обмолвится о состоянии процесса загрузки модуля ndiswrapper, а активация интерфейса wlan0 не произойдет.

    [root@bigboy tmp]# ifup wlan0
    ndiswrapper device wlan0 does not seem to be present, delaying initialization.
    [root@bigboy tmp]# ndiswrapper -l
    Installed drivers:
    netma311                driver installed, hardware present 
    [root@bigboy tmp]# dmesg | grep ndiswrapper
    [root@bigboy tmp]#
    

    В предыдущем примере приведены эти симптомы для случая, когда модуль ndiswrapper используется совместно с сетевой платой Netgear ma311, совместимой с Linux.

    Ошибки Invalid module format – неверный формат модуля

    Сам пакет ndiswrapper устанавливается как модель, непосредственно работающий с ядром Linux. Если Вы обновите ядро, то модуль ndiswrapper может прекратить работать. В таких случаях переустановка пакета ndiswrapper может вызвать следующие ошибки "Invalid module format" ("неверный формат модуля"):

    [root@bigboy tmp]# modprobe ndiswrapper
    FATAL: Error inserting ndiswrapper
    (/lib/modules/2.6.23.9-85.fc8/misc/ndiswrapper.ko): Invalid module format
    [root@bigboy tmp]#
    

    Для того, чтобы решить проблему, нужно не забывать всегда запускать команду make distclean перед любой другой установкой, связанной с использованием команд make. Это гарантирует, что модуль всегда будет совместим с вашим новым ядром.

     Назад   <<  Страницы:  1   2   3   4   5   >>   Продолжение