Technik

IP Adresse eines ToughSwitch via CLI ändern

Ich habe letzte Woche einen ToughSwitch eingebaut.. Etwas naiv war ich der Meinung, er würde sich eine DHCP IP ziehen – nö. Also musste ich die IP an das vorhandene Subnetz anpassen.

Dazu habe ich auf einer Linux-Maschine vor Ort ein zweites Interface eröffnet:

iface eth0:1 inet static
address 192.168.1.252
netmask 255.255.255.0

Nun konnte ich via SSH auf den Switch zugreifen:

ssh ubnt@192.168.1.20

Anschließend kann man in der Datei ‚/tmp/system.cfg‘ die IP sowie das Gateway anpassen:

Danach einmal die Konfiguration speichern, damit sie nach dem Reboot noch vorhanden ist:

save

Nun kann man entweder Neustarten oder einfach die neue Konfiguration laden – das geht etwas schneller:

 /usr/etc/rc.d/rc.softrestart save

Unifi RADIUS Authentifizierung mit VLAN Zuordnung

­In der aktuellen Beta des Unifi Controllers (v5.5.5+) ist das erste Mal ein Radius Server enthalten, sodass man kein Drittsystem benötigt. Dieser läuft dann auf der USG und ist z.B. für die WLAN Authentifizierung verfügbar.

Zugegeben, meistens hat man einen Windows Server mit NAP und AD Anbindung, aber eben nicht immer. In meinem Fall möchte ich guten Bekannten einen persistenten Internetzugang geben (also keinen Gäste-Voucher) aber diese dennoch nicht in meinem Netzwerk haben. Hier steht, wie es geht:

Vorarbeiten – VLAN Anlegen

Damit man WLAN Clients in verschiedene VLANs zuordnen kann, müssen natürlich VLANs existieren. Dazu in den Settings unter Networks ein neues Netzwerk anlegen und VLAN ID, IP Range sowie DHCP Scope angeben – fertig! Jetzt noch nach belieben Firewallregeln festlegen.

Aktivierung des RADIUS Servers

Zunächst in die Settings und dort den neuen Menüpunkt Services auswählen und dort im Bereich RADIUS die Servereinstellungen wählen. Dort Enable RADIUS Server auf ON setzen – fertig.

Danach im RADIUS Profil (Profiles -> Default) das drahtlose VLAN Tagging aktivieren:

Zuletzt noch dem WLAN Profil das RADIUS Profil zuweisen:

User anlegen

Jetzt können User angelegt werden. Gibt man kein VLAN an, wird auch keines gesetzt und der User landet im Default / untagged VLAN:


Möchte man hingegen ein VLAN mitgeben, muss die ID eingetragen und die Optionen 13 sowie 6 gesetzt werden:


Wenn man sich nun verbindet und mit dem  „friend1“ anmeldet bekommt man eine IP aus dem VLAN341:

Aus der Serie…

Site-to-Site VPN: Unifi USG <-> Ubitquiti Edge Router

Wie ich in meinem letzten Artikel schon erwähnt habe, werkelt bei meinen Eltern ein EdgeRouter. Aktuell hatte ich für das StS VPN immer einen Debian Server mit OpenVPN als VM laufen – mit dem USG sollte sich das ändern. Also habe ich mich heute mal an die Konfiguration gemacht.

Mein erster Gedanke war: Ab in den Unifi Controller und flux das Remote-Netzwerk anlegen… leider falsch Gedacht. Dort geht das zwar theoretisch, aber eigentlich nur mit IPSec VPN. Die Besonderheit an meinem VPN ist, dass nur eine Site eine IPv4 Adresse hat, daher auch immer von der anderen Site initiiert werden muss.
Trotzdem kann man es aber auf dem USG einrichten, wie erfahrt ihr hier:

Vorbereitungen

Als erstes braucht ihr natürlich die Konfiguration auf der Edge-Router Seite. Das ist realtiv einfach und auch gut von Ubiquiti beschrieben. Also per SSH auf den EdgeRouter verbinden, den Shared Key erstellen und das OpenVPN Interface anlegen:

generate vpn openvpn-key /config/auth/secret

