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

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

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

Filtered text

CAPTCHA
Этот вопрос предназначен для предотвращения автоматизированной обработки форм.
Fill in the blank.