The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Как использовать FreeBSD в качестве Wireless Access Point (wireless wifi freebsd router)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: wireless, wifi, freebsd, router,  (найти похожие документы)
From: Сгибнев Михаил <msgibnev(ого-го какая собака)gmail.com> Date: Mon, 15 Jan 2010 17:02:14 +0000 (UTC) Subject: Как использовать FreeBSD в качестве Wireless Access Point Оригинал: http://dreamcatcher.ru/bsd/007_freebsd_ap.html Первоисточник: How To Set Up A FreeBSD Wireless Access Point В этом документе описывается, как настроить 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

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Ваш комментарий
Имя:         
E-Mail:      
Заголовок:
Текст:





  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor