Nachdem ich ewig gebraucht habe herauszufinden wie ich meinen Gateway dazu bringe multible SSIDs über eine Karte aufzuspannen, will ich meine (erfolgreiche) Konfiguration mit Euch teilen.
Wie immer ist der erste Anlaufpunkt das FreeBSD Handbook. Unter findet man zunächst grundlegende Hilfe. Wir werden aber im Verlauf sehen, dass es hier an einer Stelle extrem an Dokumentation fehlt….
Eines vorweg: Erspart Euch Stress, und seht zu, dass Ihr einen vernünftigen Adapter habt. Ja, Intel ist war super wenn es um Ethernet-Adapter geht, im Wireless Bereich, baut lieber auf einen Atheros ( ath(4) ) Chipsatz. Die sind bei weitem am besten unterstützt…
Hintergrund
Nun, ich will neben meinem bestehenden WLAN auch noch ein Gäste Netz aufspannen. Und was mit meiner beschissenen Fritz!Box geht, muss doch auch mit meinem FreeBSD Gateway gehen…
Ausgangslage
- Als Betriebssystem läuft bei mir FreeBSD 10.4-RELEASE
- Und als Karte habe ich verbaut eine Qualcomm Atheros AR9565
ath0: RX status length: 48
ath0: RX buffer size: 4096
ath0: TX descriptor length: 128
ath0: TX status length: 36
ath0: TX buffers per descriptor: 4
ath0: ath_edma_setup_rxfifo: type=0, FIFO depth = 16 entries
ath0: ath_edma_setup_rxfifo: type=1, FIFO depth = 128 entries
ath0: [HT] enabling HT modes
ath0: [HT] enabling short-GI in 20MHz mode
ath0: [HT] 1 stream STBC receive enabled
ath0: [HT] 1 RX streams; 1 TX streams
ath0: AR9565 mac 704.1 RF5110 phy 1638.6
ath0: 2GHz radio: 0x0000; 5GHz radio: 0x0000
Wichtig ist, dass der Adapter zum einen HOSTAP „sprechen“ kann, und zum anderen auch mehrere davon aufspannen kann. Ich hatte hier eine recht neue Intel Karte. Die konnte zwar ersteres, aber nur eben nur einen… Klar: Einen passenden Verschlüsselung-Algorithmus sollte sie auch noch unterstützen. Wir überprüfen das mal eben:
# ifconfig wlan0 list caps
drivercaps=4f85ed01<STA,IBSS,HOSTAP,AHDEMO,TXPMGT,SHSLOT,SHPREAMBLE,MONITOR,MBSS,WPA1,WPA2,BURST,WME,WDS,TXFRAG>
cryptocaps=1f<WEP,TKIP,AES,AES_CCM,TKIPMIC>
htcaps=7016e<CHWIDTH40,SHORTGI20,SHORTGI40
Das schaut also schon nicht schlecht aus….
Achso: Fast vergessen. Natürlich sollte der Support für die Karte da sein… Ich baue eigentlich immer nen custom kernel…
Kernel etc.
Im GENERIC Kernel sind die meisten Adapter eh drin. Bei mir sieht es so aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # Wireless NIC cards device wlan # 802.11 support options IEEE80211_DEBUG # enable debug msgs options IEEE80211_AMPDU_AGE # age frames in AMPDU reorder q's options IEEE80211_SUPPORT_MESH # enable 802.11s draft support device wlan_wep # 802.11 WEP support device wlan_ccmp # 802.11 CCMP support device wlan_tkip # 802.11 TKIP support # Atheros device ath # Atheros NICs device ath_pci # Atheros pci/cardbus glue device ath_hal # pci/cardbus chip support options AH_SUPPORT_AR5416 # enable AR5416 tx/rx descriptors options AH_AR5416_INTERRUPT_MITIGATION # AR5416 interrupt mitigation options ATH_ENABLE_11N # Enable 802.11n support for AR5416 and later device ath_rate_sample # SampleRate tx rate control for ath |
In Wirklichkeit hab ich natürlich noch einige Optionen für PF und VPN drin. Das aber an anderer Stelle….
Die Config
Nun kommen wir aber endlich zum interessanten Part. Wir wollen nun also zwei wlan(4) devices die jeweils mit hostapd(8) ihre Netzte aufspannen. Und hier kommen wir zu den zwei Problemen. Zum einen brauchen wir zwei unterschiedliche BSSIDs (eigentlich die MAC Adresse des Adapters) und zum anderen müssen wir hostapd(8) zwei Mal starten (irgendwie). Die Lösung ist eigentlich recht einfach. Wir schreiben folgendes in unsere /etc/rc.conf:
1 2 3 4 5 | wlans_ath0="wlan0 wlan1" create_args_wlan0="wlanmode hostap bssid" create_args_wlan1="wlanmode hostap bssid" ifconfig_wlan0="inet 192.168.0.1/24 up HOSTAP" ifconfig_wlan1="inet 192.168.1.1/24 up HOSTAP" |
Die zwei wichtigen Dinge sind das „bssid“ als create args. Das sorgt dafür, dass die zwei wlan(4) devices eigene bssids bekommen. Und das „HOSTAP“ in den ifconfig Zeilen startet jetzt für jedes Interface einen eignen hostapd(8) Prozess.
ACHTUNG: Dies ist alles was wir brauchen… Ja: Kein hostapd_enable=“YES“ setzten…
Und nun noch ein letzter undokumentierter Hinweis. hostapd(8) sucht nun nicht nach einem file /etc/hostapd.conf, sondern nach zwei Dateien die /etc/hostapd-wlan0.conf und /etc/hostapd-wlan1.conf heißen. Die schauen etwa so aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # /etc/hostapd-wlan0.conf ssid=FreeBSD Accesspoint wpa_passphrase=Was ein schoenes Passwort! channel=6 interface=wlan0 hw_mode=g wmm_enabled=1 auth_algs=3 wpa=2 wpa_key_mgmt=WPA-PSK wpa_pairwise=CCMP rsn_pairwise=CCMP beacon_int=1000 dtim_period=2 max_num_sta=255 rts_threshold=2347 fragm_threshold=2346 logger_syslog=-1 logger_syslog_level=2 ctrl_interface=/var/run/hostapd ctrl_interface_group=0 |
und:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # /etc/hostapd-wlan1.conf ssid=FreeBSD Gaestezugang wpa_passphrase=Noch ein schoenes Passwort! channel=6 interface=wlan1 hw_mode=g wmm_enabled=1 auth_algs=3 wpa=2 wpa_key_mgmt=WPA-PSK wpa_pairwise=CCMP rsn_pairwise=CCMP beacon_int=1000 dtim_period=2 max_num_sta=255 rts_threshold=2347 fragm_threshold=2346 logger_syslog=-1 logger_syslog_level=2 ctrl_interface=/var/run/hostapd ctrl_interface_group=0 |
Das war’s. Mit:service netif restart
starten wir mal eben alles noch, et voilà…. Es läuft…
Ich lasse jetzt mal eben aus, das die Kiste so natürlich nichts routet und die Clients keine IP Adressen bekommen. Das steht auf einem anderen Blatt Papier und wird evtl. ein weiterer Artikel…