воскресенье, 1 ноября 2009 г.

Настройка точки доступа WIFI на OpenBSD

Есть рабочий шлюз на OpenBSD, понадобилось подключаться к нему по WIFI. Был в наличии PCI-адаптер TPLink на базе Atheros AR5212. Не лучший выбор для OpenBSD, однако системой определился:
ath0 at pci0 dev 15 function 0 "Atheros AR5212" rev 0x01: irq 4
ath0: AR2414 7.9 phy 4.5 rf2413 5.6, FCC2A*, address aa:bb:cc:dd:ee:ff
Смотрим поддерживаемые режимы работы данного адаптера в секции supported media:
ifconfig ath0 media
Почему то отсутствуют режимы IEEE 802.11g, но меня вполне устраивает:
media autoselect mode 11b mediaopt hostap
Значит можно попробовать настроить эту карту в режиме "точка доступа". Создадим файл /etc/hostname.ath0 следующего содержания:
up media autoselect description "WLAN" mediaopt hostap nwid "network" wpa wpaprotos wpa2 wpapsk `wpa-psk network mysupersecurekey`
inet 192.168.111.1 255.255.255.0
Запустим этот интерфейс и переведем его в режим отладки:
sh /etc/netstart ath0
ifconfig ath0 debug
Попробуем попинговать, посмотреть вывод dmesg и если не зависнем и никаких тревожных сообщений не увидим значит можно продолжить дальше. Что касательно этой карты, то в версиях OpenBSD младше 4.6 в режиме "точка доступа" ее лучше не использовать.
Настроим dhcpd (/etc/dhcpd.conf) на выдачу адресов подключающимся клиентам, например так:
option domain-name-servers 192.168.111.1;

subnet 192.168.111.0 netmask 255.255.255.0 {
option routers 192.168.111.1;
option ntp-servers 192.168.111.1;

range 192.168.111.32 192.168.111.127;

}
Подразумеваем что на этом же сервере запущен кэширующий DNS и сервер времени NTP. В файле /etc/dhcpd.interfaces перечислим интерфейсы, на которых будет слушать dhcpd, например только ath0, а также включим загрузку сервиса dhcpd при старте системы (dhcpd_flags="" в /etc/rc.conf.local или /etc/rc.conf).
В пакетном фильтре PF для интерфейса ath0 применим политику "все что не разрешено то запрещено", разрешим DHCP, NTP и NAT(ограничимся http и jabber) на одном интерфейсе, а также заблокируем доступ в некоторые сети подключенные к другим сетевым интерфейсам. Сделать это можно, например, следующим набором правил, который не стоит считать достаточным:
nat on $some_if from ($wifi_if:network) -> ($some_if:0)
block in on
$wifi_if
block in quick on $wifi_if to ($other_if:network)
pass in quick on $wifi_if inet proto udp from ($wifi_if:network) to $wifi_if port { domain, ntp } keep state
pass in quick on $wifi_if inet proto udp from 255.255.255.255 port bootpc to $wifi_if port bootps keep state
pass in quick on $wifi_if inet proto icmp from ($wifi_if:network) icmp-type $icmp_types keep state
pass in quick on $wifi_if inet proto tcp from ($wifi_if:network) to !$wifi_if port { www, https, 5223, 5222 } modulate state
Уточним, что dns-серверу разрешено обрабатывать запросы из подсети wifi и запустим dhcpd.
Теперь можно пробовать подключаться. Подключение с Asus EEE PC 901 с wifi-картой Ralink и ОС Ubuntu Netbook Remix 9.10 прошло успешно. С коммуникатора HTC Diamond подключение прошло, адрес получен, однако дальше проблемы, tcpdump на сервере показал только обмен arp-запросами, однако времени разбираться нет за ненадобностью, главное что с ноутбуков подключается.