А так же USB wifi адаптер tp-link TL-WN727N, построенный на чипе Ralink 2870. Начиная с freebsd8.1 в системе есть драйвера для этого чипа, чтобы карточка опозналась, надо подгрузить модули ядра:
# kldload runfw
# kldload if_run
Либо добавляем их в /boot/loader.conf. Кроме того, нужен еще модуль wlan_xauth, соответственно, с ним поступаем так же.
Адаптер после этого определится как run0, однако с помощью ifconfig с ним работать не получается, надо создать виртуальное устройство wlan0, заодно сразу перевести его в режим точки доступа (hostap):
Здесь wlanmode - режим работы (hostap – точка доступа, может быть еще BSS – режим клиента, и monitor – вообще ненужная рядовому обывателю штука. А нерядовые могут об этом почитать в man run), ssid - имя нашей сети, мы его будем видеть в списке сетей на клиенте.
Теперь надо включить аутентификацию, мы же не хотим, чтобы к нам в сеть ходили кто попало? Значит, создаем файлик /etc/hostapd.conf:
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 – ключевое слово для доступа в сеть, его будут спрашивать у клиентов. Проявите фантазию, и вообще, меняйте ее почаще, нынче ломают все подряд.
Создаем папочку, которую в конфиге объявили:
# mkdir /var/run/hostapd
теперь надо запустить демона hostapd, который как раз и занимается аутентификацией:
/etc/rc.d/hostapd forcestart
Собственно, если после этого ifconfig показывает нам что-то наподобие:
wlan0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 2290
То уже почти работает. Почему почти? потому-что надо еще настроить бридж между своей внутренней сетевкой и wifi адаптером. Не, если внутренней сетевки нету, то для wlan0 с помощью ifconfig нормально настраивается обычная сеть, но у меня как раз внутренняя проводная сеть и дополнительных маршрутов я вводить не хочу, поэтому буду делать bridge, у меня там еще и dhcp до кучи, в общем, будет удобно.
Для этого грузим соответствующий модуль и создаем мост:
# kldload if_bridge
# ifconfig bridge0 create
Объединяем в мост внутренний проводной интерфейс и беспроводной и поднимаем мост:
# ifconfig bridge0 addm wlan0 addm nfe0
# ifconfig bridge0 up
Вместо nfe0 следует подставить имя своего интерфейса.
Все, после этого я с ноута смог подцепиться к сети, ходить в интернет и иметь доступ к локальным ресурсам.
С автоматизацией процесса, однако, у меня не заладилось. Точнее, не заладился перевод адаптера в hostap. Умные люди для этого советую в /etc/rc.conf вставтиь строчку
Однако моя система на подобную конструкцию обижается фразой device not configured и ничего не работает. Я бился-бился, но так и не смог совладать с чудом враждебной техники, посему просто сляпал скрипт, который поднимает интерфейс и мост:
И запускаю его вручную. Собственно, то же самое можно впихать в /etc/rc.local и тогда оно поднимается автоматически, но я рассудил, что мне wifi нужно редко, и нефиг ему светить по соседям, да еще подниматься не через правильный rc.conf а откуда-то сбоку. Собственно, если кто надоумит, как сделать правильно, то буду очень благодарен.
Если бы wlan0 корректно поднимался через /etc/rc.conf, то мост надо было бы поднимать там же, вставив туда вот такое:
cloned_interfaces="bridge0"
ifconfig_bridge0="up addm run0 addm nfe0"
Имя интерфейса не забываем менять.
Заодно тогда надо в /etc/rc.conf добавить
hostapd_enable="YES"
Однако при ручной загрузке из скрипта или автоматической из /etc/rc.local эта конструкция вызывает неработоспособность системы, так что я hostapd запускаю последней строчкой в скрипте.