PostHeaderIcon Ralink 2870 FreeBSD —

Сразу предупреждаю: заработало у меня только на freebsd 8.2, на 7.4 не стало, хотя здесь утверждают, что должно работать.
Итак, есть машинка с

1
FreeBSD selena.ski-elfa 8.2-STABLE FreeBSD 8.2-STABLE #5: Thu May 12 12:35:47 VOLST 2011     root@selena.ski-elfa:/usr/obj/usr/src/sys/selena  i386

А так же USB wifi адаптер tp-link TL-WN727N, построенный на чипе Ralink 2870. Начиная с freebsd8.1 в системе есть драйвера для этого чипа, чтобы карточка опозналась, надо подгрузить модули ядра:

1
2
# kldload runfw
# kldload if_run

Либо добавляем их в /boot/loader.conf. Кроме того, нужен еще модуль wlan_xauth, соответственно, с ним поступаем так же.
Адаптер после этого определится как run0, однако с помощью ifconfig с ним работать не получается, надо создать виртуальное устройство wlan0, заодно сразу перевести его в режим точки доступа (hostap):

1
# ifconfig wlan0 create wlandev run0 wlanmode hostap ssid selena

Здесь wlanmode — режим работы (hostap — точка доступа, может быть еще BSS — режим клиента, и monitor — вообще ненужная рядовому обывателю штука. А нерядовые могут об этом почитать в man run), ssid — имя нашей сети, мы его будем видеть в списке сетей на клиенте.
Теперь надо включить аутентификацию, мы же не хотим, чтобы к нам в сеть ходили кто попало? Значит, создаем файлик /etc/hostapd.conf:

1
2
3
4
5
6
7
8
9
interface=wlan0
debug=1
ctrl_interface=/var/run/hostapd
ctrl_interface_group=wheel
ssid=selena
wpa=3
wpa_passphrase=mypassphrase
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP

ну тут понятно, указали интерфейс, который обслуживать, указали имя сети, включили wpa2 (wpa=3, как ни странно, и wpa_pairwise=CCMP). mypassphrase — ключевое слово для доступа в сеть, его будут спрашивать у клиентов. Проявите фантазию, и вообще, меняйте ее почаще, нынче ломают все подряд.
Создаем папочку, которую в конфиге объявили:

1
# mkdir /var/run/hostapd

теперь надо запустить демона hostapd, который как раз и занимается аутентификацией:

1
/etc/rc.d/hostapd forcestart

Собственно, если после этого ifconfig показывает нам что-то наподобие:

1
2
3
4
5
6
7
8
wlan0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 2290
 ether 00:11:43:54:65:76
 media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap>
 status: running
 ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:43:54:65:76
 authmode WPA <a href="http://www.larkenrose.com/outside-the-cage.html">Levitra</a> privacy MIXED deftxkey 2 TKIP 2:128-bit TKIP 3:128-bit
 txpower 31.5 scanvalid 60 bgscan bgscanintvl 300 bgscanidle 250
 roam:rssi11g 7 roam:rate11g 5 protmode CTS burst dtimperiod 1

То уже почти работает. Почему почти? потому-что надо еще настроить бридж между своей внутренней сетевкой и wifi адаптером. Не, если внутренней сетевки нету, то для wlan0 с помощью ifconfig нормально настраивается обычная сеть, но у меня как раз внутренняя проводная сеть и дополнительных маршрутов я вводить не хочу, поэтому буду делать bridge, у меня там еще и dhcp до кучи, в общем, будет удобно.
Для этого грузим соответствующий модуль и создаем мост:

1
2
# kldload if_bridge
# ifconfig bridge0 create

Объединяем в мост внутренний проводной интерфейс и беспроводной и поднимаем мост:

1
2
# ifconfig bridge0 addm wlan0 addm nfe0
# ifconfig bridge0 up

Вместо nfe0 следует подставить имя своего интерфейса.
Все, после этого я с ноута смог подцепиться к сети, ходить в интернет и иметь доступ к локальным ресурсам.
С автоматизацией процесса, однако, у меня не заладилось. Точнее, не заладился перевод адаптера в hostap. Умные люди для этого советую в /etc/rc.conf вставтиь строчку

1
2
wlans_run0="wlan0"
ifconfig_wlan0="ssid selena mode 11g mediaopt hostap"

Однако моя система на подобную конструкцию обижается фразой device not configured и ничего не работает. Я бился-бился, но так и не смог совладать с чудом враждебной техники, посему просто сляпал скрипт, который поднимает интерфейс и мост:

1
2
3
4
5
6
#!/bin/sh
/sbin/ifconfig wlan0 create wlandev run0 wlanmode hostap ssid selena
/sbin/ifconfig bridge0 create
/sbin/ifconfig bridge0 addm wlan0 addm nfe0
/sbin/ifconfig bridge0 up
/etc/rc.d/hostapd forcestart

И запускаю его вручную. Собственно, то же самое можно впихать в /etc/rc.local и тогда оно поднимается автоматически, но я рассудил, что мне wifi нужно редко, и нефиг ему светить по соседям, да еще подниматься не через правильный rc.conf а откуда-то сбоку. Собственно, если кто надоумит, как сделать правильно, то буду очень благодарен.
Если бы wlan0 корректно поднимался через /etc/rc.conf, то мост надо было бы поднимать там же, вставив туда вот такое:

1
2
cloned_interfaces="bridge0"
ifconfig_bridge0="up addm run0 addm nfe0"

Имя интерфейса не забываем менять.
Заодно тогда надо в /etc/rc.conf добавить

1
hostapd_enable="YES"

Однако при ручной загрузке из скрипта или автоматической из /etc/rc.local эта конструкция вызывает неработоспособность системы, так что я hostapd запускаю последней строчкой в скрипте.

Модули я гружу из /boot/loader.conf:

1
2
3
4
runfw_load="YES"
if_run_load="YES"
wlan_xauth_load="YES"
if_bridge_load="YES"

2 комментария на “Ralink 2870 FreeBSD —”

  • Castor says:

    wlan0 на 8.2 и RaLink 3072 у меня вроде нормально подымается с такими строчками в rc.conf:wlans_run0=»wlan0″create_args_wlan0=»wlanmode hostap ssid FBSDap mode 11g channel 1″ifconfig_wlan0=»inet 192.168.2.1 netmask 255.255.255.0″

  • Demonoid says:

    Спасибо огромное!Как раз то что надо, но карточка у меня TL-WN951Nпоменял интерфейс и все заработало с первого раза!!!

Оставить комментарий

PR-CY.ru