воскресенье, 15 июня 2014 г.

Настройка WiFi

До сих пор у меня совершенно отсутствовал опыт работы с беспроводными сетями. Однако, всё оказалось не столь трудно, как могло бы показаться.

Для организации домашней беспроводной сети я выбрал беспроводной адаптер TP-Link TL-WN781ND с разъёмом PCI-E. Адаптер собран на базе чипа AR9485 от Atheros, которые стали поддерживаться в Linux одними из первых.

Немного теории

Когда оборудование было выбрано, настало время немного узнать об основах WiFi. WiFi - это торговая марка, обозначающая большую группу стандартов IEEE 802.11. Среди них можно выделить несколько отдельных стандартов, которые обозначаются буквенными индексами:
  • a - скорость до 54 Мбит/с, частоты 5150-5350 МГц, каналы 34-64, модуляция DSSS,
  • b - скорость до 11 Мбит/с, частоты 2400-2483,5 МГц, каналы 1-13, модуляция OFDM,
  • g - скорость до 54 Мбит/с, частоты 2400-2483,5 МГц, каналы 1-13, модуляция DSSS/OFDM,
  • n - скорость от 150 до 600 Мбит/с, в зависимости от количества антенн (от 1 до 4). Базируется на стандартах a, b и g.
Отдельно я поинтересовался вопросами безопасности. Существуют следующие алгоритмы обеспечения безопасности:
  • WEP - слабая стойкость алгоритма, может быть легко взломан,
  • WPA - более сильный алгоритм, работающий на старом оборудовании. Для внедрения этого алгоритма было достаточно обновления прошивки оборудования, поддерживающего WEP. Использует алгоритм шифрования TKIP. В настоящее время тоже легко поддаётся взлому,
  • WPA2 - новый алгоритм, для использования которого требуется специальная аппаратная поддержка, которая имеется в современном оборудовании. Использует алгоритм шифрования CCMP на основе блочного алгоритма шифрования AES. Рекомендуется использовать именно этот алгоритм.
Далее, существует два протокола аутентификации:
  • WPA-PSK/WPA2-PSK - используется общий для клиента и точки доступа ключ. Пригоден для применения в домашней сети, т.к. не требует настройки дополнительных серверов,
  • WPA-EAP/WPA2-EAP - используется протокол EAP, который, как правило, работает совместно с сервером RADIUS, осуществляющим аутентификацию, авторизацию и учёт сеансов. Этот протокол имеет множество вариантов аутентификации и используется, как правило, в больших корпоративных сетях.
Итак, если принять во внимание всё описанное, то в моём случае стоит использовать режим n (или хотя-бы g) и протокол WPA2-PSK.

Настройка точки доступа

Для настройки точки доступа воспользуемся пакетом hostapd. Установим его:
# apt-get install hostapd
В пакете поставляется пример файла конфигурации с подробными комментариями: /usr/share/doc/hostapd/examples/hostapd.conf.gz

Создадим файл конфигурации /etc/hostapd/hostapd.conf:
interface=wlan0            # Настраиваемый беспроводной интерфейс
bridge=br0                 # Включить беспроводной интерфейс в указанный интерфейс-мост

driver=nl80211             # Используемый драйвер
country_code=RU            # Код нашей страны
ieee80211d=1               # Включаем использование ограничений каналов и мощности сигнала,
                           # принятые в нашей стране
ieee80211n=1               # Включить режим n в дополнение к основному

ssid=stupin.su             # Идентификатор сети
hw_mode=g                  # Основной режим g
channel=1                  # Канал 1 (можно поэкспериментировать, задавая значения от 1 до 11)

auth_algs=1                # Использовать только алгоритмы аутентификации WPA2

wpa=2                      # Использовать только WPA2
wpa_key_mgmt=WPA-PSK       # Используем общий ключ
wpa_passphrase=passphrase  # Кодовая фраза, используемая в качестве общего ключа
wpa_pairwise=CCMP          # Используемый алгоритм шифрования
Настройку bridge можно не указывать, если вы не хотите объединять беспроводной интерфейс с Ethernet-интерфейсом в мостовой интерфейс. Я это сделал, поскольку у меня имеются проводные устройства, которые я хочу объединить в одну сеть с беспроводными.

Идентификатор сети ssid - это произвольный текст, по которому вы будете отделять свою точку доступа от чужих.

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

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

Я выбрал настройку wpa_passphrase, потому что большинство используемых мной устройств не позволяют указывать произвольную шестнадцатеричную последовательность, зато позволяют указывать кодовую фразу. Поскольку взломать сеть WPA2-PSK можно только последовательным перебором паролей, то лучше выбрать достаточно длинный и сложный пароль. Допускается использование до 63 символов, однако я ограничился шестнадцатью, сгенерировав их при помощи программы pwgen.

Отберём у пользователей системы возможность заглядывать в файл конфигурации, чтобы они не подсмотрели пароль (просто пятиминутка паранойи, вы можете оставить файл доступным на чтение всем):
# chmod o= /etc/hostapd/hostapd.conf
Теперь можно перезапустить hostapd, чтобы он начал анонсировать идентификатор сети и клиенты смогли подключиться к сети:
# /etc/init.d/hostapd start
К слову о паранойе. Можно запретить анонсировать точке доступа идентификатор сети, так что к сети можно будет подключиться только зная её идентификатор. Однако, в процессе подключения идентификатор сети всё равно будет передан точке доступа, так что злоумышленник сможет его перехватить. Я не запрещаю анонсы идентификатора сети, т.к. существенно безопасность при этом не увеличится, а отлаживать неполадки станет сложнее, т.к. без анонса сложно будет определить - а работает ли вообще точка доступа?

Настройка клиента

Для полного комплекта рассмотрим ещё настройку клиентского беспроводного соединения. Для этого воспользуюсь ноутбуком со встроенной WiFi-картой на основе того же чипа AR9485. Для начала установим пакет wpasupplicant:
# apt-get install wpasupplicant
В Debian настройка беспроводных соединений, как и многих других, органично вписывается в общую систему конфигурирования сети. Отдельно настраивать wpa_supplicant не требуется, т.к. все необходимые настройки можно вписать в файл /etc/network/interfaces:
allow-hotplug wlan0
iface wlan0 inet dhcp       # Настройки сети получим от DHCP-сервера
  wpa-ssid stupin.su        # Идентификатор сети
  wpa-ap-scan 1             # Идентификатор сети анонсируется точкой доступа
  wpa-proto RSN             # Используем "усиленный" WPA, фактически - WPA2
  wpa-pairwise CCMP         # Используемый алгоритм шифрования
  wpa-key-mgmt WPA-PSK      # Используемый алгоритм аутентификации
  wpa-passphrase passphrase # Кодовая фраза, используемая в качестве общего ключа
Осталось поднять интерфейс:
# ifup wlan0
Если вы бываете в нескольких разных местах, где работают разные беспроводные сети, можно воспользоваться пакетом guessnet, который умеет обнаруживать беспроводные сети по их идентификаторам и MAC-адресам точек доступа. Я оставлю описание настройки guessnet за рамками этой статьи.

К сожалению, даже совместно с guessnet и ifplugd, мне не удалось настроить правильную обработку кнопки включения-выключения беспроводных устройств, имеющихся в ноутбуке. После повторного включения появляется две копии DHCP-клиента, так что сеть не удаётся настроить без захода под пользователем root.

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

Ссылки

Комментариев нет: