Документация по ОС FreeBSD Суббота, 08.02.2025, 14:17
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Net

Как использовать FreeBSD в качестве Wireless Access Point [2009]
В этом документе описывается, как настроить FreeBSD в качестве точки доступа беспроводной сети. Данная статья ни в коем случае не заменяет собой FreeBSD Handbook, а лишь дополняет его.

 Для достижения желаемого результата, нам необходимо убедиться в выполнении следующих условий:
  • Установлены hostapd и named (BIND)
  • Ядро скомпилировано с поддержкой pf (так же возможно использование ipfw/ipfilter)
  • Сконфигурирован NAT и правила пакетной фильтрации
  • Установлен isc-dhcp3-server
  • Вышеуказанные демоны сконфигурированы и запущены
 Аппаратное обеспечение:
  • Одна сетевая карта подключается к провайдеру. Это наш внешний интерфейс, обозначаемый ext_if. В данном примере fxp0 и может отличаться от сетевой карты, имеющейся у вас.
  • Беспроводная карта построена на чипсете Atheros и используется для предоставления беспроводного доступа третьим устройствам. В данном примере ath0 и может отличаться от сетевой карты, имеющейся у вас.
  • Дополнительная сетевая карта, которая подключена к локальной сети (int_if)
 Тестовая конфигурация доступна по этому адресу.

 Начало

 Хорошей идеей будет подключить нашу машину к Интернет. Как это сделать, вы можете прочитать в разделе Network Communication FreeBSD Handbook. 
 Для простоты, все действия выполняются с правами пользователя root, хотя это моветон.

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

 Хотя BIND идет в поставке FreeBSD, неполохо было бы убедиться в его наличии:

which named

 Если вы вдруг получили сообщение named not found, установим его:
 
sudo pkg_add -r bind9
 
Проверяем наличие hostapd

 Наличие hostapd можно проверить командой:

which hostapd
 
 hostapd идет в соcтаве FreeBSD. Если он вдруг не обнаружен, то, возможно, у вас установлен минимальный набор сетов и вам придется с помощью программы установки добавить сеты или обновить систему из исходных текстов.

Проверяем наличие исходных текстов ядра

 Посмотрите наличие каталога исходных текстов с помощью команды:
 
ls -l /usr/src/sys
 Если вы получили сообщение No such file or directory, то обратитесь к главе Synchronizing Your Source FreeBSD Handbook.

Перекомпилируем ядро

 Процесс компиляции ядра с поддержкой pf очень хорошо описан в FreeBSD Handbook. Приведем выжимки из этого документа.

 Перейдем в каталог файлов конфигурации ядра и создадим новую конфигурацию, базируясь на файле GENERIC:
    
    cd /usr/src/sys/`uname -m`/conf
    cp GENERIC CUSTOM
    
 Вы можете отредактировать файл конфигурации по своему усмотрению. Некоторые данные поопциям ядра можно обнаружить в файле /usr/src/sys/conf/NOTES. Нам же требуется просто добавить поддержку PF:
    
    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 - получает адрес по DHCP
  • fxp1 - lan_if - статический IP, 192.168.0.1; сеть 192.168.0.0/24; клиенты получают адреса по DHCP
  • ath0 - wifi_if - статический IP, 192.168.1.1; беспроводная сеть диапазона 192.168.1.0/24; клиенты получают адреса по DHCP
Конфигурируем интерфейсы

 Поднимаем внутренний и внешние интерфейсы:
    
    dhclient fxp0
    ifconfig fxp1 inet 192.168.0.1 netmask 255.255.255.0
    
 Убедимся в том, что драйвера беспроводного адаптера загружены. Для карт на базе Atheros, выполните команду:
    
    for d in {if_ath,ath_rate,ath_hal}; do kldload $d; done
    
 Для всех карт, включая Atheros, необходимо убедиться в том, что загружены вспомогательные модули :
    
    for d in {wlan_wep_load,wlan_tkip_load,wlan_ccmp_load,wlan_xauth_load,wlan_acl_load}; do kldload $d; done
    
 Конфигурируем адрес на интерфейсе:
    
    ifconfig ath0 inet 192.168.1.1 netmask 255.255.255.0 ssid YOURSSID mediaopt hostap
    
Конфигурируем NAT и правила пакетной фильтрации

 Разрешим маршрутизацию пакетов и поднимем pf:
    
    sysctl -w net.inet.ip.forwarding=1
    pfctl -e
    
 Создадим файл 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
    
 Загружаем созданную конфигурацию командой:
    
    pfctl -Fa -f /etc/pf.conf
    
Устанавливаем и конфигурируем сервер ISC DHCP  Для раздачи клиентам адресов, нам необходим 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;
    }
    
Конфигурируем hostapd  Редактируем /etc/hostapd.conf :
    
    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
    
Вносим изменения в rc.conf:  Чтобы настройки сетевых интерфейсов не пришлось вбивать заново после перезагрузки, внесем их в /etc/rc.conf:
    
    ### 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
    ### requires kernel recompile, see:
    ### http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls-pf.html
    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"
    
Демоны!

 Демоны будут стартовать после перезагрузки. Если ребутиться вам неохота, то:
    
    /etc/rc.d/pflog start
    /etc/rc.d/named start
    /etc/rc.d/dhcpd start
    /etc/rc.d/hostapd start
    
Ссылки по теме:
How To Set up a Wi-Fi Hotspot
Wireless HotSpot HowTo


Источник: http://dreamcatcher.ru/bsd/007_freebsd_ap.html
Категория: Net | Добавил: oleg (06.03.2009) | Автор: Сгибнев Михаил
Просмотров: 762 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2025