четверг, 26 марта 2009 г.

AP (Master) mode на RT61 + hostapd. Полноценная точка доступа из обычной PCI WiFi сетевушки.

Наконец я приступаю к сборки точки доступа. На сайте http://hostap.epitest.fi/hostapd/ заявлено, какие драйвера для каких чипов будут работать в режиме AP.
В частности будут работать все чипы Atheros с дровами madwifi, ну и я теперь знаю точно, заведётся мой Dlink DWL-510 с чипом RaLink RT2561/RT61. Инструкция от разработчиков драйвера вот http://rt2x00.serialmonkey.com/wiki/index.php/AP-mode_Howto
Со стандартными дровами старый hostapd заводиться не захотел:)
На будущем сервере стоял свежеустановленный Debian lenny 5.0 с ядром 2.6.26, но пакет дров compat-wireless-old.tar.bz2 собираться не захотел. Поэтому я решил поставить ядро 2.6.28 из sid и попробывать собрать compat-wireless для ядер больше 2.6.27 compat-wireless-2.6.tar.bz2
Но здесь появилась маленькая проблема для сборки compat-wireless нужны linux-hearers, которые в свою очередь зависят от пакета linux-kbuild-2.6.28, которого ещё нет.
На форуме linuxforum.ru некто KernelPanic разместил само собранный пакет
linux-kbuild-2.6.28
которым я и воспользовался.

А теперь всё по порядку

1)Установка ядра 2.6.28
Добавим в фаил /etc/apt/source.list строчки
deb http://mirror.yandex.ru/debian/ sid main contrib
deb-src http://mirror.yandex.ru/debian/ sid main contrib


#aptitude update
#aptitude install linux-image-2.6.26-1-686 linux-source-2.6.28


3)Установка linux-headers-2.6.28-1-686
Качаем исходники linux-kbuild-2.6.28
Распаковываем любым архиватором в папку, в ней распаковываем пакет с исходным текстом командой
# dpkg-source -x linux-kbuild-2.6_2.6.28-0.1.dsc

Вызываем следущую команду, чтобы собрать бинарный пакет:
#cd linux-kbuild-2.6-2.6.28
#aptitude install fakeroot
#dpkg-buildpackage -rfakeroot -us -uc

Ставим
#dpkg -i linux-kbuild-2.6.28_2.6.28-0.1_i386.deb

Теперь linux-headers-2.6.28-1-686 встанит нормально
#aptitude install linux-headers-2.6.28-1-686

4)Компилим compat-wireless-2.6.tar.bz2
Заходим в net/mac80211/cfg.c
Меняем строчки:
case NL80211_IFTYPE_AP:
case NL80211_IFTYPE_AP_VLAN:
case NL80211_IFTYPE_WDS:
return true;

На
case NL80211_IFTYPE_AP:
return true;
case NL80211_IFTYPE_AP_VLAN:
return true;
case NL80211_IFTYPE_WDS:
return true;


Потом
make && make install


5)Компилим и ставим libnl
./configure --prefix=/usr/lib
make && make install
6) Долгожданный hostapd
#cd hostap/hostapd
#cp defconfig .config

Коментируем строчку
CONFIG_DRIVER_HOSTAP=y


Раскомментируем следующие строчки:
CONFIG_DRIVER_NL80211=y
LIBNL=/usr/src/libnl
CFLAGS += -I$(LIBNL)/include
LIBS += -L$(LIBNL)/lib


Вместо /usr/src/libnl нужно указать путь, куда вы распаковали исходники libnl
Компилим и ставим:)
make && make install
Компилиться может достаточно долго, так что придёться подождать:)
7)Усё, теперь приведу мои настройки /etc/hostapd/hostapd.conf

##### hostapd configuration file ##############################################

interface=wlan0

driver=nl80211

logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2

debug=0

dump_file=/tmp/hostapd.dump

ctrl_interface=/var/run/hostapd

ctrl_interface_group=0

ssid=MyWiFi

hw_mode=g

channel=11

beacon_int=100

dtim_period=2

max_num_sta=255

rts_threshold=2347

fragm_threshold=2346

macaddr_acl=1

accept_mac_file=/etc/hostapd/accept

wpa=2

wpa_passphrase=pass12345

wpa_pairwise=CCMP


8)Решил прикрутить фильтрацию по mac адресу, для этого и указано macaddr_acl=1 и accept_mac_file=/etc/hostapd/accept
Содержание файла /etc/hostapd/accept
00:00:00:00:00:01
00:15:fa:45:6b:cc
00:05:a3:e4:f2:19

Разрешённые маки.

9)Прикрутил dhcp

Для этого указываем в настройках интерфейса ip из того-же диапазона что и будем раздавать
/etc/network/interfaves
auto wlan0
iface wlan0 inet static
address 192.168.225.1
netmask 255.255.255.248
network 192.168.225.0
gateway 192.168.225.1

/etc/default/dhcp3-server указываем
INTERFACES="wlan0"

/etc/dhcp3/dhcpd.conf
ddns-update-style none;

option domain-name "225.example.org";
option domain-name-servers 85.118.224.121;

default-lease-time 600;
max-lease-time 864001;

log-facility local7;

subnet 192.168.225.0 netmask 255.255.255.248 {
range 192.168.225.2 192.168.225.5;
option domain-name-servers 85.118.224.121;
option domain-name "225.example.org";
option routers 192.168.225.1;
option broadcast-address 192.168.225.7;
}


10) Теперь точно усё, делаем скрипт и добовляем его в автозагрузку любым способом
ap.sh
/etc/init.d/dhcp3-server start
/usr/local/bin/hostapd /etc/hostapd/hostapd.conf &