Настройка FreeBSD в качестве WI-FI точки доступа
Kernel Configuration
To use wireless networking, a wireless networking card is needed and the kernel needs to be configured with the appropriate wireless networking support. The kernel is separated into multiple modules so that only the required support needs to be configured.
The most commonly used wireless devices are those that use parts made by Atheros. These devices are supported by ath(4) and require the following line to be added to /boot/loader.conf:
if_ath_load=«YES»
The Atheros driver is split up into three separate pieces: the driver (ath(4)), the hardware support layer that handles chip-specific functions (ath_hal(4)), and an algorithm for selecting the rate for transmitting frames. When this support is loaded as kernel modules, any dependencies are automatically handled. To load support for a different type of wireless device, specify the module for that device. This example is for devices based on the Intersil Prism parts (wi(4)) driver:
if_wi_load=«YES»
Note:
The examples in this section use an ath(4) device and the device name in the examples must be changed according to the configuration. A list of available wireless drivers and supported adapters can be found in the FreeBSD Hardware Notes, available on the Release Information page of the FreeBSD website. If a native FreeBSD driver for the wireless device does not exist, it may be possible to use the Windows® driver with the help of the NDIS driver wrapper.
In addition, the modules that implement cryptographic support for the security protocols to use must be loaded. These are intended to be dynamically loaded on demand by the wlan(4) module, but for now they must be manually configured. The following modules are available: wlan_wep(4), wlan_ccmp(4), and wlan_tkip(4). The wlan_ccmp(4) and wlan_tkip(4) drivers are only needed when using the WPA or 802.11i security protocols. If the network does not use encryption, wlan_wep(4) support is not needed. To load these modules at boot time, add the following lines to /boot/loader.conf:
wlan_wep_load=«YES» wlan_ccmp_load=«YES» wlan_tkip_load=«YES»
Once this information has been added to /boot/loader.conf, reboot the FreeBSD box. Alternately, load the modules by hand using kldload(8). Note:
For users who do not want to use modules, it is possible to compile these drivers into the kernel by adding the following lines to a custom kernel configuration file:
device wlan # 802.11 support device wlan_wep # 802.11 WEP support device wlan_ccmp # 802.11 CCMP support device wlan_tkip # 802.11 TKIP support device wlan_amrr # AMRR transmit rate control algorithm device ath # Atheros pci/cardbus NIC's device ath_hal # pci/cardbus chip support options AH_SUPPORT_AR5416 # enable AR5416 tx/rx descriptors device ath_rate_sample # SampleRate tx rate control for ath
With this information in the kernel configuration file, recompile the kernel and reboot the FreeBSD machine.
30.3.6.3. WPA2 Host-based Access Point
This section focuses on setting up a FreeBSD access point using the WPA2 security protocol. More details regarding WPA and the configuration of WPA-based wireless clients can be found in Section 30.3.4.1.3, “WPA”.
The hostapd(8) daemon is used to deal with client authentication and key management on the WPA2-enabled AP.
The following configuration operations are performed on the FreeBSD machine acting as the AP. Once the AP is correctly working, hostapd(8) can be automatically started at boot with this line in /etc/rc.conf:
hostapd_enable=«YES»
Before trying to configure hostapd(8), first configure the basic settings introduced in Section 30.3.6.1, “Basic Settings”. 30.3.6.3.1. WPA2-PSK
WPA2-PSK is intended for small networks where the use of a backend authentication server is not possible or desired.
The configuration is done in /etc/hostapd.conf:
interface=wlan0 1 debug=1 2 ctrl_interface=/var/run/hostapd 3 ctrl_interface_group=wheel 4 ssid=freebsdap 5 wpa=2 6 wpa_passphrase=freebsdmall 7 wpa_key_mgmt=WPA-PSK 8 wpa_pairwise=CCMP 9
1
Wireless interface used for the access point.
2
Level of verbosity used during the execution of hostapd(8). A value of 1 represents the minimal level.
3
Pathname of the directory used by hostapd(8) to store domain socket files for communication with external programs such as hostapd_cli(8). The default value is used in this example.
4
The group allowed to access the control interface files.
5
The wireless network name, or SSID, that will appear in wireless scans.
6
Enable WPA and specify which WPA authentication protocol will be required. A value of 2 configures the AP for WPA2 and is recommended. Set to 1 only if the obsolete WPA is required.
7
ASCII passphrase for WPA authentication. Warning:
Always use strong passwords that are at least 8 characters long and made from a rich alphabet so that they will not be easily guessed or attacked.
8
The key management protocol to use. This example sets WPA-PSK.
9
Encryption algorithms accepted by the access point. In this example, only the CCMP (AES) cipher is accepted. CCMP is an alternative to TKIP and is strongly preferred when possible. TKIP should be allowed only when there are stations incapable of using CCMP.
The next step is to start hostapd(8):
# service hostapd forcestart
# ifconfig wlan0 wlan0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 04:f0:21:16:8e:10 inet6 fe80::6f0:21ff:fe16:8e10%wlan0 prefixlen 64 scopeid 0x9 nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL> media: IEEE 802.11 Wireless Ethernet autoselect mode 11na <hostap> status: running ssid No5ignal channel 36 (5180 MHz 11a ht/40+) bssid 04:f0:21:16:8e:10 country US ecm authmode WPA2/802.11i privacy MIXED deftxkey 2 AES-CCM 2:128-bit AES-CCM 3:128-bit txpower 17 mcastrate 6 mgmtrate 6 scanvalid 60 ampdulimit 64k ampdudensity 8 shortgi wme burst dtimperiod 1 -dfs groups: wlan
Once the AP is running, the clients can associate with it. See Section 30.3.4.1.3, “WPA” for more details. It is possible to see the stations associated with the AP using ifconfig wlan0 list sta.
It is possible to see the stations associated with the AP using
ifconfig wlan0 list sta
Точка доступа на FreeBSD Опубликовано пт, 21/12/2012 - 15:29 пользователем nekit Настройка
В данной статье по горячим следам я изложил процесс настройки точки доступа на операционной системе FreeBSD. Побудило меня на это: необходимость срочной замены вышедшей из строя железки D-Link DWL-2100AP, которая работала в режиме моста и предоставляла беспроводным клиентам доступ к ресурсам локальной сети. Другой точки доступа под рукой не оказалось, зато был неиспользуемый нетбук Asus EeePC 701 (который имел все необходимое для реализации задачи: интерфейс Ethernet и модуль Wi-Fi), поэтому он был использован в качестве платформы для будущей точки доступа. Процесс установки FreeBSD на нетбук здесь я описывать не буду, так как он хорошо описан в этой статье, а после установки системы будет полезно почитать про первоначальную настройку системы — ссылка. Все действия я буду производить на FreeBSD версии 8.3.
Первым делом я пересобрал ядро, выкинув оттуда все лишнее и включив все необходимое (включая модули из вывода команды kldstat). Также при сборке ядра я отключил сборку ядерных модулей, ибо ни к чему они на стационарной железке, выполняющей только определенный ряд функций. Вот мой конфиг ядра:
cpu I686_CPU
ident EEEPC-AP
options SCHED_ULE # ULE scheduler
options PREEMPTION # Enable kernel thread preemption
options INET # InterNETworking
#options INET6 # IPv6 communications protocols
options SCTP # Stream Control Transmission Protocol
options FFS # Berkeley Fast Filesystem
options SOFTUPDATES # Enable FFS soft updates support
options UFS_ACL # Support for access control lists
options UFS_DIRHASH # Improve performance on big directories
options UFS_GJOURNAL # Enable gjournal-based UFS journaling
options MD_ROOT # MD is a potential root device
options NFSCLIENT # Network Filesystem Client
options NFSSERVER # Network Filesystem Server
options NFSLOCKD # Network Lock Manager
options NFS_ROOT # NFS usable as /, requires NFSCLIENT
options MSDOSFS # MSDOS Filesystem
options CD9660 # ISO 9660 Filesystem
options PROCFS # Process filesystem (requires PSEUDOFS)
options PSEUDOFS # Pseudo-filesystem framework
options GEOM_PART_GPT # GUID Partition Tables.
options GEOM_LABEL # Provides labelization
options COMPAT_43TTY # BSD 4.3 TTY compat (sgtty)
options COMPAT_FREEBSD4 # Compatible with FreeBSD4
options COMPAT_FREEBSD5 # Compatible with FreeBSD5
options COMPAT_FREEBSD6 # Compatible with FreeBSD6
options COMPAT_FREEBSD7 # Compatible with FreeBSD7
options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI
options KTRACE # ktrace(1) support
options STACK # stack(9) support
options SYSVSHM # SYSV-style shared memory
options SYSVMSG # SYSV-style message queues
options SYSVSEM # SYSV-style semaphores
options P1003_1B_SEMAPHORES # POSIX-style semaphores
options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
options PRINTF_BUFR_SIZE=128 # Prevent printf output being interspersed.
options KBD_INSTALL_CDEV # install a CDEV entry in /dev
options HWPMC_HOOKS # Necessary kernel hooks for hwpmc(4)
options AUDIT # Security event auditing
#options MAC # TrustedBSD MAC Framework
#options KDTRACE_HOOKS # Kernel DTrace hooks
options INCLUDE_CONFIG_FILE # Include this file in kernel
options KDB # Kernel debugger related code
options KDB_TRACE # Print a stack trace for a panic
#
device cpuctl
device acpi_video
device acpi_asus
# модуль необходимый для создания интерфейса «моста»
device if_bridge
# модуль необходим для демона hostapd
device wlan_xauth
# модуль необходим для отключения экрана во время простоя
device green_saver
#
# To make an SMP kernel, the next two lines are needed
options SMP # Symmetric MultiProcessor Kernel
device apic # I/O APIC
# CPU frequency control
device cpufreq
# Bus support.
device acpi
device eisa
device pci
# ATA and ATAPI devices
device ata
device atadisk # ATA disk drives
options ATA_STATIC_ID # Static device numbering
# SCSI peripherals
device scbus # SCSI bus (required for SCSI)
device da # Direct Access (disks)
device kbdmux # keyboard multiplexer
device vga # VGA video card driver
device splash # Splash screen and screen saver support
# syscons is the default console driver, resembling an SCO console
device sc
# Add suspend/resume support for the i8254.
device pmtimer
# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device miibus # MII bus support
device ae # Attansic/Atheros L2 FastEthernet
# Wireless NIC cards
device wlan # 802.11 support
options IEEE80211_DEBUG # enable debug msgs
options IEEE80211_AMPDU_AGE # age frames in AMPDU reorder q's
options IEEE80211_SUPPORT_MESH # enable 802.11s draft support
device wlan_wep # 802.11 WEP support
device wlan_ccmp # 802.11 CCMP support
device wlan_tkip # 802.11 TKIP support
device wlan_amrr # AMRR transmit rate control algorithm
#device an # Aironet 4500/4800 802.11 wireless NICs.
device ath # Atheros pci/cardbus NIC's
device ath_hal # pci/cardbus chip support
options AH_SUPPORT_AR5416 # enable AR5416 tx/rx descriptors
device ath_rate_sample # SampleRate tx rate control for ath
# Pseudo devices.
device loop # Network loopback
device random # Entropy device
device ether # Ethernet support
device vlan # 802.1Q VLAN support
device tun # Packet tunnel.
device pty # BSD-style compatibility pseudo ttys
device md # Memory «disks»
device gif # IPv6 and IPv4 tunneling
device faith # IPv6-to-IPv4 relaying (translation)
device firmware # firmware assist module
# The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that 'bpf' is required for DHCP.
device bpf # Berkeley packet filter
# USB support
options USB_DEBUG # enable debug msgs
device uhci # UHCI PCI→USB interface
device ohci # OHCI PCI→USB interface
device ehci # EHCI PCI→USB interface (USB 2.0)
device usb # USB Bus (required)
device uhid # «Human Interface Devices»
device ukbd # Keyboard
device umass # Disks/Mass storage - Requires scbus and da
При желании из ядра можно повыкидывать еще некоторые опции. Сборку и установку ядра я выполнил такими командами:
# cd /usr/src
# make NO_MODULES=yes buildkernel KERCONF=EEEPC-AP
# make NO_MODULES=yes installkernel KERCONF=EEEPC-AP
Для уменьшения занимаемого места, ядро можно сжать:
# cd /boot/kernel
# gzip -9 kernel
Для сравнения стоит сказать, что размер ядра после всех этих махинаций сократился примерно на 147Мб, то есть стандартное ядро GENERIC занимало на диске 150Мб, а новое занимает всего 2,7Мб (не забываем, что у используемого нетбука SSD всего 4Гб, поэтому здесь я обратил на это внимание).
После установки нового ядра, компьютер необходимо перезагрузить и проверить работоспособность системы. Если все работает как нужно, то переходим к настройке беспроводного интерфейса. На предыдущей точке доступа было настроено шифрование соединения между точкой и клиентами, а также был задан пароль, необходимый для подключения. Для реализации подобного функционала в FreeBSD есть демон hostapd, конфигурационный файл которого должен находиться здесь — /etc/hostapd.conf (стоит отметить, что пример содержимого этого файла можно взять отсюда /usr/share/examples/hostapd/hostapd.conf). У меня он выглядит так:
# Имя беспроводного интерфейса.
interface=wlan0
# Используемый для взаимодействия с интерфейсом драйвер.
driver=bsd
# Уровень отладки.
debug=0
# Путь к сокету, через который можно будет взаимодействовать с демоном.
ctrl_interface=/var/run/hostapd
# Группа, которой будет разрешен доступ к сокету.
ctrl_interface_group=wheel
# Имя сети.
ssid=netname
# Код страны.
country_code=RU
# Режим работы (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g).
hw_mode=g
# Номер используемого для работы канала.
channel=11
# Максимальное количество одновременных соединений.
max_num_sta=16
# Включить WPA.
# bit0 = WPA
# bit1 = IEEE 802.11i/RSN (WPA2)
wpa=2
# Тут надо вписать пароль, который будет использоваться для доступа.
wpa_passphrase=пароль
# Протокол управления ключами.
wpa_key_mgmt=WPA-PSK
# Разрешенные алгоритмы шифрования.
wpa_pairwise=TKIP CCMP
Добавляеи демон hostapd в автозагрузку:
# echo 'hostapd_enable=«YES»' » /etc/rc.conf
Теперь нужно настроить беспроводной интерфейс. У меня система определила его как ath0. Добавляем такие строчки в /etc/rc.conf:
wlans_ath0=«wlan0»
create_args_wlan0=«wlanmode hostap»
ifconfig_wlan0=«mode 11g channel 11 up»
Ну и чтобы не перезагружать компьютер можно ввести такие команды в консоли:
# ifconfig wlan0 create wlandev ath0 wlanmode hostap
# ifconfig wlan0 mode 11g channel 11 up
# service hostapd start
После этих не сложных действий клиенты уже смогут подключиться к точке доступа. На данном этапе у нас есть точка доступа, но нет функционала моста. Настраиваем… Интерфейс, смотрящий в локальную сеть у меня определился, как ae0. Для поднятия моста во время старта системы добавляем в /etc/rc.conf:
cloned_interfaces=«bridge0»
ifconfig_ae0=«up» # проводной интерфейс, смотрящий в локальную сеть
ifconfig_bridge0=«inet 192.168.7.252 netmask 0xffffff00 addm ae0 addm wlan0 up»
Ну и чтобы не перезагружать компьютер можно ввести такие команды в консоли:
# ifconfig ae0 up
# ifconfig bridge0 create
# ifconfig bridge0 inet 192.168.7.252 netmask 0xffffff00 addm ae0 addm wlan0 up
Итак, настройку операционной системы FreeBSD в качестве точки доступа можно считать завершенной. По наблюдениям: какой-либо разницы в работе между текущей и вышедшей из строя точкой доступа замечено не было, правда можно отметить небольшой плюс — это то, что нетбук нет необходимости подключать к ИБП, так как у него есть свой аккумулятор :). При необходимости фильтрации проходящего трафика через точку доступа и/или реализации QoS можно подключить файервол, например, ipfw с dummynet. Также для удобства работы, на нетбук можно навешать дополнительных сервисов, например, ssh, ftp, в общем раз стоит FreeBSD, то можно адаптировать нетбук практически под любые задачи и требования. Полезные ссылки: Про беспроводную сеть в хэндбуке. Справочное руководство по hostapd.conf
Ссылки:
https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-wireless.html
http://www.lissyara.su/articles/freebsd/security/hotspot
http://www.info-x.org/freebsd/nastroika/tochka_dostupa_na_freebsd.html