set interfaces openvpn vtun1
set interfaces openvpn vtun1 mode site-to-site
set interfaces openvpn vtun1 local-port 1195
set interfaces openvpn vtun1 remote-port 1195
set interfaces openvpn vtun1 local-address 10.99.99.3
set interfaces openvpn vtun1 remote-address 10.99.99.4
set interfaces openvpn vtun1 shared-secret-key-file /config/auth/secret
set interfaces openvpn vtun1 openvpn-option "--comp-lzo"
set interfaces openvpn vtun1 openvpn-option "--float"
set interfaces openvpn vtun1 openvpn-option "--ping 10"
set interfaces openvpn vtun1 openvpn-option "--ping-restart 20"
set interfaces openvpn vtun1 openvpn-option "--ping-timer-rem"
set interfaces openvpn vtun1 openvpn-option "--persist-tun"
set interfaces openvpn vtun1 openvpn-option "--persist-key"
set interfaces openvpn vtun1 openvpn-option "--user nobody"
set interfaces openvpn vtun1 openvpn-option "--group nogroup"
set protocols static interface-route 192.168.15.0/24 next-hop-interface vtun1
Wichtig ist, dass ihr euch die Datei /config/auth/secret bzw. den Inhalt kopiert.
Anschließend speichern und abmelden
commit
save
exit
Als nächstes müssen wir auf dem Unifi Controller manuelle Konfigurationen des USG erlauben. Dazu per SCP z.B. verbinden und die Datei config.gateway.json in der Site Configuration (/var/lib/unifi/sites/<SiteName>/) anlegen
Der Inhalt der Datei legt fest, wo die OpenVPN Konfiguration für das Interface vtun0 liegt:
{
	"interfaces": {
                "openvpn": {
                        "vtun0": {
                                "config-file": "/config/ovpn/site1-udp-1195.ovpn"
                        }
                }
	}
}

Konfiguration des USG

Nun können wir uns dem USG zuwenden – hier via SSH oder SCP die OpenVPN Config anlegen


# Remote server to connect to. Can be domain name or IP address.
remote site1.mydyn.domain.de

# Protocol and Port - Must be the same on both server and client.
proto udp
port 1195

ifconfig 10.99.99.4 10.99.99.3
secret /config/auth/secret
route 192.168.17.0 255.255.255.0

# Use a persistent key and tunnel interface.
persist-tun
persist-key

# keeping a connection through a NAT router/firewall alive, andfollow the DNS name of the server if it changes its IP address.
#keepalive 10 60
ping-timer-rem
float
ping 10

# Compresssion
comp-lzo

Wichtig ist, dass ihr anschließend das Secret von oben nach /config/auth/secret kopiert.

Das war’s! Nun muss das USG neu provisioniert oder neugestartet werden. Hierzu könnt ihr z.B. eine Portweiterleitung anlegen. Anschließend wird der Tunnel aufgebaut.

Falls es nicht funktioniert, werden die Fehler im Syslog protokolliert:


tail -f /var/log/messages

Aus der Serie…

Netzwerkupgrade: Ubiquiti USG und APs

Ich habe aktuell eine Fritz!Box. Leider. Diese Box ist ja echt ein Wunderwerk der Technik, kann alles, macht alles. Aber sie ist bei mir auch ultra langsam. Das WLAN ist nicht der Knaller und mein OpenVPN für zwei Site-to-Site Tunnel ich muss extra auf einer VM laufen lassen. Also würde es mal Zeit für ein Upgrade: ein Ubiquiti Security Gateway und zwei UAP-AC-PRO AccessPoints sind es geworden. Erst hatte ich überlegt einen Edge Router zu nehmen (habe ich schon bei meinen Eltern im Einsatz), aber die USGs werden nach und nach immer besser… also mal die (meiner damaligen Meinung nach) einfache USG – Variante genommen.

Die Konfiguration über die Unifi Software ist easy – über eine Oberfläche kann man das USG, die APs sowie eventuelle Switche konfigurieren. Übergreifende Konfigurationen wie VLANs sind auf allen Geräten verfügbar und können einfach verwendet werden.

Mein Setup wird relativ einfach sein: 2 SSIDs (intern und Gast) und 3 VLANs. Das Gast WLAN wird mit einem Captive Portal mit Voucher Codes geschützt um nur meinen Gästen den Zugriff zu gestatten.

