WiFi-Hotspot für den Wohnwagen

In unseren Wohnwagen will ich einen WiFi-Hotspot einbauen. Dieser soll ein WiFi-Netz (SSID: 52.404N13.038E, Koordinaten von Park Sanssouci) aufspannen, in das wir uns während unserer Ausflüge einbuchen können, und wahlweise ein WiFi-Netz vom Campingplatz oder einen USB-Hotspot von einem unserer Telefone als Upstream benutzen.

Gesteuert werden soll er über eine Dancer2-App im Browser.

Planung

Geräte

Unser Wohnwagen

  • Raspberry Pi mit SD-Karte und Netzteil (wird im Wohnwagen befestigt)
  • 2 USB-Dongles (einer spannt das Netz auf, der optionale zweite ist Empfänger für das Campingplatz-Netz), vielleicht mit Antennen, die man passend platzieren kann
  • evtl. USB-Hub mit eigener Stromversorgung für die Antennen

Software

  • Accesspoint
  • Bonding-Tools
  • DHCP-Server (ISC)
  • Nameserver (ISC)
  • Proxy-Server (squid3)
  • squidGuard
  • iptables
  • Perl
  • Dancer2
  • gearman/ZeroMQ für Workers
  • nginx (oder apache2)

App

Mit der Steuerungs-App sollen folgende Aufgaben erfüllt werden können:

  • Anpassung Hotspot-SSID
  • Festlegung Hotspot-WiFi-Schlüssel
  • Eingabe SSID und WiFi-Credentials Upstream-Netzwerk auf dem Campingplatz
  • Hotspot: Kanal einstellen(?)
  • Anzeige verfügbarer Upstreams(?)
  • Umschaltung Routing Upstream
  • Anzeige verbundener MAC-Adressen
  • MAC-Freigabe für DHCP-Server
  • DNS-Einträge für bekannte Hosts anlegen/ändern
  • Hotspot neu starten/ausschalten

Umsetzung

Geräte

  • ✔ Raspberry Pi
  • USB-Dongles
    1. ✔ Ralink Technology, Corp. RT5370 Wireless Adapter (kann AP-Modus, hat aber scheinbar Probleme mit Abbrüchen)
    2. ✘ ???

Pinning

Es muss geklärt werden, wie die USB-Dongels immer entweder in der Bonding-Gruppe registriert oder als Hotspot betrieben werden (MAC-Adressen? USB-IDs?).

Software

Paketierte Software, die bei jessie schon dabei ist:

apt-get -V install hostapd ifenslave isc-dhcp-server bind9 squid3 squidguard libdancer2-perl nginx
Netzwerkgeräte

NetworkManager läuft auf dem Raspi nicht, so dass die Geräte in /etc/network/interfaces definiert werden. Zu beachten hier ist, dass das Bonding-Interface mittels DHCP zu konfigurieren ist, das das WLAN aufspannende AP-Gerät aber eine feste IP-Adresse als Gateway bekommen soll.

Für den Hotspot habe ich mir das Device hotspot0 ausgedacht. Da das gerade mein Ralink-Dongle macht, habe ich folgende Datei angelegt:

/etc/udev/rules.d/70-persistent-net.rules

## WiFi-Dongle LogiLink
# USB device 0x148f:0x5370 (usb)
# mit USB-ID
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="7c:dd:90:17:a1:c6", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="hotspot0"

Von hier war die Info:

$ lsusb 
Bus 001 Device 005: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter

Dieses Gerät soll ein- und ausgesteckt werden können. Und es soll Gateway meines aufgespannten LAN sein:

/etc/network/interfaces

# Accesspoint
# s. /etc/udev/rules.d/70-persistent-net.rules
allow-hotplug hotspot0
iface hotspot0 inet static
    address 172.25.3.254
    netmask 255.255.252.0

Das ist nun bootfest, und auch das Aus- und Wiedereinstecken funktionieren.

WiFi ist irgendwie länderabhängig. Ist man nicht in Deutschland, muss man eventuell den wpa_supplicant passend konfigurieren (und später natürlich wieder zurück).

