Гид по технологиям

Как настроить беспроводную точку доступа на FreeBSD

• 7 min read • Сеть • Обновлено 23 Nov 2025
FreeBSD: настройка беспроводной точки доступа
FreeBSD: настройка беспроводной точки доступа

Важно: предполагается, что команды выполняются от root. Если вы не уверены в шагах по подключению к upstream (интернет‑провайдеру), сначала ознакомьтесь с разделом «Network Communication» в FreeBSD Handbook.

Введение и назначение

Этот документ дополняет FreeBSD Handbook и описывает практическую настройку FreeBSD в роли беспроводной точки доступа (Access Point). Исходная задача: обеспечить клиентам доступ в локальную сеть и в Интернет через один внешний интерфейс.

Определения в одну строку:

  • hostapd — демон, реализующий режим точки доступа для WLAN.
  • pf — OpenBSD Packet Filter, используемый как фаервол и NAT.
  • isc‑dhcpd — DHCP‑сервер ISC для раздачи IP клиентам.

Целевая аудитория: системные администраторы и опытные пользователи FreeBSD, знакомые с базовыми командами shell и работой сетевых интерфейсов.

Требования к оборудованию и заметки

  • Один сетевой интерфейс для подключения к upstream (ext_if) — в примере fxp0.
  • Один беспроводной интерфейс для клиентов (wifi_if) — в примере ath0. Рекомендуются Atheros‑карты, но подойдёт любая поддерживаемая FreeBSD карта.
  • Опционально: второй проводной интерфейс для LAN (lan_if) — в примере fxp1.

Скачиваемые примеры конфигураций: http://tun0.net/ascii/config/freebsd_access_point/ (ссылка оставлена автором).

План действий (вкратце)

  1. Убедиться, что установлены hostapd, named (BIND) и isc‑dhcpd.
  2. При необходимости перекомпилировать ядро для поддержки pf.
  3. Настроить сетевые интерфейсы (ext_if, lan_if, wifi_if).
  4. Настроить pf для NAT и базового фильтра.
  5. Настроить DHCP и hostapd.
  6. Обеспечить автозапуск через /etc/rc.conf и /boot/loader.conf.
  7. Запустить службы и проверить работоспособность.

Подготовка: проверки установленных компонентов

Проверка наличия BIND

Выполните:

which named

Если ответ “named not found”, установите BIND:

sudo pkg_add -r bind9

Проверка наличия hostapd

Проверьте:

which hostapd

Если hostapd отсутствует, возможно, у вас минимальная установка. Добавьте недостающие наборы через инсталлятор или обновите систему из исходников.

Проверка исходников ядра

Для сборки кастомного ядра нужны исходники:

ls -l /usr/src/sys

Если каталога нет — синхронизируйте исходники (см. FreeBSD Handbook: Synchronizing Your Source).

Перекомпиляция ядра для PF

Короткая методика:

cd /usr/src/sys/uname -m/conf cp GENERIC CUSTOM

Добавьте в конфигурацию устройства PF и, при необходимости, ALTQ:

echo “device pf
device pflog
device pfsync” >> CUSTOM

Опционально добавить опции ALTQ:

options         ALTQ
options         ALTQ_CBQ        # Class Bases Queuing (CBQ)
options         ALTQ_RED        # Random Early Detection (RED)
options         ALTQ_RIO        # RED In/Out
options         ALTQ_HFSC       # Hierarchical Packet Scheduler (HFSC)
options         ALTQ_PRIQ       # Priority Queuing (PRIQ)
options         ALTQ_NOPCC      # Required for SMP build

Собираем и устанавливаем ядро:

cd /usr/src
make buildkernel KERNCONF=CUSTOM
make installkernel KERNCONF=CUSTOM

Перезагрузите систему:

shutdown -r now

Примечание: перекомпиляция ядра требует времени и понимания опций. При сомнениях сначала протестируйте в виртуальной среде.

Схема сети — пример

В примерах далее используются имена интерфейсов:

  • fxp0 — ext_if — внешний интерфейс, получает адрес от upstream (DHCP).
  • fxp1 — lan_if — проводной LAN, статический IP 192.168.0.1/24.
  • ath0 — wifi_if — беспроводной интерфейс, статический IP 192.168.1.1/24.

Если нужен только WLAN — пропустите fxp1/lan_if. Для проводной сети — уберите wifi_if/ath0.

Настройка интерфейсов

Получим IP для внешнего интерфейса:

dhclient fxp0

Назначим статический IP для lan_if:

ifconfig fxp1 inet 192.168.0.1 netmask 255.255.255.0

Загрузим драйверы для Atheros (пример для ath):

for d in {if_ath,ath_rate,ath_hal}; do kldload $d; done

Загрузим модули WLan:

for d in {wlan_wep_load,wlan_tkip_load,wlan_ccmp_load,wlan_xauth_load,wlan_acl_load}; do kldload $d; done

Назначим IP для wifi_if и включим hostap режим:

ifconfig ath0 inet 192.168.1.1 netmask 255.255.255.0 ssid YOURSSID mediaopt hostap

Совет: для удобства перенесите загрузку модулей в /boot/loader.conf, чтобы они подгружались автоматически при загрузке.

Настройка NAT и pf

Включим маршрутизацию и запустим pf:

sysctl -w net.inet.ip.forwarding=1
pfctl -e

Создайте /etc/pf.conf со следующим содержимым (файл приведён в оригинале — сохраните как есть, он уже охватывает NAT и базовые правила):

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#
# This configuration is set for use on a machine that is a router with
# three (3) network cards:
# ext_if - connects to the upstream link (cable/dsl modem, WAN, etc.)
# wifi_if - wireless card for internal network
#           (if none present, remove all references to it in this file)
# lan_if  - wired card for internal network
#           (if none present, remove all references to it in this file)
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#------------------------------------------------------------------------
# macros
#------------------------------------------------------------------------
logopt = "log"
# interfaces
ext_if  = "fxp0"
wifi_if = "ath0"
lan_if  = "fxp1"
# publically accesible services (transport layer neutral)
pubserv = "{ 22, 443 }"
# internally accessible services (transport layer neutral)
lanserv = "{ 22, 53, 67, 80, 443 }"
# samba ports (transport layer neutral)
samba_ports = "{ 137, 138, 139 }"
# externally permitted inbound icmp types
icmp_types = "echoreq"
# internal network
lan_net = "{ 192.168.0.0/24, 192.168.1.0/24 }"
# hosts granted acces to samba (cifs/smb) shares
smb_net = "{ 192.168.0.0/27, 192.168.1.0/27, 192.168.0.90, 192.168.1.90 }"
# block these networks
table  { 0.0.0.0/8, 10.0.0.0/8, 20.20.20.0/24, 127.0.0.0/8, \
        169.254.0.0/16, 172.16.0.0/12,  192.0.2.0/24, 192.168.0.0/16, \
        224.0.0.0/3,    255.255.255.255 }