Unifi Konfiguration

Da ich von Natur aus ungeduldig bin, habe ich schon am Mittwoch und Donnerstag die Unifi Software installiert und komplett durch konfiguriert. Die wichtigsten Punkte:

Unter „Networks“ müssen die Netzwerke, also euer LAN und ggf Gäste-Netz definiert werden:

Mein LAN sieht dabei so aus:

Wichtig ist hier das „Gateway“ – diese IP wird später das USG bekommen. Das Gast-Netz ist äquivalent – nur mit dem Purpose „Guest“ und der VLAN ID 330. Diese könnt ihr natürlich wählen wie ihr wollt – bei mir ist WLAN immer ab 300 und 330 das Gast-Netz.

Anschließend unter „Wireless Networks“ die WLAN-Netze erstellen:

Ich habe dort mein Default-WLAN per WPA-PSK und das offene Gast-Netz. Dazu noch ein WPA2 Enterprise Test-Netz (dazu später mehr). Zu guter Letzt noch unter „Guest-Control“ den Hotspot konfigurieren. Eigentlich ist alles selbsterklärend, wichtig ist, dass Voucher aktiviert sind und die IP des Unifi-Servers freigegeben ist für „Pre-Authorization Access“ – das heißt auch ohne Anmeldung darf man diese IP aus dem Gast-Netz aufrufen. Das ist notwendig, weil der auf dem Unifi Server das Portal gehosted wird.

Um den Gäste nicht meine ganze Leitung zur Verfügung zu stellen sondern nur 4 Mbit habe ich eine neue User-Gruppe angelegt und dieser die entsprechende Bandbreiten-Einschränkung zugewiesen

und diese anschließend im WLAN Netzwerk eingetragen

Das wars – ab dem Moment wartete ich nur noch auf die Hardware…

Einrichtung der Hardware

Am Freitag war es dann endlich soweit: das USG und der erste Accesspoint waren da!

Also fix alles ausgepackt:

Kabel dran, in der Software auf Adopt geklickt und…

„Adoption Failed“ – ging nicht. Was für ein Dreck! Klingt ja auch logisch – das USG hat die IP 192.168.2.1 – mein Unifi-Server hat die 192.168.15.252, die kommen nicht zueinander. Für die Adoption wird SSH genutzt, und da muss die Netzwerkroute natürlich funktionieren.
Also mal fix geschaut: laut Ubiquity soll man sich direkt an das USG verbinden und die IP des LAN-Ports auf das Ziel-Subnetz ändern. Gesagt getan – ohne Erfolg. Also habe ich es dann umgedreht und dem Unifi-Server eine virtuelle Netzwerkkarte im Subnetz 192.168.1.0/24 gegeben. Ja richtig, 192.168.1.0 – auch wenn das USG laut Unifi Software die 192.168.2.1 hat, in Wirklichkeit ist es die 192.168.1.1.

iface eth0:1 inet static
address 192.168.1.252
netmask 255.255.255.0
Anschließend habe ich das „Adopt-Form“ von Hand ausgefüllt und die Daten
IP: 192.168.1.1
User: ubnt
Password: ubnt
Inform-URL: 192.168.1.1:8080/inform
Siehe da – die Adoption lief ohne Probleme durch und das USG wurde erkannt:
Ab dem Moment war es einfach. Die Konfiguration für den WAN Port kann man direkt im „Configure“-Menü auf der rechten Seite durchführen:
Bei mir hängt das USG hinter der Fritz!Box – durch die VOIP-Konten von Vodafone/KabelDeutschland kann ich leider nicht ganz auf die Box verzichten. Aber nachdem ich alle unnötigen Funktionen (WLAN, FritzNAS, FritzMediaServer, DHCP etc.) deaktiviert hatte, lief sie etwas schneller und ist jetzt nur noch Gateway. Das USG ist als ExposedHost in der FritzBox definiert.
Jetzt gab es schonmal wieder Internet – wenn man mit dem Kabel verbunden war. Also als nächstes den WLAN Accesspoint in Betrieb nehmen. Hier war dann aber wirklich alles „straightforward“. Anschließen, adoptieren, fertig.
Schon gab es WLAN, alle SSIDs waren da und auch das Gast-Portal funktionierte – wunderbar!
Das USG und der Accesspoint sind in meinem Wohnzimmer (da ist auch die Kabeldose – leider!) und unsere Wände bestehen gefühlt aus Blei und Stahl. Im Wohnzimmer hatte ich super Empfang (-40db) und im Arbeits- bzw. Gästezimmer war es schon wieder grausam mit -78db. Außerdem hatte ich noch eine kleine Herausforderung: im Arbeitszimmer hatte ich einen FritzRepeater mit LAN Port um alle Geräte über die WLAN-(B/K)rücke per Kabel zu verbinden. Dieser Repeater wollte aber nicht gut mit dem Unifi-Accesspoint arbeiten. Also habe ich schnell bei Amazon noch einen bestellt – dieser sollte als Mesh-Accesspoint genutzt werden.

