Точка доступа на FreeBSD

В данной статье по горячим следам я изложил процесс настройки точки доступа на операционной системе 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, то можно адаптировать нетбук практически под любые задачи и требования.

Добавить комментарий

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
Яндекс.Метрика