Accesspoint

Den Accesspoint setze ich mit hostapd um. Das AP-Gerät ist hotspot0.

interface=hotspot0
logger_syslog=-1
logger_syslog_level=3
logger_stdout=-1
logger_stdout_level=1
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
ssid=52.404N13.038E
country_code=DE
hw_mode=g
channel=1
beacon_int=100
dtim_period=2
max_num_sta=255
rts_threshold=2347
fragm_threshold=2346
macaddr_acl=0
auth_algs=3
ignore_broadcast_ssid=0
wmm_enabled=1
wmm_ac_bk_cwmin=4
wmm_ac_bk_cwmax=10
wmm_ac_bk_aifs=7
wmm_ac_bk_txop_limit=0
wmm_ac_bk_acm=0
wmm_ac_be_aifs=3
wmm_ac_be_cwmin=4
wmm_ac_be_cwmax=10
wmm_ac_be_txop_limit=0
wmm_ac_be_acm=0
wmm_ac_vi_aifs=2
wmm_ac_vi_cwmin=3
wmm_ac_vi_cwmax=4
wmm_ac_vi_txop_limit=94
wmm_ac_vi_acm=0
wmm_ac_vo_aifs=2
wmm_ac_vo_cwmin=2
wmm_ac_vo_cwmax=3
wmm_ac_vo_txop_limit=47
wmm_ac_vo_acm=0
eapol_key_index_workaround=0
eap_server=0
own_ip_addr=127.0.0.1
wpa=2
wpa_passphrase=HIER DIE PASSPHRASE
wpa_key_mgmt=WPA-PSK

Das meiste habe ich aus der Demo-Konfiguration. Geändert habe ich interface, ssid, country_code, wpa, wpa_passphrase und wpa_key_mgmt.

Bonding

Es sollen das eingebaute Ethernet-Gerät, ein WiFi-Gerät (Client) und ein mittels USB angeschlossenes Gerät so verbunden werden, dass immer eines von ihnen in der hier angegebenen Reihenfolge aktiviert wird und die Upstream-Verbindung herstellt. Auf Campingplätzen werden wir regelmäßig sicher nicht mit einer Ethernet-Verbindung ausgestattet sein, WiFi ist aber oft dabei. Und in Deutschland kann einer von uns sein Handy anklemmen und WiFi über USB einrichten.

Dazu sollen 3 Geräte logisch gebunden werden: eth0, wlan0(?) und usb0.

DHCP

Zu Hause läuft ein DHCP-Server, und vom Campingplatz oder vom mobilen Hotspot bekommt das Gerät ebenfalls dynamisch eine IP-Adresse.

Netze

Der Hotspot spannt zwei Netze für authentifizierte Clients auf:

  • bekannte Hosts: 172.25.0.0/22
  • unbekannte Hosts ("Schmutznetz"): 192.168.0.0/24

Bekannte Hosts bekommen eine IP-Adresse, eine Route und Zugang zum Internet, unbekannte Hosts bleiben im "Schmutznetz" eingesperrt und bekommen eine IP-Adresse und eine Route, die gedroppt wird.

DHCP-Server

Alle bekannten, statisch konfigurierten Hosts bekommen eine IP-Adresse und eine Standard-Route... Alle unbekannten, unkonfigurierten Hosts bekommen eine IP-Adresse und eine Standard-Route...

Nameserver

Firewall/Routing

Requests von außen ans Bonding-Interface sind zu DROPpen.

Über das Bonding-Interface geht die Standard-Route, ein entsprechendes Forwarding muss eingerichtet werden.

Zu erlauben am AP sind folgende Dienste:

  • DHCP
  • ntp
  • avahi
  • DNS
  • Proxy
  • ssh
  • HTTPS

Ansonsten ist erst einmal das Forwarding allen Traffics aus dem inneren WLAN nach außen zu blockieren.

Proxy

Wie zu Hause möchte ich den Upstream-Traffic minimieren und filtern (Werbung ausblenden).

Meine Tags:
 
Beliebte Tags:
  Perl RaspberryPi
Powered by Catalyst