Mesh WLAN

Unifi bietet die unglaublich geile Funktion Mesh WLANs aufzubauen. Das heißt ich kann AccessPoints dort wo kein Kabel ist anschließen und sie arbeiten als Repeater – für alle SSIDs mit VLAN Tagging etc. Und wenn der AccessPoint zwei LAN Interfaces hat – wie mein UAP-AC-PRO dann gibt er dort auch wieder das Netzwerk aus. Übrigens kann man mit den richtigen Mesh-AccessPoints sogar die per WLAN angebunden AccessPoints als Uplink für weitere nutzen.

Also dann – AccessPoint ausgepackt, POE dran (wichtig: nichts in den LAN Port des POE Adapters stecken) und schon wurde er angezeigt:

Nach der Adoption wird er als ISOLATED angezeigt und muss einem Uplink-AccessPoint zugewiesen werden:

Anschließend wird er provisioniert und strahlt die WLAN SSIDs  aus.

Das wars – zwei AccessPoints und ein USG verrichten jetzt hier Ihren Dienst. Die WLAN Verbindung ist erheblich besser als vorher- ich erreiche in der ganzen Wohnung (sogar auf dem Balkon) im Speedtest mindestens 75 MBit/s – früher waren es mit Ach und Krach 20 MBit/s.

Zukunftsausblick

Ich denke ich werde noch meine zwei „Öko-Switche“ von D-Link gegen Unifi Switche tauschen – nicht das ich die Funktionen wirklich brauche, aber im Wohnzimmer kann ich mir durch POE eine Steckdose sparen und generell ist es dann einheitlich.

Aus der Serie…

FHEM Wecker weckt nicht mehr

Seit einiger Zeit (ich glaube schon länger als eine Woche) hat mein Wecker nicht mehr funktioniert. Ich hatte bis jetzt noch keine Zeit mich aktiv damit auseinanderzusetzen. Nun habe ich eben alles auseinander genommen und dabei folgendes im Log entdeckt:

3: RESIDENTStk rr_Henning_wakeuptimer1: Another wake-up program is already being executed for device rr_Henning, won’t trigger Macro_rr_Henning_wakeuptimer1

Sowohl ein


set rr_Henning_wakeuptimer1 stop

noch ein


set rr_Henning_wakeuptimer1 end

haben geholfen. FHEM war stehts der Meinung mein Wecker würde noch laufen. Irgendwann bin ich dann im Thread des Moduls sowie in einem extra-Thread auf die Info gestoßen, dass wohl im Bewohner-Device das Reading „wakeup = 1“ noch „hängt“.

Nach einem


deletereading rr_Henning wakeup

lief wieder alles wie gewohnt.

Meine eigene Wetterstation

Vor einiger Zeit las ich auf www.siio.de von der energieautaken Wetterstation „Z-Weather“ der Firma Popp. Diese wird über ein Solarmodul mit Energie versorgt und benötigt somit keine Batterien, Akkus o.ä. Sehr angenehm 🙂

Eine eigene Wetterstation – darüber hatte ich schon öfters mal nachgedacht. Vor allem die Helligkeitswerte die mir Twilight lieferte waren nicht wirklich gut und auch sonst wäre es doch ganz nett die tatsächliche Temperatur etc. zu kennen. Aber ca 170€ fand ich dann doch ganz schön happig und habe das Projekt erstmal verschoben.

Kurze Zeit später gab es dann bei Cyberport ein Sonderangebot: die Z-Weather auf 90€ reduziert! Da musste ich einfach zuschlagen, das war ja quasi schon Nötigung sie zu kaufen 😉

Gesagt getan, kurze Zeit später war die Station da. Das schlimmste war die Wartezeit bis sie endlich geladen war – einen ganzen Tag lang lag Sie auf dem Tisch und ließ sich die Sonne auf die Solarzelle brutzeln.

Anschließend habe ich die Station ohne weitere Probleme mit FHEM verheiraten können und bekam bereits die ersten Daten 🙂 Also schnell am Balkon aufhängen:

ZWeather

Eine Wetterstation ohne Batterien – einmal aufhängen und um nichts mehr kümmern 🙂 Ein Träumchen!

Nach ein paar Tagen stellte ich dann fest, dass die Werte nicht wie vom Hersteller angegeben alle 1-2 Stunden kommen, sondern eher so nach Lust und Laune:

13509102_926454690833530_7058896317553941333_n

Nicht so richtig konsistent und erst recht nicht alle 1-2 Stunden. Der Hersteller war was das betrifft leider wenig hilfreich und hat nur kurz das geschrieben, was ich eh schon wusste:

here is the behavior. there is a wakeup interval that is the minimum interval the device will wakeup. However in order to manage energy the device will increase the wakeup time if running out of battery. The objective is to always have enough energy for an wind alarm – the central function of the device. This energy is preserved even on the cost of having less frequent updates on temperature etc.

Wie dem auch sei – seit dem tut die Wetterstation bei mir Dienst und macht diesen für meine Bedürfnisse aktuell ausreichend. Ich weiß, wann es dunkel wird (die ~21% Luminance werden jeden Abend gemeldet) und der Windalarm funktioniert auch.

 Einziger Wermutstropfen der jetzt noch bleibt: Die Station hängt im Nord-Western und bekommt leider ab 17:00 ziemlich direkt die Sonne ab 🙁 Daher sind die Temperaturwerte zu der Zeit nicht wirklich realistisch – aber damit kann ich vorerst leben.

Linktipp: Wetterstation in FHEM einbinden und in mySQL Datenbank loggen

Der Gäste-Modus

Ihr kennt das sicher: wenn Gäste zu besuch sind, gibt es immer in paar Aufgaben die zu erledigen sind.

Ich finde es zum Beispiel sehr angenehm, wenn in unserem Flur immer ein kleines Licht brennt (der Flur ist sonst extrem Dunkel) und auch der Warmwasser Boiler im Gäste-WC muss eingeschaltet werden. Außerdem sollte natürlich wenn es dunkler wird das Ambiente – Licht im Wohnzimmer eingeschaltet werden.

Dazu habe ich bei mir in FHEM einen Gäste-Modus erstellt der genau diese Tasks abdeckt. Geschaltet wird der Task über meine TabletUI:

Bildschirmfoto 2016-07-23 um 19.00.28

Hier wird nur ein Dummy DUM_Guests auf „on“ gesetzt. Über DOIF Funktionen werden dann das Garderobenlicht im Flur sowie der Wasserboiler aktiviert und bei Dämmerung (festgestellt über den Lichtsensor meiner Z-Weather Anlage) das Licht im Wohnzimmer:

([DUM_Guests:state] eq „on“ and [BK.Wetterstation:luminance] < 25) (set Lampe_Wohnzimmer on; define WZ.SofaAuf100Dim at +*{7}00:01:00 set WZ.SofaFarbe dimup 15)

Somit kann ich durch nur einen Tastendruck alles nötige Veranlassen um es unseren Gästen bequem zu machen 🙂 Mal sehen, was mir noch so einfällt…

Status meines „Smart Home“

Dies soll ein Artikel über die aktuell verwendeten Komponenten sein, den ich regelmäßig aktualisiere.

Stand: 07. Juli 2016

Wohnzimmer

Flur

  • Fibaro Zwischenstecker an der Garderobenbeleuchtung
  • Tablet für die Steuerung mit der TabletUI in der Garderobe

Schlafzimmer

Badezimmer

Arbeitszimmer

Balkon

Steuerung

Smart Home Abläufe (Teil 1)

In der letzten Zeit habe ich mir Gedanken gemacht, was ich mit meinem Smart Home Projekt eigentlich erreichen möchte. Warum fange ich an, Lampen, Fernseher etc. mit „intelligenter“ Technik auszustatten.

Angefangen hat das Ganze als Spielerei, aber jetzt soll es doch nützlich werden. Der erste Prozess den ich umgesetzt habe war das „zu Bett gehen“.

Wenn der TV im Wohnzimmer nach 21 Uhr ausgeschaltet wird, erkennt der FHEM Server das als „ins Bett gehen“. Das trifft zwar nicht immer zu, ist aber ein ganz guter Indikator.

Als Aktion leitet er daraus folgendes ab:

  • Im Wohnzimmer wird für eine Dauer von 10 Minuten der LED Streifen auf 50% aktivieren. [In Zukunft soll noch das Licht im Flur aktiviert werden, da fehlt aber der Aktor noch.]
  • im Schlafzimmer werden der Strom für den TV und den FireTV sowie die Beleuchtung aktiviert.
    • Sollte ich nicht innerhalb von 15 Minuten Kodi starten, wird alles wieder abgeschaltet da ich es offensichtlich nicht brauche.
    • Nach dem Starten eines Videos in Kodi automatisch das Licht abgeschaltet.
    • Nach dem Kodi auf den Status „stop“ gewechselt hat überprüft ein Watchdog ob ich innerhalb von 5 Minuten wieder ein Video starte, wenn nicht werden TV und FireTV abgeschaltet. Ein etwas „improvisierter“ Sleep-Timer.
      • Sollte ich Kodi händisch beenden, werden auch der TV und FireTV abgeschaltet.

So viel zu meinem ersten Prozess.

Radio-Steuerung über Popp-Schalter

Wie bereits besprochen, muss mein Radio (bzw. Multi-Room-System) auch in FHEM eingebunden werden. Im ersten Schritt ging es um den WAF. Radio an und aus mit einem Schalter.

Ich habe aktuell in der Küche folgendes Setup:

Raspberry Pi mit snapcast Client sowie aktiv-Boxen die an einem Fibaro Wallplug hängen. 

Nun war meine Aufgabe für heute: Das Radio mit einem Schalter steuerbar zu machen. Dazu habe ich bei Amazon einen Popp Funkwandschalter bestellt (Link) und diese in mein Setup als „KU.Schalter1“ eingebunden. Der Schalter ist wie folgt belegt:

Schalter

Über einen Dummy („RadioOn“) habe ich mit zwei notifys („RadioOnNotify“ und „RadioOffNotify“) eine Funktion hinterlegt, die die Musik startet und die Steckdose aktiviert oder deaktiviert.

Entsprechend habe ich also mit einem notify den Schalter angebunden: Bildschirmfoto 2016-06-03 um 17.41.53

Das „KU.RadioNot“ ist der On/Off Schalter, dazu hat er folgende Definition:

KU.Schalter1:cSceneSet..1 IF ([RadioOn] eq „off“) (set RadioOn on) ELSE (set RadioOn off)

Die Volume-notifys sind ganz normal umgesetzt:

KU.Schalter1:cSceneDim..2 set myMPD volumeUp

KU.Schalter1:cSceneDim..4 set myMPD volumeDown

Interessant ist aber das „ChangeSender“. Irgendwie muss man ja mal den Sender wechseln können. Aber wie? Ich habe mir mit einer kleinen Clustom Funktion beholfen, die den aktuellen Sender prüft und einen anderen auswählt.


sub ChangeSender()
{
my @rsender = (
"http://player.ffn.de/ffnstream.mp3",
"http://188.94.97.91/radio21.mp3",
"http://stream.radiosaw.de/"
);
my $i = 0;

foreach my $sender ( @rsender ) {
if (ReadingsVal("myMPD", "file", "none") eq $sender)
{

}else{
if ($i eq 0){
fhem("set myMPD playfile ".$sender);
$i++;
}
}
} # foreach
}

Diese Funktion wird einfach über den Schalter aufgerufen und fertig ist die 4-Tasten-Radio-Steuerung.