В данной статье по горячим следам я изложил процесс настройки точки доступа на операционной системе 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
- # echo 'hostapd_enable="YES"' >> /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
- 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