#------------------------------------------------------------------------
# options
#------------------------------------------------------------------------
# config
set block-policy return
set loginterface $ext_if
set skip on lo0
# scrub
#scrub all reassemble tcp no-df
#scrub in all fragment reassemble
scrub out all random-id
#------------------------------------------------------------------------
# redirection (and nat, too!)
#------------------------------------------------------------------------
# network address translation
nat on $ext_if from $lan_net to any -> ($ext_if)
#------------------------------------------------------------------------
# firewall policy
#------------------------------------------------------------------------
# restrictive default rules
block all
block return-rst  in  $logopt on $ext_if proto tcp all
block return-icmp in  $logopt on $ext_if proto udp all
block             in  $logopt on $ext_if proto icmp all
block             out $logopt on $ext_if all
# trust localhost
pass in  quick on lo0 all
pass out quick on lo0 all
# anti spoofing
block drop in  $logopt quick on $ext_if from  to any
block drop out $logopt quick on $ext_if from any to 
antispoof for { $lan_if, $wifi_if, $ext_if }
# anti fake return-scans
block  return-rst  out on $ext_if proto tcp all 
block  return-rst  in  on $ext_if proto tcp all 
block  return-icmp out on $ext_if proto udp all
block  return-icmp in  on $ext_if proto udp all 
# toy with script kiddies scanning us
block in $logopt quick proto tcp flags FUP/WEUAPRSF 
block in $logopt quick proto tcp flags WEUAPRSF/WEUAPRSF 
block in $logopt quick proto tcp flags SRAFU/WEUAPRSF 
block in $logopt quick proto tcp flags /WEUAPRSF 
block in $logopt quick proto tcp flags SR/SR 
block in $logopt quick proto tcp flags SF/SF 
# open firewall fully
# warning: insecure. 'nuff said.
#pass in  quick all
#pass out quick all
# allow permitted icmp
pass in inet proto icmp all icmp-type $icmp_types keep state
# allow permitted services
pass in on $ext_if            inet proto tcp       from any      to any port $pubserv flags S/SA keep state
pass in on {$lan_if $wifi_if} inet proto {tcp udp} from $lan_net to any port $lanserv            keep state
pass in on {$lan_if $wifi_if} inet proto {tcp udp} from $smb_net to any port $samba_ports        keep state
# permit access between LAN hosts
pass in  from $lan_net to $lan_net keep state
pass out from $lan_net to $lan_net keep state
# permit full outbound access 
# warning: potentially insecure. you may wish to lock down outbound access.
pass out from any to any keep state

Загрузим конфигурацию pf:

pfctl -Fa -f /etc/pf.conf

Совет по безопасности: по умолчанию в примере разрешён полный исходящий трафик. Для более жёсткой политики сузьте набор разрешённых исходящих портов.

Установка и настройка ISC DHCP сервера

Установите пакет:

pkg_add -r isc-dhcp3-server

Отредактируйте /usr/local/etc/dhcpd.conf (файл приведён ниже — сохраните как есть, он описывает два подсети и примеры закреплённых адресов):

###
### GLOBAL SETTINGS
###
ddns-update-style none;
always-broadcast on;
default-lease-time 7200;
max-lease-time 7200;
authoritative;
option domain-name-servers 192.168.1.1;
option domain-name "localnet.localdomain";
option netbios-name-servers 192.168.1.1;
###
### WIRED LOCAL AREA NETWORK
###
subnet 192.168.0.0 netmask 255.255.255.0 {
    #
    # NOTES:
    # (1) allocation of endings 100-199 by DHCP is 
    # inteded for clients that are not specified
    # later in this file.
    # (2) allocation is done in increments of 10
    # and this is done intentionally.
    #
    range 192.168.0.100 192.168.0.199;
    option broadcast-address 192.168.0.255;
    option subnet-mask 255.255.255.0;
    option routers 192.168.0.1;
}
###
### WIRELESS NETWORK 
###
subnet 192.168.1.0 netmask 255.255.255.0 {
    # NOTE: See: wired->range.notes
        range 192.168.1.100 192.168.1.199;
        option broadcast-address 192.168.1.255;
        option subnet-mask 255.255.255.0;
        option routers 192.168.1.1;
}
###
### ASSIGN SPECIFIC IP ADDRESSES TO SPECIFIC HOSTS BASED ON MAC ADDRESS
### (optional)
###
## host foo
#host foo {
#        hardware ethernet XX:XX:XX:XX:XX:XX;
#        fixed-address 192.168.0.XYZ;
#}
## host bar
#host bar {
#        hardware ethernet XX:XX:XX:XX:XX:XX;
#        fixed-address 192.168.1.XYZ;
#}

Запустите dhcpd и проверьте логи на предмет ошибок.

Настройка hostapd

Отредактируйте /etc/hostapd.conf следующим образом (пример конфигурации ниже). Заполните YOURSSID и wpa_passphrase своими значениями:

interface=ath0
driver=bsd
logger_syslog=-1
logger_syslog_level=0
logger_stdout=-1
logger_stdout_level=0
debug=3
dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd
ctrl_interface_group=wheel
#### IEEE 802.11 related config ####
ssid=YOURSSID
macaddr_acl=0
auth_algs=1
#### IEEE 802.1X related config ####
ieee8021x=0
#### WPA/IEEE 802.11i config #####
wpa=1
wpa_passphrase=ENTER_YOUR_PASSPHRASE_HERE
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP TKIP

Рекомендации по безопасности для пароля: длина не менее 12 символов, смешение букв, цифр и символов.

Автозапуск через rc.conf и loader.conf

Пример /etc/rc.conf (внесите свои значения SSID/пароль при необходимости):

### GENERAL SETTINGS
gateway_enable="YES"
hostname="wifiap"
### CONFIGURATION FOR EXTERNAL INTERFACE (UPSTREAM LINK)
### example: link to cable/dsl modem
ifconfig_fxp0="DHCP"
### CONFIGURATION FOR INTERNAL WIRED NETWORK
ifconfig_fxp1="inet 192.168.0.1 netmask 255.255.255.0"
### CONFIGURATION FOR INTERNAL WIRELESS NETWORK
ifconfig_ath0="inet 192.168.1.1 netmask 255.255.255.0 ssid YOURSSID mediaopt hostap"
### CONFIGURATION FOR PACKET FILTER
pf_enable="YES"                 # Set to YES to enable packet filter (pf)
pf_rules="/etc/pf.conf"         # rules definition file for pf
pf_program="/sbin/pfctl"        # where the pfctl program lives
pf_flags=""                     # additional flags for pfctl
pflog_enable="YES"              # Set to YES to enable packet filter logging
pflog_logfile="/var/log/pflog"  # where pflogd should store the logfile
### DAEMONS FOR LAN
hostapd_enable="YES"            # wireless services (clients use wpa_supplicant)
named_enable="YES"              # dns for clients
dhcpd_enable="YES"              # dhcp configure clients
sshd_enable="YES"               # so we can remotely access this box

Добавим загрузку модулей в /boot/loader.conf:

wlan_wep_load="YES"
wlan_tkip_load="YES"
wlan_ccmp_load="YES"
wlan_xauth_load="YES"
wlan_acl_load="YES"

Запуск демонов и проверка

Самый простой способ: перезагрузить машину:

shutdown -r now

Или запустить службы вручную:

/etc/rc.d/pflog start
/etc/rc.d/named start
/etc/rc.d/dhcpd start
/etc/rc.d/hostapd start

Проверка: подключитесь беспроводным клиентом к YOURSSID и убедитесь, что он получает IP из диапазона 192.168.1.100–199 и имеет доступ во внешнюю сеть.

Отладка и частые проблемы

  • Клиенты не получают IP: проверьте, что dhcpd работает и слушает нужный интерфейс; проверьте /var/log/messages и логи dhcpd.
  • Нет NAT/интернета у клиентов: убедитесь, что sysctl net.inet.ip.forwarding=1 и что pf загружен с корректным правилом nat on $ext_if.
  • hostapd не запускается: проверьте права /var/run/hostapd, корректность ctrl_interface и поддерживается ли драйвер bsd для вашего WLAN‑адаптера.
  • Интерфейс ath0 не поднимается в hostap режиме: проверьте, загружены ли модули if_ath и ath_hal, и что ваша карточка поддерживает hostap.

Совет по логам: используйте tcpdump для мониторинга трафика на интерфейсах и pflog для анализа сработавших правил pf.

Когда этот подход не подходит

  • Если у вас проприетарная WLAN‑карта без поддержки hostap в FreeBSD — придётся использовать другой драйвер или внешний точечный роутер.
  • Для сложных сценариев корпоративной Wi‑Fi с 802.1X/EAP лучше применять специализированное решение (RADIUS, контроллер AP).
  • Если на вашей сети уже есть сложная маршрутизация, VPN или фрагментированное addressing, простая NAT‑настройка pf может оказаться недостаточной.

Альтернативные подходы

  • Использовать ipfw или ipfilter вместо pf — синтаксис и возможности отличаются, но тоже подходят для NAT/фильтрации.
  • Заменить hostapd на аппаратный роутер/точку доступа и использовать FreeBSD только как шлюз.
  • Для малых домашних сетей проще использовать готовые маршрутизаторы с OpenWrt/LEDE.

Руководство — чек-листы по ролям

Администратор установки:

  • Проверил наличие пакетов hostapd, named, isc‑dhcpd
  • Получил/синхронизировал исходники ядра
  • Перекомпилировал и загрузил кастомное ядро с PF

Сетевой инженер:

  • Настроил ifconfig для ext_if, lan_if, wifi_if
  • Настроил pf.conf с nat и базовой политикой
  • Проверил маршрутизацию (sysctl net.inet.ip.forwarding)

Безопасность и эксплуатация:

  • Настроил WPA2/PSK с надежной passphrase
  • Ограничил исходящие порты при необходимости
  • Настроил логирование pflogd и ротацию логов

Безопасность и hardening

  • Всегда используйте WPA2 (или современную защиту, если поддерживается) с длинной фразой‑ключом.
  • Отключите ненужные сервисы (ftp, telnet и т.п.).
  • Закройте входящие на внешнем интерфейсе все порты, кроме необходимых.
  • Включите регулярное обновление системы и мониторинг уязвимостей для драйверов WLAN.
  • По возможности используйте RADIUS для аутентификации корпоративных клиентов.

Критерии приёмки

  • Точка доступа поднята, клиент получает IP из диапазона 192.168.1.100–199.
  • Клиент пингуется с шлюза и имеет доступ в Интернет.
  • pf запущен и в логах нет ошибок при загрузке конфигурации.
  • При перезагрузке все сервисы стартуют автоматически через rc.conf/loader.conf.

Короткая методология развертывания (5 шагов)

  1. Проверить пакеты и исходники, собрать ядро с pf.
  2. Назначить интерфейсы и загрузить модули WLAN.
  3. Настроить pf.conf с NAT и базовой фильтрацией.
  4. Настроить isc‑dhcpd и hostapd (WPA).
  5. Обеспечить автозапуск и протестировать клиентов.

Небольшой справочник команд (факт‑бокс)

  • Получить IP от upstream: dhclient fxp0
  • Выдать IP локально: ifconfig fxp1 inet 192.168.0.1 netmask 255.255.255.0
  • Включить форвардинг: sysctl -w net.inet.ip.forwarding=1
  • Загрузить pf конфиг: pfctl -Fa -f /etc/pf.conf
  • Загрузить модули: kldload if_ath
  • Запустить службы вручную: /etc/rc.d/hostapd start

Краткий глоссарий

  • AP — точка доступа, устройство, предоставляющее WLAN.
  • NAT — трансляция сетевых адресов для выхода локальных клиентов в Интернет.
  • WPA/WPA2 — протоколы защиты Wi‑Fi сетей.

Советы по миграции и совместимости

  • При переходе с Linux/OpenWrt на FreeBSD проверьте поддержку драйверов вашей WLAN карты в FreeBSD.
  • Настройки pf не полностью совместимы с iptables; при миграции потребуется переписать правила.
  • Для стабильности на старом железе тестируйте режим hostap в лабораторных условиях.

Короткое объявление (100–200 слов)

FreeBSD теперь можно использовать как полноценную беспроводную точку доступа: этот гид описывает практическую настройку hostapd, pf и isc‑dhcpd для организации WLAN и проводного LAN с NAT. Вы узнаете, как подготовить систему, перекомпилировать ядро для pf, загрузить драйверы WLAN, настроить DHCP и hostapd с WPA‑защитой, а также как обеспечить автозапуск служб. Приведены примеры конфигураций, чек‑листы по ролям, рекомендации по безопасности и список типичных ошибок с методами их устранения. Гид подходит для домашних и небольших офисных сетей; для крупных корпоративных решений рассмотрите централизованные контроллеры и RADIUS.

Завершение

Поздравляем — после выполнения всех шагов у вас должна быть рабочая беспроводная точка доступа на базе FreeBSD. В случае проблем возвращайтесь к разделу отладки, проверяйте логи и по возможности тестируйте изменения на изолированной машине перед применением в продакшне.

Важно: регулярно обновляйте систему и следите за безопасностью Wi‑Fi.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро