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

Опубликовано nekit - пт, 21/12/2012 - 15:29

В данной статье по горячим следам я изложил процесс настройки точки доступа на операционной системе FreeBSD. Побудило меня на это: необходимость срочной замены вышедшей из строя железки D-Link DWL-2100AP, которая работала в режиме моста и предоставляла беспроводным клиентам доступ к ресурсам локальной сети. Другой точки доступа под рукой не оказалось, зато был неиспользуемый нетбук Asus EeePC 701 (который имел все необходимое для реализации задачи: интерфейс Ethernet и модуль Wi-Fi), поэтому он был использован в качестве платформы для будущей точки доступа. Процесс установки FreeBSD на нетбук здесь я описывать не буду, так как он хорошо описан в этой статье, а после установки системы будет полезно почитать про первоначальную настройку системы — ссылка. Все действия я буду производить на FreeBSD версии 8.3.

Первым делом я пересобрал ядро, выкинув оттуда все лишнее и включив все необходимое (включая модули из вывода команды kldstat). Также при сборке ядра я отключил сборку ядерных модулей, ибо ни к чему они на стационарной железке, выполняющей только определенный ряд функций. Вот мой конфиг ядра:

  1. cpu     I686_CPU
  2. ident       EEEPC-AP
  3.  
  4. options     SCHED_ULE       # ULE scheduler
  5. options     PREEMPTION      # Enable kernel thread preemption
  6. options     INET            # InterNETworking
  7. #options    INET6           # IPv6 communications protocols
  8. options     SCTP            # Stream Control Transmission Protocol
  9. options     FFS         # Berkeley Fast Filesystem
  10. options     SOFTUPDATES     # Enable FFS soft updates support
  11. options     UFS_ACL         # Support for access control lists
  12. options     UFS_DIRHASH     # Improve performance on big directories
  13. options     UFS_GJOURNAL        # Enable gjournal-based UFS journaling
  14. options     MD_ROOT         # MD is a potential root device
  15. options     NFSCLIENT       # Network Filesystem Client
  16. options     NFSSERVER       # Network Filesystem Server
  17. options     NFSLOCKD        # Network Lock Manager
  18. options     NFS_ROOT        # NFS usable as /, requires NFSCLIENT
  19. options     MSDOSFS         # MSDOS Filesystem
  20. options     CD9660          # ISO 9660 Filesystem
  21. options     PROCFS          # Process filesystem (requires PSEUDOFS)
  22. options     PSEUDOFS        # Pseudo-filesystem framework
  23. options     GEOM_PART_GPT       # GUID Partition Tables.
  24. options     GEOM_LABEL      # Provides labelization
  25. options     COMPAT_43TTY        # BSD 4.3 TTY compat (sgtty)
  26. options     COMPAT_FREEBSD4     # Compatible with FreeBSD4
  27. options     COMPAT_FREEBSD5     # Compatible with FreeBSD5
  28. options     COMPAT_FREEBSD6     # Compatible with FreeBSD6
  29. options     COMPAT_FREEBSD7     # Compatible with FreeBSD7
  30. options     SCSI_DELAY=5000     # Delay (in ms) before probing SCSI
  31. options     KTRACE          # ktrace(1) support
  32. options     STACK           # stack(9) support
  33. options     SYSVSHM         # SYSV-style shared memory
  34. options     SYSVMSG         # SYSV-style message queues
  35. options     SYSVSEM         # SYSV-style semaphores
  36. options     P1003_1B_SEMAPHORES # POSIX-style semaphores
  37. options     _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
  38. options     PRINTF_BUFR_SIZE=128    # Prevent printf output being interspersed.
  39. options     KBD_INSTALL_CDEV    # install a CDEV entry in /dev
  40. options     HWPMC_HOOKS     # Necessary kernel hooks for hwpmc(4)
  41. options     AUDIT           # Security event auditing
  42. #options    MAC         # TrustedBSD MAC Framework
  43. #options    KDTRACE_HOOKS       # Kernel DTrace hooks
  44. options     INCLUDE_CONFIG_FILE     # Include this file in kernel
  45.  
  46. options     KDB         # Kernel debugger related code
  47. options     KDB_TRACE       # Print a stack trace for a panic
  48.  
  49. #=======================================================================
  50. device cpuctl
  51. device acpi_video
  52. device acpi_asus
  53.  
  54. # модуль необходимый для создания интерфейса "моста"
  55. device if_bridge
  56.  
  57. # модуль необходим для демона hostapd
  58. device wlan_xauth
  59.  
  60. # модуль необходим для отключения экрана во время простоя
  61. device green_saver
  62. #=======================================================================
  63. # To make an SMP kernel, the next two lines are needed
  64. options     SMP         # Symmetric MultiProcessor Kernel
  65. device      apic            # I/O APIC
  66.  
  67. # CPU frequency control
  68. device      cpufreq
  69.  
  70. # Bus support.
  71. device      acpi
  72. device      eisa
  73. device      pci
  74.  
  75. # ATA and ATAPI devices
  76. device      ata
  77. device      atadisk     # ATA disk drives
  78. options     ATA_STATIC_ID   # Static device numbering
  79.  
  80. # SCSI peripherals
  81. device      scbus       # SCSI bus (required for SCSI)
  82. device      da      # Direct Access (disks)
  83.  
  84. device      kbdmux      # keyboard multiplexer
  85. device      vga     # VGA video card driver
  86. device      splash      # Splash screen and screen saver support
  87.  
  88. # syscons is the default console driver, resembling an SCO console
  89. device      sc
  90.  
  91. # Add suspend/resume support for the i8254.
  92. device      pmtimer
  93.  
  94. # PCI Ethernet NICs that use the common MII bus controller code.
  95. # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
  96. device      miibus      # MII bus support
  97. device      ae      # Attansic/Atheros L2 FastEthernet
  98.  
  99. # Wireless NIC cards
  100. device      wlan        # 802.11 support
  101. options     IEEE80211_DEBUG # enable debug msgs
  102. options     IEEE80211_AMPDU_AGE # age frames in AMPDU reorder q's
  103. options     IEEE80211_SUPPORT_MESH  # enable 802.11s draft support
  104. device      wlan_wep    # 802.11 WEP support
  105. device      wlan_ccmp   # 802.11 CCMP support
  106. device      wlan_tkip   # 802.11 TKIP support
  107. device      wlan_amrr   # AMRR transmit rate control algorithm
  108. #device     an      # Aironet 4500/4800 802.11 wireless NICs.
  109. device      ath     # Atheros pci/cardbus NIC's
  110. device      ath_hal     # pci/cardbus chip support
  111. options     AH_SUPPORT_AR5416   # enable AR5416 tx/rx descriptors
  112. device      ath_rate_sample # SampleRate tx rate control for ath
  113.  
  114. # Pseudo devices.
  115. device      loop        # Network loopback
  116. device      random      # Entropy device
  117. device      ether       # Ethernet support
  118. device      vlan        # 802.1Q VLAN support
  119. device      tun     # Packet tunnel.
  120. device      pty     # BSD-style compatibility pseudo ttys
  121. device      md      # Memory "disks"
  122. device      gif     # IPv6 and IPv4 tunneling
  123. device      faith       # IPv6-to-IPv4 relaying (translation)
  124. device      firmware    # firmware assist module
  125.  
  126. # The `bpf' device enables the Berkeley Packet Filter.
  127. # Be aware of the administrative consequences of enabling this!
  128. # Note that 'bpf' is required for DHCP.
  129. device      bpf     # Berkeley packet filter
  130.  
  131. # USB support
  132. options     USB_DEBUG   # enable debug msgs
  133. device      uhci        # UHCI PCI->USB interface
  134. device      ohci        # OHCI PCI->USB interface
  135. device      ehci        # EHCI PCI->USB interface (USB 2.0)
  136. device      usb     # USB Bus (required)
  137. device      uhid        # "Human Interface Devices"
  138. device      ukbd        # Keyboard
  139. device      umass       # Disks/Mass storage - Requires scbus and da
При желании из ядра можно повыкидывать еще некоторые опции. Сборку и установку ядра я выполнил такими командами:
  1. # cd /usr/src
  2. # make NO_MODULES=yes buildkernel KERCONF=EEEPC-AP
  3. # make NO_MODULES=yes installkernel KERCONF=EEEPC-AP
Для уменьшения занимаемого места, ядро можно сжать:
  1. # cd /boot/kernel
  2. # gzip -9 kernel

Для сравнения стоит сказать, что размер ядра после всех этих махинаций сократился примерно на 147Мб, то есть стандартное ядро GENERIC занимало на диске 150Мб, а новое занимает всего 2,7Мб (не забываем, что у используемого нетбука SSD всего 4Гб, поэтому здесь я обратил на это внимание).

После установки нового ядра, компьютер необходимо перезагрузить и проверить работоспособность системы. Если все работает как нужно, то переходим к настройке беспроводного интерфейса. На предыдущей точке доступа было настроено шифрование соединения между точкой и клиентами, а также был задан пароль, необходимый для подключения. Для реализации подобного функционала в FreeBSD есть демон hostapd, конфигурационный файл которого должен находиться здесь — /etc/hostapd.conf (стоит отметить, что пример содержимого этого файла можно взять отсюда /usr/share/examples/hostapd/hostapd.conf). У меня он выглядит так:

  1. # Имя беспроводного интерфейса.
  2. interface=wlan0
  3. # Используемый для взаимодействия с интерфейсом драйвер.
  4. driver=bsd
  5. # Уровень отладки.
  6. debug=0
  7. # Путь к сокету, через который можно будет взаимодействовать с демоном.
  8. ctrl_interface=/var/run/hostapd
  9. # Группа, которой будет разрешен доступ к сокету.
  10. ctrl_interface_group=wheel
  11.  
  12. # Имя сети.
  13. ssid=netname
  14. # Код страны.
  15. country_code=RU
  16. # Режим работы (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g).
  17. hw_mode=g
  18. # Номер используемого для работы канала.
  19. channel=11
  20. # Максимальное количество одновременных соединений.
  21. max_num_sta=16
  22.  
  23. # Включить WPA.
  24. # bit0 = WPA
  25. # bit1 = IEEE 802.11i/RSN (WPA2)
  26. wpa=2
  27. # Тут надо вписать пароль, который будет использоваться для доступа.
  28. wpa_passphrase=пароль
  29. # Протокол управления ключами.
  30. wpa_key_mgmt=WPA-PSK
  31. # Разрешенные алгоритмы шифрования.
  32. wpa_pairwise=TKIP CCMP
Добавляеи демон hostapd в автозагрузку:
  1. # echo 'hostapd_enable="YES"' >> /etc/rc.conf
Теперь нужно настроить беспроводной интерфейс. У меня система определила его как ath0. Добавляем такие строчки в /etc/rc.conf:
  1. wlans_ath0="wlan0"
  2. create_args_wlan0="wlanmode hostap"
  3. ifconfig_wlan0="mode 11g channel 11 up"
Ну и чтобы не перезагружать компьютер можно ввести такие команды в консоли:
  1. # ifconfig wlan0 create wlandev ath0 wlanmode hostap
  2. # ifconfig wlan0 mode 11g channel 11 up
  3. # service hostapd start
После этих не сложных действий клиенты уже смогут подключиться к точке доступа. На данном этапе у нас есть точка доступа, но нет функционала моста. Настраиваем... Интерфейс, смотрящий в локальную сеть у меня определился, как ae0. Для поднятия моста во время старта системы добавляем в /etc/rc.conf:
  1. cloned_interfaces="bridge0"
  2. ifconfig_ae0="up"      # проводной интерфейс, смотрящий в локальную сеть
  3. ifconfig_bridge0="inet 192.168.7.252 netmask 0xffffff00 addm ae0 addm wlan0 up"
Ну и чтобы не перезагружать компьютер можно ввести такие команды в консоли:
  1. # ifconfig ae0 up
  2. # ifconfig bridge0 create
  3. # ifconfig bridge0 inet 192.168.7.252 netmask 0xffffff00 addm ae0 addm wlan0 up
Итак, настройку операционной системы FreeBSD в качестве точки доступа можно считать завершенной. По наблюдениям: какой-либо разницы в работе между текущей и вышедшей из строя точкой доступа замечено не было, правда можно отметить небольшой плюс — это то, что нетбук нет необходимости подключать к ИБП, так как у него есть свой аккумулятор :). При необходимости фильтрации проходящего трафика через точку доступа и/или реализации QoS можно подключить файервол, например, ipfw с dummynet. Также для удобства работы, на нетбук можно навешать дополнительных сервисов, например, ssh, ftp, в общем раз стоит FreeBSD, то можно адаптировать нетбук практически под любые задачи и требования.

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

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