RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Попала в руки сетевая Planet WL-3560, решил сделать дома безпроводную точку доступа. Собственно готовой документации не нашёл, собирал по крупинкам в интернете - попытаюсь изложить
Имеем: 1) Freebsd свежепроинсталенная (настраивалось на 6.2, думаю на ветке 6 и 7 будет работать) 2) Карточку PCI Planet чип Atheros- распозналась как ath 3) Канал в мир (наш IP 192.168.100.3, шлюз провайдера 192.168.100.1, днс провайдера 192.168.100.1)
Цель: настроить точку доступа на FreeBSD для выхода беспроводных устройств в мир
1.Настройка карты Вставив карточку в PCI-слот она не обнаружилась - это нормально (ядро у меня "пожмаканое" - стараюсь оставлять только то что надо), ведь нам надо собрать ядро для поддержки данных устройств (можно конечно модулями, но это не "тру"),соответственно создаём конфиг для нового ядра, в обязательном порядке включаем опции bpf (для DHCP сервера) Не забудьте включить в конфиг вашу сетевую!!!!
#cd /usr/src/sys/i386/conf/
#cat WIFI
machine i386
cpu I686_CPU
ident WIFI
options SCHED_4BSD # 4BSD scheduler
options PREEMPTION # Enable kernel thread preemption
options INET # InterNETworking
options FFS # Berkeley Fast Filesystem
options SOFTUPDATES # Enable FFS soft updates support
options UFS_ACL # Support for access control lists
options UFS_DIRHASH # Improve performance on big directories
options NFSCLIENT # Network Filesystem Client
options PROCFS # Process filesystem (requires PSEUDOFS)
options PSEUDOFS # Pseudo-filesystem framework
options GEOM_GPT # GUID Partition Tables.
options COMPAT_43 # Compatible with BSD 4.3 [KEEP THIS!]
options COMPAT_FREEBSD4 # Compatible with FreeBSD4
options COMPAT_FREEBSD5 # Compatible with FreeBSD5
options SYSVSHM # SYSV-style shared memory
options SYSVMSG # SYSV-style message queues
options SYSVSEM # SYSV-style semaphores
options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
device apic # I/O APIC
device acpi
# Bus support.
device pci
# ATA and ATAPI devices
device ata
device atadisk # ATA disk drives
device atapicd # ATAPI CDROM drives
options ATA_STATIC_ID # Static device numbering
# atkbdc0 controls both the keyboard and the PS/2 mouse
device atkbdc # AT keyboard controller
device atkbd # AT keyboard
device vga # VGA video card driver
# syscons is the default console driver, resembling an SCO console
device sc
device agp # support several AGP chipsets
# Add suspend/resume support for the i8254.
device pmtimer
# Serial (COM) ports
device sio # 8250, 16[45]50 based serial ports
# Parallel port
device ppc
device ppbus # Parallel port bus (required)
# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device miibus # MII bus support
device rl # RealTek 8129/8139
device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
device dc
device lnc
# Pseudo devices.
device loop # Network loopback
device random # Entropy device
device ether # Ethernet support
device ppp # Kernel PPP
device tun # Packet tunnel.
device pty # Pseudo-ttys (telnet etc)
device gif # IPv6 and IPv4 tunneling
# The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that 'bpf' is required for DHCP.
#Включаем Фаерволы
device bpf # Berkeley packet filter
options HZ=1000
options TCP_DROP_SYNFIN
options SC_DISABLE_REBOOT
device pf
device pflog
options ALTQ
options ALTQ_CBQ
options ALTQ_RED
options ALTQ_RIO
options ALTQ_HFSC
options ALTQ_PRIQ
options DEVICE_POLLING
options IPFIREWALL # включаем поддержку ipfw
options IPFIREWALL_DEFAULT_TO_ACCEPT # политика по умолчанию - ACCEPT
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPDIVERT
options DUMMYNET #enable dummynet operation
options NETGRAPH
options NETGRAPH_BPF
options NETGRAPH_IFACE
options NETGRAPH_KSOCKET
options NETGRAPH_MPPC_ENCRYPTION
options NETGRAPH_PPP
options NETGRAPH_PPTPGRE
options NETGRAPH_SOCKET
options NETGRAPH_TCPMSS
# именно тут мы включаем поддержку вайфайного железа и способов шифрования
device wlan
device wlan_acl
device wlan_ccmp
device wlan_wep
device ath
device ath_hal
device ath_rate_sample
device wlan_tkip
device wlan_xauth
Сразу сделаю оговорку, у меня в ядро включен фаер и IPFW и PF. Зачем их два, спросите Вы. Всё просто: PF для ната, а IPFW для шейпера и фильтрации. Хотя будет работать и отдельно каждый из них. Так у меня исторически сложилось.... Компилируем и устанавливаем наше ядро
# config WIFI
Kernel build directory is ../compile/WIFI
Don't forget to do ``make cleandepend; make depend''
#cd ../compile/WIFI
#make depend
#make && make install
Процесс не быстрый - идём пить чай После того как ядро установилось, перегружаемся уже с новым ядром
#uname -a
FreeBSD home.lan 6.2-RELEASE FreeBSD 6.2-RELEASE #0: Sun Nov 16 15:53:25 UTC 2008
mak_v_@home.lan:/usr/src/sys/i386/compile/WIFI i386
Из листинга ifconfig видим что карточка определилась как ath0 Далее есть несколько путей: 1) точка доступа без шифрования и ключей (публичная сеть) 2) точка доступа с авторизацией и шифрованием
Если делаем простую точку доступа без шифрования - достаточно добавить в rc.conf
Если точка с шифрованием и авторизацией, то читаем этот пункт до конца Есть несколько способов организации аутентификации и шифрования, я рассмотрю лишь частичный пример, если хотите покопать поглубже - хандбука в помошь....
Создадим файл hostapd.conf, в нём будут настройки нашей точки доступа ( wifi карты )
#cat /etc/hostapd.conf
interface=ath0 #интерфейс на котором работает
driver=bsd
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
debug=4
dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd
ctrl_interface_group=wheel
ssid=FREE ##имя точки доступа
wpa=3 #параметры шифрования
wpa_pairwise=CCMP
wpa_passphrase=12345678 #ключ сети который вы будете вводить при подключении
#парился долго с кол-вом символов
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
В rc.conf добавляем строки c с настройками сетевых карт (xl0 - смотрит на провайдера, ath0 - наша wifi-карточка) и автозапуском настроек точки доступа. Безпроводные клиенты будут жить в сети 172.16.16.0/24 (можете произвольно указать).
в опциях сборки я выбрал только DHCP_PARANOIA, DHCP_JAIL, OPENSSL_BASE, OPENSSL_PORT в /etc/rc.conf добавляем следующие строки
dhcpd_enable="YES"
dhcpd_flags="-q" # отключаем вывод копирайта и прочего при старте dhcpd
dhcpd_ifaces="ath0" # сетевой интерфейс на котором будет работать dhcpd
Создадим конфигурационный файл для DHCP сервера:
#cat /usr/local/etc/dhcpd.conf
default-lease-time 600; # время аренды по умолчанию
max-lease-time 7200; # максимальное время аренды
authoritative; # единственный DHCP сервер в сети
ddns-update-style interim; # динамический стиль обновления DNS
log-facility local7; #
subnet 172.16.16.0 netmask 255.255.255.0 { # подсеть в которой будем выдавать адреса
range 172.16.16.2172.16.16.100; # интервалы ip адресов на выдачу клиентам
option routers 172.16.16.1; # адрес маршрутизатора в Интернет - IP wifi-карты
option domain-name-servers 192.168.100.1; # адрес DNS сервера провайдера
}
#для хостов которым требуются постоянные ip адреса создаем следующие записи
host Mynotebook { # имя хоста
hardware ethernet 00:c0:9f:1e:64:92; # MAC адрес сетевой карты хоста
fixed-address 172.16.16.3; # ip адрес для этого хоста
}
host Sheff {
hardware ethernet 00:a0:cc:c9:5c:7d;
fixed-address 172.16.16.4;
}
#Остальные клиенты будут получать свободные адреса из указанных диапазонов.
Теперь у нас есть настроенная точка доступа, при подключении к которой дхцп сервер будет выдавать настройки клиентам
3.НАТ осталось "выпустить" трафик в мир Идем править фаервол на предмет NAT Я использую для ната PF, если вы используете IPFW либо что-то другое (IPF,IPNAT,etc...) внесите в конфигурацию соответствующее правило для NATа на внешнем интерфейсе трафика от вайфайной сети
#cat /etc/pf.conf
nat on xl0 from 172.16.16.0/24 to any -> 192.168.100.3
pass quick all
Последнее, добавляем в rc.conf (маршрутизировать пакеты, включить PF, указываем путь к файлу фаервола)