Sinds afgelopen maandag ben ik de gelukkige eigenaar van een iPhone 3GS 32GB, maar zoals zo vaak met nieuwe gadgets, was ook hier wel weer wat aan de hand. De wireless verbinding op iphone viel na een paar seconden uit en dan duurde het weer even voordat er een verbinding tot stand werd gebracht die het weer een paar seconden volhield, niet echt waar ik op zat te wachten uiteraard.

Het AP wat ik gebruik is gebaseerd op een Wrap embedded bordje van www.pcengines.ch, die ik met de TinyBSD scripts heb voorzien van FreeBSD. Dat gaf mij gelukkig dus wel de mogelijkheid om fatsoenlijk te onderzoeken wat er nu precies mis ging. De logging liet mij het volgende zien

hostapd: ath0: STA xx:xx:xx:xx:xx:xx WPA: EAPOL-Key timeout
hostapd: ath0: STA xx:xx:xx:xx:xx:xx IEEE 802.1X: unauthorizing port
hostapd: ath0: STA xx:xx:xx:xx:xx:xx IEEE 802.11: deauthenticated due to local deauth request
hostapd: ath0: STA xx:xx:xx:xx:xx:xx IEEE 802.11: deassociated

Na wat Googlen kwam ik er achter dat een upgrade naar een nieuwere FreeBSD en dus ook allerlei recentere wifi gerelateerde code mijn probleem zeer waarschijnlijk zou oplossen. Het was al een hele tijd geleden dat ik voor het laatst een compact flash image had gemaakt, dus ik moest eerst een nieuwe build omgeving inrichten, dat heb ik gedaan door FreeBSD 8.0 te installeren in een verse virtuele (vmware) machine. Deze is na de installatie van de release CD meteen geupgrade naar 8.0 STABLE.

Helaas is de huidige TinyBSD configuratie niet meer compatible met 8.0, er worden onder andere kernel configuratie bestanden van FreeBSD 7.* meegeleverd. Ik vermoed de de meerderheid van de gebruikers inmiddels NanoBSD gebruiken ipv TinyBSD, toch jammer want er zit heel wat code van mijzelf in (de port build constructie is onder andere van mijn hand). Voor mijn wrap doosje heb ik een custom kernel config gemaakt op basis van FreeBSD 8.0 en tevens de tinybsd.basefiles geupdate aan de nieuwe situatie.

Het meeste spannende was trouwens de nieuwe Wifi configuratie in FreeBSD 8.0, die nu ook Virtual AP's (VAP) ondersteund. Maar goed, dat is na wat lees- en uitzoekwerk ook weer gelukt. In de /etc/rc.conf staat nu (o.a.) het volgende:

cloned_interfaces="bridge0"
ifconfig_ath0="up"
ifconfig_sis0="up"
wlans_ath0="wlan0"
create_args_wlan0="wlanmode hostap"
ifconfig_wlan0="inet 10.10.10.10 netmask 255.255.0.0 ssid myssid channel 3 mode 11g"
ifconfig_bridge0="addm wlan0 addm sis0 up"
hostapd_enable="YES"

/etc/hostapd.conf bevat het volgende

interface=wlan0
driver=bsd
logger_syslog=-1
logger_syslog_level=0
logger_stdout=-1
logger_stdout_level=0
debug=4
dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd
ctrl_interface_group=wheel
ssid=myssid
wpa=2
wpa_passphrase=mysecret
wpa_key_mgmt=WPA-PSK

De meeste opties zullen voor zichzelf spreken, echter 2 wil ik hier nog wel uitleggen.

wpa

Hiermee geef je aan welke vorm van WPA je wilt ondersteunen op jouw AP. 1 is WPA(1), 2 is WPA2 en 3 is zowel WPA als WPA2.

wpa_key_mgmt

Hierbij heb je de opties WPA-PSK en WPA-EAP of beide. PSK staat voor pre-shared key en EAP voor Extensible Authentication Protocol. De eerste is voor thuisgebruik en houdt in dat de wireless client en de access point een wachtwoord delen en de tweede voor 'enterprise' gebruik waarbij de authenticatie plaats vindt door middel van radius.

Ik heb nu weer een vers (bridging) access point en zoals gehoopt en verwacht heeft mijn iPhone nu inderdaad geen problemen meer.