[fli4l] Gäste-WLAN mit einem VAP - so läuft es bei mir
Stefan Puschek
stefan.puschek at t-online.de
Mi Mai 11 15:48:04 CEST 2016
Hallo NG,
wie bereits angedroht, hier meine Vorgehensweise.
in der c't 10/2016 S.98 wird ein interessanter Ansatz für ein
Gäste-WLAN beschrieben. Dort wird zwar ein Raspberry pi als AP benutzt,
aber das müsste doch auch mit unserem fli4l gehen...
Für Leute die keine c't haben:
ein Raspi hängt im LAN hinter dem Router und stellt ein Gäste-WLAN
bereit. Dabei ändert er täglich den Gäste-PSK und zeigt diesen auf einem
angeschlossenen LCD an. Somit haben Gäste immer nur kurze Zeit (hier 24
Stunden) Zugriff aufs Gäste-WLAN - und wer nicht in die Wohnung kommt,
kann auch den täglich erneuerten Gäste-PSK nicht vom Display ablesen.
Somit bleibt mein eigener und geheimer PSK bestehen und wird nicht
täglich geändert.
Benötigt wird dazu eine WLAN-Karte die VAP (virtual-Access-Point)
unterstützt - laut Doku im wlan-Paket sind das momentan die Treiber
ath_pci, ath5k, ath9k, ath9k_htc
Benutzte Pakete aus 3.10.6:
advanced_networking
easycron
usercmd
wlan
Benutzte Einstellungen - die IP-Adressen müssen ggf. angepasst werden:
IP_NET_1 = internes Netz für _meine_ Geräte
IP_NET_2 = internes Netz für das Gäste-WLAN
aus Sicherheitsgründen sollten die Gäste keine Geräte aus _meinem_ Netz
sehen, also Paketfilter anpassen!!!
eth0 = daran hängen _meine_ LAN-clients
wlan0 = das wlan-device für _mein_ WLAN
wlan0v2 = das neue virtuelle device für das Gäste-WLAN
br0 = eine Bridge aus eth0 und wlan0 für _meine_ Rechner
br1 = eine Bridge die _nur_ aus wlan0v2 besteht für das Gäste-WLAN
Damit wir dem Gäste-WLAN im laufenden Betrieb einen neuen PSK verpassen
können, muss das gesamte wlan gestoppt und neu gestartet werden - dabei
nutzt wlan0v2 dann den neuen Gäste-PSK. Damit das problemlos
funktioniert, benötigen wir eine spezielle Konfiguration; die beiden
wlan-devices _müssen_ jeweils in einer eigenen Bridge stecken _und_ sie
dürfen _nicht_ im advanced_networking-Paket in die Bridge gesteckt
worden sein, sondern im wlan-Paket.
Wenn man nicht so wie hier beschrieben die Bridges benutzt, geht die
Route fürs wlan0v2 verloren und das Gäste-WLAN funktioniert danach nicht
- daher die spezielle Konfiguration...
(vielen Dank an Carsten Spieß und Peter Schiefer in der NG)
Das klingt auf den ersten Blick kompliziert, ist aber eigentlich recht
simpel.
In advanced_networking.txt:
OPT_BRIDGE_DEV='yes'
BRIDGE_DEV_N='2' # denn wir brauchen 2 Bridges
BRIDGE_DEV_1_NAME='bridge0'
BRIDGE_DEV_1_DEVNAME='br0'
BRIDGE_DEV_1_DEV_N='1' # wir stecken _hier_ nur _ein_ device hinein
BRIDGE_DEV_1_DEV_1_DEV='eth0'
# das device wlan0 wird später im wlan-Paket hinzugefügt
BRIDGE_DEV_2_NAME='bridge1'
BRIDGE_DEV_2_DEVNAME='br1'
BRIDGE_DEV_2_DEV_N='0' # wir stecken _hier_ _gar_ _kein_ device hinein
(ja, das geht!)
# das device wlan0v2 wird später im wlan-Paket hinzugefügt
In base.txt:
IP_NET_N='2' # wir wollen 2 getrennte Netze
IP_NET_1='192.168.6.1/24' # _mein_ LAN / WLAN
IP_NET_1_DEV='br0' # die Bridge an der _mein_ LAN / WLAN hängt
IP_NET_2='192.168.7.1/24' # das Gäste-WLAN
IP_NET_2_DEV='br1' # die Bridge an der das Gäste-WLAN hängt
der Paketfilter muss angepasst werden, damit _beide_ Netze ins Internet
kommen, aber sich gegenseitig nicht sehen
In dns_dhcp.txt:
DHCP_RANGE_N='2' # meine _und_ die Gäste-Maschinen brauchen dhcp
DHCP_RANGE_1_NET='IP_NET_1' # für _meine_ dhcp-clients
DHCP_RANGE_1_START='192.168.6.200' # start-IP
DHCP_RANGE_1_END='192.168.6.250' # end-IP
# ...
DHCP_RANGE_2_NET='IP_NET_2' # für die dhcp-Gäste
DHCP_RANGE_2_START='192.168.7.200' # start-IP
DHCP_RANGE_2_END='192.168.7.250' # end-IP
In wlan.txt
WLAN_N='2' # wir müssen 2 Karten mit _identischen_ Angaben definieren
damit VAP klappt
# nur ESSID und der PSK unterscheiden sich bei den Karten
WLAN_1_MAC='01:23:45:67:89:0a' # hier die _echte_ MAC-Adresse der
WLAN-Karte eintragen
WLAN_1_ESSID='mein-wlan' # ESSID - network name
WLAN_1_MODE='master' # die Karte wird ein AP
WLAN_1_CHANNEL='12g' # WLAN-Kanal den wir benutzen wollen
WLAN_1_RATE='auto' # WLAN bitrate
WLAN_1_ENC_N='0' # wir brauchen kein WEP (unsicher)
WLAN_1_WPA_KEY_MGMT='WPA-PSK' # wir nutzen WPA-PSK
WLAN_1_WPA_PSK='asdfghjk' # mein eigener ganz geheimer dauerhafter PSK
WLAN_1_WPA_TYPE='2' # WPA type 1 or 2 - or 3 for both
WLAN_1_WPA_ENCRYPTION='TKIP CCMP' # TKIP and/or CCMP encryption
WLAN_1_ACL_POLICY='open' # MAC-ACLs sind witzlos
WLAN_1_ACL_MAC_N='0' #
WLAN_1_WPS='no' # ich nutze kein WPS
WLAN_1_BRIDGE='br0' # hängt wlan0 an br0 <-ganz wichtig !!!
#
WLAN_2_MAC='01:23:45:67:89:0a' # wie oben
WLAN_2_ESSID='gaeste-wlan' # ESSID - network name
WLAN_2_MODE='master' # wie oben
WLAN_2_CHANNEL='12g' # wie oben
WLAN_2_ENC_N='0' # wie oben
WLAN_2_WPA_KEY_MGMT='WPA-PSK' # wie oben
WLAN_2_WPA_PSK='qwertzui' # erster dummy PSK für das Gäste-WLAN
WLAN_2_WPA_TYPE='2' # wie oben
WLAN_2_WPA_ENCRYPTION='TKIP CCMP' # wie oben
WLAN_2_ACL_POLICY='open' # wie oben
WLAN_2_ACL_MAC_N='0' # wie oben
WLAN_2_WPS='no' # wie oben
WLAN_2_BRIDGE='br1' # hängt wlan0v2 an br1 <-ganz wichtig !!!
Mit dieser config aktualisieren wir jetzt einmal den Router und starten
ihn neu.
Danch zur Kontrolle ob das bisher geklappt hat:
stan 3.10.6 # ip route <enter>
default via x.x.x.x dev ppp0
127.0.0.0/8 dev lo scope link
192.168.6.0/24 dev br0 proto kernel scope link src 192.168.6.1
192.168.7.0/24 dev br1 proto kernel scope link src 192.168.7.1
x.x.x.x dev ppp0 proto kernel scope link src x.x.x.x
stan 3.10.6 #
Die Adressen x.x.x.x sind unkenntlich gemacht - 192.168.6.0/24 bzw.
192.168.7.0/24 sollten Euren Netzen IP_NET_1 bzw. IP_NET_2 entsprechen.
Wir haben jetzt bereits 2 funktionierende getrennte WLANs mit den
jeweils in der wlan.txt stehenden PSKs.
Wir brauchen nun die virtuelle MAC-Adresse von wlan0v2 - diese ist
leicht anders als die im wlan-Paket eingetragene Adresse.
stan 3.10.6 # ip link <enter>
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode
DEFAULT group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
...
10: wlan0v2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master
br1 state UP mode DEFAULT group default qlen 1000
link/ether 06:80:48:7b:33:2f brd ff:ff:ff:ff:ff:ff
stan 3.10.6 #
Die gesuchte virtuelle MAC-Adresse von wlan0v2 ist also hier
06:80:48:7b:33:2f - wir brauchen sie gleich.
Damit der Router bei jedem Neustart einen neuen Gäste-PSK generiert
nutze ich folgende Einstellung in usercmd.txt
OPT_USERCMD='yes'
USERCMD_BOOT_N='5' # wir brauchen 5 Zeilen
USERCMD_BOOT_1='WLANPSK=$(dd if=/dev/urandom count=1|tr -d -c "A-Z"|cut
-b1-16)'
USERCMD_BOOT_2='sed -ie "s/qwertzui/${WLANPSK}/"
/var/run/wlan_06:80:48:7B:33:2F.conf'
USERCMD_BOOT_3='wlanconfig.sh wlan0 down'
USERCMD_BOOT_4='wlanconfig.sh wlan0 up'
USERCMD_BOOT_5='echo $WLANPSK>/etc/lcd_text1.txt'
Zeile 1 befüllt die Variable $WLANPSK mit 16 zufälligen Großbuchstaben
In Zeile 2 wird der dummy-Gäste-PSK (aus wlan.txt) durch $WLANPSK
ersetzt; sed sucht nach dem dummy-Gäste-PSK und ersetzt ihn - also muss
hier natürlich genau der in wlan.txt vergebene dummy-Gäste-PSK angegeben
werden!!!
Der gesuchte PSK steht in der Datei /var/run/wlan_<virtuelle MAC-Adresse
von oben>.conf
Bei mir ist das die Datei /var/run/wlan_06:80:48:7B:33:2F.conf - bitte
also Eure virtuelle MAC-Adresse benutzen
Zeile 3 und 4 stoppen und starten das wlan neu - damit wird jetzt der
neue Gäste-PSK benutzt.
Zeile 5 schreibt den neuen Gäste-PSK in eine Datei, aus der das
lcd-Paket ihn ausliest und aufs Display schreibt. Das lcd-Paket muss
natürlich entsprechend konfiguriert werden.
Wenn man jetzt noch easycon konfiguriert, startet der Router zukünftig
um 06:00 Uhr neu und generiert dann nach dem booten einen neuen Gäste-PSK
OPT_EASYCRON='yes'
EASYCRON_MAIL='no' # brauche ich nicht
EASYCRON_N='1'
EASYCRON_1_CUSTOM=''
EASYCRON_1_COMMAND='/sbin/reboot' # bitte rebooten
EASYCRON_1_TIME='0 6 * * *' # täglich um 06:00 Uhr
Bitte nicht vergessen den Router zu aktualisieren und dann ein Neustart.
Nun sollte der Gäste-PSK im LCD erscheinen.
Theoretisch muss man den Router nicht täglich rebooten lassen - nur muss
man dann anders nach dem bisherigen Gäste-PSK suchen... wer will, kann
das ändern
Viel Spass damit
Groetjes
Stefan
Mehr Informationen über die Mailingliste Fli4L