WLAN-Repeater für Reisen – Update 10.04.2023

Ausgangssituation

Der mAP lite bietet sich wegen seiner Größe als perfekter Reiserouter/Repeater an.

Gerade in Hotelzimmern ist die WLAN-Abdeckung (in der Regel) nur am Zimmereingang gut, da sich die Access Points am Flur befinden.
Abhilfe schafft hier ein kleiner WLAN-Repeater, der zum einen WLAN-Client im Hotel-WLAN ist und zum anderen sein eigenes WLAN-Netz abstrahlt.

Ein klassischer Repeater halbiert zwar den Datendurchsatz, aber es geht hier um die Funkausleuchtung und nicht um den höchsten Durchsatz – der in Hotels sowieso oft fragwürdig ist.

klassische WLAN-Ausleuchtung in Hotels (orange)

Hotelflur mit Access-Point an der Decke – der Empfang ist nur am Zimmereingang gut

mit WLAN-Repeater
WLAN-Ausleuchtung mit Repeater (rot)

Folgendes muss konfiguriert werden:

  • WLAN-Client im Hotel-WLAN
  • WLAN-Access-Point für den Management-Zugriff
  • WLAN-Access-Point für die Repeating-Funktion

Der mAP lite besitzt ein 2,4GHz-WLAN-Interface – das Master-Interface – auf diesem können mehrere Slave (Virtual) Intefaces angelegt werden.

 

WICHTIG: Die WLAN-Client-Funktion (Station-Pseudobridge) muss zwingend auf dem Masterinterface angelegt werden!!
Würde sie auf einem Slave angelegt werden, würde sie sich nicht verbinden!

 

Nun kommt folgende Einschränkung zum Tragen. Kommt man im Hotel an, ist das Masterinterface (WLAN-Client / Station-Pseudobridge) normalerweise nicht richtig konfiguriert. Das kann auch kaum vorab gemacht werden (welche ESSID, welche Verschlüsselung, welchen Key… sollte man eintragen?).

Über den Management-Zugriff muss dies einmalig gemacht werden. Allerdings arbeiten Salveinterfaces nicht, wenn das Masterinterface nicht läuft! Hier entsteht ein klassisches Henne-Ei-Problem: Das Management-Netz wird ohne richtig konfigurierten Master nicht aktiv, welcher nur über den Management-Zugriff konfiguriert werden könnte.

Man könnte nun mit einem zweiten mAP oder einem kurzen LAN-Kabel und einem USB-LAN-Adapter fürs Handy arbeiten. Aber das ist alles nicht wirklich schön.

 

Die Lösung ist einfach:

Man hinterlegt auf dem Masterinterface keine feste SSID. Stattdessen legt man eine Connection-List an. Diese werden sequenziell von oben nach unten abgearbeitet. Als erstes legt man hier den mobilen HotSpot seines Handys an. Aktiviert man diesen, verbindet sich der mAP immer mit dem eignen Handy. Über diese Verbindung kann nun der zweite Eintrag der Connection-List bearbeitet werden (das Hotel-WLAN). Schaltet man den Handy-HotSpot ab, verbindet sich der mAP automatisch mit dem Hotel-WLAN. Es bietet sich an sowohl mit Connection-Lists als auch mit Security-Lists zu arbeiten.

WLAN1 (Master) – das Masterinterface (Client im Hotelnetz)

 

WLAN2 (Slave) – WLAN-Repeater
/interface wireless
set [ find default-name=wlan1 ] band=2ghz-b/g/n disabled=no frequency=auto \
mode=station-pseudobridge ssid=""
add disabled=no keepalive-frames=disabled mac-address=4A:8F:5A:XX:XX:XX \
master-interface=wlan1 multicast-buffering=disabled name=wlan2 \
security-profile=Server1 ssid="mein Repeater" wds-cost-range=0 \
wds-default-cost=0 wps-mode=disabled

 

Connection-List:

/interface wireless connect-list
add interface=wlan1 security-profile=HotSpot1 ssid=AndroidAPXYZ123 \
wireless-protocol=802.11
add interface=wlan1 security-profile=Client1 ssid=HOTEL-WLAN \
wireless-protocol=802.11

Security-List:

/interface wireless security-profiles
set [ find default=yes ] supplicant-identity=MikroTik
add authentication-types=wpa2-psk mode=dynamic-keys name=Client1 \
supplicant-identity=""
add authentication-types=wpa2-psk mode=dynamic-keys name=HotSpot1 \
supplicant-identity=""
add authentication-types=wpa2-psk mode=dynamic-keys name=Server1 \
supplicant-identity=""

Als letztes legt man eine Bridge an und fügt WLAN1 und WLAN2 als Ports hinzu. Damit vereint man die beiden Layer2-Segemente:

/interface bridge
add name=BR0 protocol-mode=none
/interface bridge port
add bridge=BR0 interface=wlan1
add bridge=BR0 interface=wlan2

 

WICHTIG: WLAN-Netze die versteckt sind, werden über die Connection-List nicht gefunden!

 

Testlauf

Mobilen HotSpot am Handy aktivieren:

 

 

Der mAP verbindet sich als Client mit dem Handy-HotSpot (erste Position der Connection-List):

 

Nun kann man via Handy den mAP konfigurieren und die Einstellungen des Hotel-WLANs anpassen:

 

 

Hat man die Konfiguration abgeschlossen, beendet man den Handy-HotSpot.
Damit durchsucht der mAP wieder seine Connection-List und findet (an zweiter Position in der Connection-List) das Hotel-WLAN und verbindet sich:

 

Nun wird auch das Salve-Interface aktiv und sendet seinerseits das eigentliche Repating-Netz aus mit dem man sich verbinden kann:

 

Aus Sicht des Hotels taucht der WLAN-Client ganz normal auf:

Client aus Sicht des Hotel-DHCPs

Sicherheit – Update vom 10.04.2023
Um den Zugriff auf den Repeater einzuschränken, können folgende Schritte unternommen werden:
  1. Zugriff über LAN-Interface immer erlauben
  2. Zugriff vom nur von der IP des Mobilen-Hotspots zur DHCP-Client-IP (des Repeaters) erlauben

 

Vorarbeit

DHCP-Client für ETH1 erstellen:

/ip dhcp-client
add interface=ether1

DHCP-Client für BR0-Interface mit Script erstellen, welches die bezogene IP und die Gateway-IP in zwei Address-Listen schreibt:

/ip dhcp-client
add interface=BR0 script="*"

*:

# Verzögerung von 10 Sekunden
{:delay 10};

# BR0 DHCP-Client IP-Adresse (ohne Netzmaske) und Gateway in Address-Listen eintragen

# Variablen
:local interfaceName "BR0"
:local dhcpIPListName "DHCP-IP"
:local gtwyIPListName "GTWY-IP"

# DHCP-Client ID ermitteln
:local dhcpClientID [ip dhcp-client find interface=$interfaceName]

# IP-Adresse des DHCP-Clients ermitteln (ohne Netzmaske)
:local fullIpAddress [ip dhcp-client get $dhcpClientID address]
:local ipAddress [:pick $fullIpAddress 0 ([:find $fullIpAddress "/"])]

# IP-Adresse zur Address-Liste DHCP-IP hinzufügen
/ip firewall address-list add list=$dhcpIPListName address=$ipAddress comment="BR0 DHCP-Client IP-Adresse" dynamic=yes

# Gateway des DHCP-Client-Interfaces ermitteln
:local gatewayIP [ip dhcp-client get $dhcpClientID gateway]

# Gateway-IP zur Address-Liste GTWY-IP hinzufügen
/ip firewall address-list add list=$gtwyIPListName address=$gatewayIP comment="BR0 DHCP-Client Gateway-IP" dynamic=yes

# Erfolgsmeldungen
:log info ("BR0 DHCP-Client IP-Adresse ($ipAddress) ohne Netzmaske zur Address-Liste ($dhcpIPListName) hinzugefügt.")
:log info ("Gateway-IP ($gatewayIP) des DHCP-Client-Interface BR0 zur Address-Liste ($gtwyIPListName) hinzugefügt.")

 

1. Zugriff über LAN-Interface immer erlauben

/interface list
add name=MGMT

/interface list member
add interface=ether1 list=MGMT

 

2. Zugriff nur von der IP des Mobilen-Hotspots (Handy/Tablet…) zur DHCP-Client-IP (des Repeaters) erlauben

Firewall-Regelwerk:

/ip firewall filter
add action=accept chain=input connection-state=established,related,untracked
add action=accept chain=input in-interface-list=MGMT
add action=accept chain=input dst-address-list=DHCP-IP in-interface=BR0 \
src-address-list=GTWY-IP
add action=drop chain=input

 

Erweiterte Sicherheit:

Die bezogene IP des mobilen Hotspots nach 30 Minunten verwerfen (DHCP-Client auf dem Interface BR0 disablen) und die betreffenden Address-Listen löschen.

/system scheduler

add name=enable-IP on-event=enable-BR0-IP policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \
start-time=startup

add name=disable-IP on-event=disable-BR0-IP policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \
start-time=startup

 


 

enable-BR0-IP:

/system script
add dont-require-permissions=no name=enable-BR0-IP owner=marc policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="**"

**:

# Nach 10 Sekunden DHCP-Client enablen
{:delay 10};

/ip dhcp-client enable [find interface="BR0"]

 


 

disable-BR0-IP

/system script
add dont-require-permissions=no name=disable-BR0-IP owner=marc policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="***"

***:

# Nach 30 Minunten DHCP-Client disablen
{:delay 1800};

/ip dhcp-client disable [find interface="BR0"]

# Nach 10 Sekunden Address-Listen löschen
{:delay 10};

# Address-Listen DHCP-IP und GTWY-IP löschen

# Variablen
:local dhcpIPListName "DHCP-IP"
:local gtwyIPListName "GTWY-IP"

# Einträge in der Address-Liste DHCP-IP löschen
:foreach entry in=[/ip firewall address-list find list=$dhcpIPListName] do={
/ip firewall address-list remove $entry
}

# Erfolgsmeldung für gelöschte DHCP-IP Address-Liste
:log info ("Alle Einträge in der Address-Liste ($dhcpIPListName) wurden gelöscht.")

# Einträge in der Address-Liste GTWY-IP löschen
:foreach entry in=[/ip firewall address-list find list=$gtwyIPListName] do={
/ip firewall address-list remove $entry
}

# Erfolgsmeldung für gelöschte GTWY-IP Address-Liste
:log info ("Alle Einträge in der Address-Liste ($gtwyIPListName) wurden gelöscht.")

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert