Archiv ‘IT’

Donnerstag, 12. Januar 2017

Plantronics Voyager Edge-Headset verbindet sich nicht mehr mit dem Bluetooth-Dongle

Seit der Einführung von Skype for Business mitsamt klassischer Telefonie auf der Arbeit bin ich restlos von meinem Plantronics Voyager Edge-Headset überzeugt.

Das Gerät verrichtet seit dem 24. Mai 2016 klaglos seinen Dienst. Bis heute.

Heute war es mir plötzlich nicht mehr möglich, das Headset mit dem Computer zu verbinden: Der Plantronics-Dongle am USB-Anschluss wechselte nicht auf ein stetiges blaues Licht, nachdem ich das Headset angeschaltet hatte. Auch das aus- und wieder einstecken des Dongles — was solche Probleme bisher löste — funktionierte nicht. Mein Mikro blieb in Telefonaten stumm, und ich hörte auch die Gegenseite nicht.

Nach einem kurzen Abstecher in die Skype-Audioeinstellungen sowie unsere USB Device Control-Lösung war klar, dass der Dongle problemlos erkannt wurde. Das Problem musste also am Headset selber liegen.

Mit dem iPhone verband sich dieses problemlos (das Headset verbindet sich gleichzeitig mit zwei Gegenstellen; d.h. auf der Arbeit verwende ich es mit dem iPhone und dem Laptop gepairt), weshalb ich es zum Glück nicht mit einem generellen Hardware-Defekt zu tun hatte.

Nach etwas googlen fand ich heraus, wie man das Ding zurücksetzt:

you will need to hold the Power/Mute button and the Volume Down button at the same time for 3 seconds to reset the headset. Once the headset is reset the buttons should function again without issue.

Quelle:

Gleichzeitig Volume Down („Leiser“, das ist die Lautstärketaste ohne den Hubbel) wie auch die grosse Taste auf der Aussenseite des Headsets drücken — und für mindestens drei Sekunden gedrückt halten.

Das LED fängt dann Rot und Blau an zu blinken — und bäm, nach ein paar Sekunden funktionierte das Headset wieder mit meinem Laptop. Wider Erwarten musste ich das Headset auch nicht erneut mit meinem iPhone pairen.

Tags: , , ,
Labels: IT

1 Kommentar | neuen Kommentar verfassen

Mittwoch, 14. Dezember 2016

Das in Chrome eingebettete Flash-Plugin aktualisieren

Die Aktualisierung von Chrome kann man anstossen, indem man den Browser startet und danach die Adresse

chrome://help/

ansurft.

Um die Aktualisierung des in Chrome integrierten Flash-Plugins anzustossen, startet man den Browser und surft man die folgende Adresse an:

chrome://components/

Dort sucht man den Eintrag „Adobe Flash Player“ und klickt auf den Button „Check for updates“:

Tags: , , , , , ,
Labels: IT

2 Kommentare | neuen Kommentar verfassen

Dienstag, 13. Dezember 2016

mitmproxy: Server-Antworten umschreiben (oder: M6 Geoblocker umgehen)

Heute durfte ich für einen Kollegen in den USA eine im Internet als Stream verfügbare M6 News-Sendung rippen.

Geoblocker

Damit ich an die m3u8-Datei des Streams herankam, musste ich aber zuerst die Geo-Sperre umgehen. Die Web-Site frägt nämlich beim Aufruf (gleich zweimal) ab, in welchem Land sich der Surfer befindet. Hierzu ruft der JavaScript-Code der Web-Site folgende zwei URLs auf:

Als Antwort erhält der Browser folgenden JSON-Code zurück (IP anonymisiert):

{"offset":"2","isp":"Andreas Fink","areas":[10],"country_code":"CH","asn":"AS6775","ip":"85.195.0.0"}

Diese Antwort bewegt den Player dazu, folgende Fehlermeldung anzuzeigen:

M6 6play Geoblock

mitmproxy installieren und konfigurieren

Der erste Task war somit klar: Ich musste mit dem quelloffenen Tool mitmproxy alle HTTP(S)-Requests meines iPads proxyifizieren und dann obige JSON-Antwort mit einer validen Antwort ersetzen, so wie sie über einen französischen ISP erfolgen würde.

mitmproxy hatte ich bereits auf meinem lokalen Linux-Server konfiguriert, weshalb ich auf dem iPad in den Netzwerkeinstellungen den Proxy nur noch erfassen musste: 10.0.X.Y:8888.

Auf dem Linux-Server startete ich mitmproxy folgendermassen:

# mitmproxy -p 8888

Als nächstes musste ich noch das mitmproxy-Zertifikat auf dem iPad installieren, damit HTTPS-Verbindungen entschlüsselt und umgeschrieben werden können. Hierzu reicht es, auf dem iPad die folgende URL aufzurufen …

mitm.it

… und den Anweisungen zu folgen (ACHTUNG: Sicherheitssensitive Personen löschen das Zertifikat nach der Verwendung wieder vom iPad. Es findet sich unter Settings > General > Profiles).

Inline-Script zum Umschreiben von Antworten

Damit ich vom Proxy-Server empfangene Antworten der M6-Server umschreiben konnte, musste ich nun noch ein mitmproxy Inline-Script einbauen, welches Aufrufe auf die oben genannten URLs abfängt und nach meinem Gusto umschreibt.

Hierzu legte ich unter /tmp/m6-geoip.py folgendes Python-Script ab:

import json

def response(context, flow):
	f = open('/tmp/mitm.log','a+')
	url = flow.request.get_url()
	f.write('URL "' + url  + '"' + "\n")

	if url.endswith('geoInfo') or url.endswith('geoInfos'):
		f.write('    matched' + "\n")
		data = json.loads(flow.response.content)
		# {"offset":"2","isp":"Andreas Fink","areas":[10],"country_code":"CH","asn":"AS6775","ip":"85.195.0.0"}
		# {"offset":"2","isp":"QSC AG","areas":[1,2,3,10,11],"country_code":"FR","asn":"AS20676","ip":"92.222.83.58"} via http://www.franceproxy.net
		#data["country_code"] = "FR"
		#jsonOut = json.dumps(data)
		jsonOut = '{"offset":"2","isp":"QSC AG","areas":[1,2,3,10,11],"country_code":"FR","asn":"AS20676","ip":"92.222.83.58"}'
		flow.response.content = jsonOut
		f.write("    " + jsonOut + "\n")
	f.close()

Tipp 1: Da selten Leute vom Himmel gefallen sind, welche ein Script auf Anhieb richtig hingekriegt haben, hilft es zum Debugging, statt mitmproxy mitmdump zu verwenden:

# mitmdump -e -p 8888 -s "/tmp/m6-geoip.py"

Bei Python-Problemen mit dem Inline-Script wird der Stack Trace und die Fehlermeldung direkt auf der Kommandozeile ausgegeben.

Tipp 2: Die Ausgabe aller URLs in eine Log-Datei resultiert in Performance-Einbussen, kann für das Debugging aber sehr nützlich sein.

Anschliessend startete ich den mitmproxy neu:

# mitmproxy -p 8888 -s "/tmp/m6-geoip.py"

JSON-Quelle

Doch von wo hatte ich den JSON-String?

Nach etwas Googeln fand ich folgenden Proxy-Service:

www.franceproxy.net

Gibt man dort eine der obigen URLs ein, erhält man als Antwort den JSON-Code, welchen ich dann auch für die Umgehung des Geoblockers verwendete.

Kostenloser Tipp an die Web-Entwickler von M6: Die Geo-Location eines Aufrufs prüft man nicht im JavaScript auf dem Client, sondern auf dem Server.

Der erneute Versuch im Web-Browser

Ich lud die Web-Seite auf dem iPad erneut — erhielt zwar eine Fehlermeldung, dass trotzdem irgendetwas schief gelaufen war, doch im mitmproxy-Log fand sich die sehnlichst gesuchte URL zur m3u8-Datei:

lb.cdn.m6web.fr

Daraus — und mit Informationen der aktuellsten Sendung, welche sich auch für Schweizer streamen lässt — leitete ich die tatsächliche URL zur Master-Playlist ab:

e112.cdn.m6web.fr

Von dieser Datei war es dann nur noch ein Katzensprung zur m3u8-Datei mit dem Stream mit der höchsten Bit-Rate:

e112.cdn.m6web.fr

Und so lud ich den Stream dann mit ffmpeg herunter:

$ ffmpeg -protocol_whitelist file,http,https,tcp,tls -i "http://e112.cdn.m6web.fr/usp/mb_sd3/2/8/1/Le-1945_c11636016_19-45-du-dimanche-11/Le-1945_c11636016_19-45-du-dimanche-11_unpnp.ism/Le-1945_c11636016_19-45-du-dimanche-11_unpnp-audio_fra=93468-video_eng=1501000.m3u8" video.mp4

Tags: , , , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 13. Dezember 2016

~/Library/Caches/com.apple.bird gigantisch

Wie bereits an folgenden Orten dokumentiert ist auch mein com.apple.bird auf 48.9 GB angewachsen:

Ein auf Github gefundenes Script namens blame-bird.py habe ich ausgeführt; das Resultat:

$ python blame-bird.py 
com.apple.Numbers                                   0.00MB      1
F6266T9T75.com.apple.iMovie                         0.00MB      1
LWL9XTYF8Q.com.syniumsoftware.macfamilytree7        0.00MB      1
com.apple.Pages                                     0.00MB      2
com.apple.Keynote                                   0.00MB      2
8YE23NZS57.com.kayak.travel                         0.00MB      3
iCloud.com.bodunov.galileo                          0.00MB      7
com.apple.mail                                      0.00MB     16
com.apple.TextInput                                 0.00MB     37
com.apple.TextEdit                                  0.00MB      3
4R6749AYRE.com.pixelmatorteam.pixelmator            0.00MB     53
com.apple.shoebox                                   0.00MB     38
iCloud.com.apple.iBooks                             0.02MB    310
57T9237FN3.net.whatsapp.WhatsApp                35564.12MB    717

Accounted for: 35564MB.  Still unaccounted: 16968MB

Also auch bei mir WhatsApp, welche das mit dem iCloud-Backup einfach nicht gebacken kriegen (im Sommer plagte mich folgendes, verwandtes Problem: WhatsApp kann nicht auf iCloud backupen).

Ich habe den Ordner nun gelöscht und hoffe, dass er nicht bald wieder fettleibig wird …

Labels: IT

2 Kommentare | neuen Kommentar verfassen

Montag, 5. Dezember 2016

Geschwindigkeiten von SD-Karten

Die Industrie unterscheidet zwei SD-Kartenarten: Standard sowie UHS.

Die (neueren) Standard-Karten kodieren ihre Geschwindigkeiten als Zahl in einem Kreis, aufgedruckt auf das Etikett:

Zahl im Kreis Geschwindigkeit
10 10 MBit/s
6 6 MBit/s
4 4 MBit/s
2 2 MBit/s

Die UHS-Karten haben die Geschwindigkeit als Zahl in einem u-ähnlichen Symbol aufgeführt:

Zahl im U Geschwindigkeit
3 30 MBit/s
1 10 MBit/s

Quelle: Speed Class

Tags: , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 27. November 2016

Die REST-API von SeedDMS ansprechen

Vor einiger Zeit habe ich mir auf meinem Linux-Server hier zu Hause das Dokumentenmanagement-System SeedDMS installiert. Ich habe dieses Produkt ausgewählt, weil es mit PHP programmiert ist (eine Alternative benötigt Java und scheint nach einem Testlauf nicht die erhofte Maturität aufzuweisen.)

Obwohl die Installation dieses Produkts auch nicht ganz simpel ist (dies erläutere ich dereinst in einem separaten Blog-Artikel), weist es die nötige Maturität aus und bringt eine ansehnliche Liste von Features mit. Grösstes Manko ist eine aktuelle, für Endanwender verständliche Dokumentation.

Eine der von mir gesuchten Funktionalitäten ist die REST API, welche man unter der URL /restapi/index.php ansprechen kann.

Als ich damit die ersten API-Calls machen wollte, kam leider eine leere Antwort zurück. Im php.err fand sich folgende Zeile:

...
[27-Nov-2016 11:55:44 Europe/Zurich] PHP Warning:  require(Slim/Slim.php): failed to open stream: No such file or directory in /var/www/seeddms/restapi/index.php on line 55
[27-Nov-2016 11:55:44 Europe/Zurich] PHP Fatal error:  require(): Failed opening required 'Slim/Slim.php' (include_path='/var/www/seeddms/::.:/usr/share/php/') in /var/www/seeddms/restapi/index.php on line 55
...

Hmmm! Da scheinen mit der Quickstart-Version 5.0.7 (die einzige, die ich auf meinem Server zum Laufen gebracht zu habe) nicht alle externen Dependencies mitzukommen.

Ein Issue auf Sourceforge bestätigt meine Vermutung, bringt aber keine Lösung mit (was bringt es dem Endbenutzer, wenn die Dependency im README ergänzt wird?).

Ein, zwei Google-Suchen später finde ich dann einerseits die Web-Site des Frameworks, andererseits das Github-Repository.

Doch wie und wo installiere ich das Paket nun?

Eine weitere Google-Suche leitet mich auf eine Web-Site weiter, welche die Dokumentenstruktur einer älteren SeedDMS-Installation auflistet und dabei auch einen Ordner Slim aufweist. Der Ordner enthält folgende Dateien:

Als ich diese Struktur mit dem Github-Repository verglich, konnte ich keine Ähnlichkeiten feststellen.

Dann der Geistesblitz: Vielleicht verwendet SeedDMS noch eine ältere Version des Frameworks? Richtig geraten: Aktuell trägt das Framework die Version 3.0, SeedDMS baut aber auf Version 2.0 des Frameworks auf.

Ein Blick auf die Dateistruktur des 2.x Branches bestätigt meine Vermutung. Ich lade mir von diesem Branch die ZIP-Datei herunter und kopiere anschliessend den Unterordner Slim im Ordner Slim-2.x in das Web-Root von SeedDMS (/var/www/seeddms/Slim).

Nun klappt der Aufruf der API, weil PHP die Include-Datei unter /var/www/seeddms/Slim/Slim.php findet!

Am Ende der /restapi/index.php findet sich auch eine Liste aller verfügbarer API-Calls:

$app->post('/login', 'doLogin');
$app->get('/logout', 'doLogout');
$app->get('/account', 'getAccount');
$app->get('/search', 'doSearch');
$app->get('/searchbyattr', 'doSearchByAttr');
$app->get('/folder/:id', 'getFolder');
$app->post('/folder/:id/move', 'moveFolder');
$app->delete('/folder/:id', 'deleteFolder');
$app->get('/folder/:id/children', 'getFolderChildren');
$app->get('/folder/:id/parent', 'getFolderParent');
$app->get('/folder/:id/path', 'getFolderPath');
$app->get('/folder/:id/attributes', 'getFolderAttributes');
$app->post('/folder/:id/createfolder', 'createFolder');
$app->put('/folder/:id/document', 'uploadDocument');
$app->get('/document/:id', 'getDocument');
$app->delete('/document/:id', 'deleteDocument');
$app->post('/document/:id/move', 'moveDocument');
$app->get('/document/:id/content', 'getDocumentContent');
$app->get('/document/:id/versions', 'getDocumentVersions');
$app->get('/document/:id/version/:version', 'getDocumentVersion');
$app->get('/document/:id/files', 'getDocumentFiles');
$app->get('/document/:id/file/:fileid', 'getDocumentFile');
$app->get('/document/:id/links', 'getDocumentLinks');
$app->get('/document/:id/attributes', 'getDocumentAttributes');
$app->put('/account/fullname', 'setFullName');
$app->put('/account/email', 'setEmail');
$app->get('/account/locked', 'getLockedDocuments');
$app->post('/accounts', 'createAccount');
$app->get('/accounts/:id', 'getAccountById');
$app->put('/accounts/:id/disable', 'setDisabledAccount');
$app->post('/groups', 'createGroup');
$app->get('/groups/:id', 'getGroup');
$app->put('/groups/:id/addUser', 'addUserToGroup');
$app->put('/groups/:id/removeUser', 'removeUserFromGroup');
$app->put('/folder/:id/setInherit', 'setFolderInheritsAccess');
$app->put('/folder/:id/access/group/add', 'addGroupAccessToFolder'); // 
$app->put('/folder/:id/access/user/add', 'addUserAccessToFolder'); // 
$app->put('/folder/:id/access/group/remove', 'removeGroupAccessFromFolder'); 
$app->put('/folder/:id/access/user/remove', 'removeUserAccessFromFolder'); 
$app->put('/folder/:id/access/clear', 'clearFolderAccessList');
$app->run();

Eine simple API-Abfrage schaut folgendermassen aus:

  1. /restapi/index.php/login mit den POST-Parametern user und pass
  2. Das Session-Cookie mydms_session=XXX; in eine Variable speichern. Es muss bei allen folgenden API-Calls mit übermittelt werden
  3. /restapi/index.php/searchbyattr?name=AttrName&value=AttrValue mit den GET-Parametern name und value
  4. Die Antwort wird als JSON zurückgegeben, welche mit json_decode() in ein PHP-Objekt/Array geparsed werden kann

Tags:
Labels: IT, Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 13. November 2016

UniFi Access Points mittels IKEA-Hack in der Wohnung platzieren

Zur selben Zeit, als ich Brandmelder angeschafft habe und mir am Überlegen war, wie man diese Sensoren ohne Beschädigung der Decken in der Wohnung platzieren kann, habe ich mir auch zwei UniFi Access Point angeschafft.

Der IKEA-Hack mit den Variera Tellerhaltern für die Montage der Brandmelder liess sich 1:1 auch auf die Access Points übertragen, da IKEA Tellerhalter in zwei Grössen im Angebot führt (die UniFis hätten rein vom Durchmesser überhaupt nicht in die Brandmelder-Halterung gepasst). Für UniFi Access Points eignet sich das grössere der beiden Modelle, das Teller in der Grösse von 19cm bis 32cm aufnimmt:

VARIERA Tellerhalter, Buche hell, Edelstahl (IKEA Artikelnummer 802.404.16; 9.95 CHF)

Wieso dieser Aufwand? UniFi Access Points senden ihre Signale in Form eines „Donuts“ aus, wenn der Access Point horizontal aufliegt. Der „Donut“ ist aus der horizontalen Sicht aber nicht symmetrisch: Auf der Deckenseite des Access Point mit der Zuführung des Ethernet-Kabels ist die Abstrahlung weniger wulstig als auf der Luftseite (dort, wo das Logo prangt und die blaue LED leuchtet):

unifi-access-point-donut-horizontal

NACHTRAG: Unter Antenna radiation pattern for UniFi AP (diagramm inside) habe ich weitere Diagramme gefunden:

unifi-horizontal-polarization-mounted-wall

unifi-horizontal-polarization-mounted-roof

unifi-vertical-polarization-mounted-wall

unifi-vertical-polarization-mounted-roof

Quelle: [Ervaringen/discussie] Ubiquiti-apparatuur

Dies ist einfach erklärbar: Die Macher der semi-professionellen Access Points gehen davon aus, dass die Dinger in der Regel an Decken montiert werden. Richtung Decke selber bringt eine WiFi-Durchdringung niemandem etwas, aber von der Decke weg (Richtung Zimmerboden) muss eine möglichst grosse Abdeckung erreicht werden.

Aus diesem Grund habe ich beide Access Points auf dem Tellerhalter montiert und in der Stube sowie im Büro möglichst an hoher Position aufgestellt. Das sieht dann so aus:

UniFi Access Point IKEA Variera Mount Living Room

Tags: , , , , , , , , , ,
Labels: IT

4 Kommentare | neuen Kommentar verfassen

Sonntag, 13. November 2016

Brandmelder mittels IKEA-Hack in der Wohnung platzieren

Vor einiger Zeit habe ich mir bei MIGROS für wenig Geld ein Sechserpack Brandmelder erstanden und wollte unsere Wohnung damit ausstatten. Unser Apartment ist vollgestopft mit Elektronik und es müsste nur eine Frage der Zeit sein, bis damit irgendwann einmal etwas schief geht. Im schlimmsten Fall brennt es.

Damit Brandmelder und deren Luftpartikelsensoren wie gewünscht funktionieren ist es wichtig, dass diese in einem Zimmer möglichst hoch, das heisst an der Decke, angebracht werden. Da wir in einer Mietwohnung leben, deren Decken wir nicht beschädigen wollten, und weil ich handwerklich nicht der Hirsch bin, habe ich mich nach einer anderen Lösung umgesehen.

Was, wenn man die Brandmelder kopfüber an eine Halterung anbringen könnte, und diese Halterung dann an möglichst hochgelagerten Positionen im Haus platzieren könnte?

Die Spezifikationen waren simpel: Eine Art rundes Teller (Durchmesser mindestens so gross wie derjenige der Brandmelder), an welches der Brandmelder mit seiner Deckenhalterung angebracht werden kann. Das Eingericht ist am Besten mit Füssen ausgestattet, damit man das Konstrukt aufstellen kann und der Brandmelder unter sich ausreichend Partikel sieht.

Eine Suche auf IKEA dauerte nicht lange und brachte folgendes Produkt an den Tag:

VARIERA Tellerhalter, Buche hell, Edelstahl (IKEA Artikelnummer 002.404.15; 7.95 CHF)

Genau was ich gesucht habe! Die auf einen Durchmesser von 12cm bis 19cm verschiebbaren Füsse helfen zudem, dass das Holzbrett auch grössere Objekte aufnehmen kann, die das Brett ein wenig überragen.

Mein Vater half mir dabei, Schrauben im Holz zu versenken, die Deckenhalterung daran zu montieren. Anschliessend bestückte ich die Brandmelder mit der 9V-Batterie und platzierte das Konstrukt an neuralgischen Punkten in unserer Wohnung.

Das Endresultat lässt sich sehen:

IKEA Variera Brandmelder

Tags: , , , , ,
Labels: IT

1 Kommentar | neuen Kommentar verfassen

Dienstag, 11. Oktober 2016

SFP-Informationen unter Linux anzeigen

Weil ich meinen Fiber7 SFP-Transceiver im Turris Omnia (noch) nicht zum Laufen bringen konnte, habe ich mich schlau gemacht, wie man Informationen über diesen Hardwarebaustein mit Linux-Bordmitteln abfrägt.

Ein Knowledgebase-Artikel bei Cumulus Networks lotste mich zu ethtool.

Konkret (von der Cumulus Web-Site kopiert):

$ ethtool swp1
Settings for swp1:
        Supported ports: [ FIBRE ]
        Supported link modes:   1000baseT/Full
                                10000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: No
        Advertised link modes:  1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: No
        Speed: 10000Mb/s
        Duplex: Full
        Port: FIBRE
        PHYAD: 0
        Transceiver: external
        Auto-negotiation: off
        Current message level: 0x00000000 (0)

        Link detected: yes

sowie noch viel spannender folgende SFP-spezifischen Informationen:

# ethtool -m swp1
swp1: SFP detected
    Connector : CopperPigtail
        EncodingCodes : Unspecified
    ExtIdentOfTypeOfTransceiver : GBIC/SFP defined by twowire interface ID
        LengthCable(UnitsOfm) : 1
    NominalSignallingRate(UnitsOf100Mbd) : 103
        RateIdentifier : Unspecified
    ReceivedPowerMeasurementType : OMA
        TransceiverCodes :
                SFP+CableTechnology : Passive Cable
    TypeOfTransceiver : SFP or SFP Plus
        VendorDataCode(yymmdd) : 110830
    VendorName : Amphenol
        VendorOUI : Amp
    VendorPN : 571540001
        VendorRev : M
    VendorSN : APF11350017C4V

Leider scheint ethtool auf dem Turris Omnia nicht standardmässig installiert zu sein:

root@TURRIS-OMNIA:~# which ethtool
root@TURRIS-OMNIA:~# 

Nachinstallieren kann man dieses, indem man unter System > Software das Paket ethtool herunterladen und installieren lässt:

turris-omnia-ethtool

Leider klappt es nicht wirklich, mittels dem Argument -m Informationen über Ethernet-Schnittstellen abzufragen:

# ethtool -m eth0
Cannot get module EEPROM information: Not supported

Links

Einige Hintergrundinformationen hier unter Phylink & SFP support

Tags: , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 11. Oktober 2016

Turris Omnia: Erste Erfahrungen

Am Freitag, 7. Oktober 2016, wurde mir mein über Indiegogo ge-crowdfundeter Turris Omnia-Router ins Büro geliefert.

Am Sonntag-Abend ging ich mit dem Gerät online. Zeit für ein erstes Fazit:

Fiber7 SFP funktioniert (noch) nicht

Der Router wird mit einem SFP-Slot ausgeliefert. Optimal, dachte ich mir, so kann ich meinen Gerätedschungel lichten und den im Januar gekauften Fiber Media Converter TP-LINK MC220L auf’s Altenteil schicken.

Zu früh gefreut! Wie von mir im offiziellen Forum beschrieben und von Michael Stapelberg bestätigt funktioniert der flexOptix BIDI LX SFP Transceiver aktuell nicht im Router.

Zuerst ging ich (fälschlicherweise) davon aus, dass das Problem bei Turris zu suchen ist, doch ein Tweet von Fiber7 von heute Dienstag, 11. Oktober 2016, legt nahe, dass auf Seite ISP resp. auf Seiten des SFP-Herstellers noch etwas geändert werden muss:

Performance

Eigentlich hätte ich erwartet, dass der neue Router näher an die Schallgrenze (d.h. 1 GBit/s Down- und Upstream) herankommt. Doch mein stündlich laufendes Script, welches die Geschwindigkeit zu Init7s Ookla Geschwindigkeitsserver (Ookla Server ID 3026) misst, sagt etwas anderes aus:

ookla-init7-asus-rt-ac66u-turris-omnia

Links sieht man die Werte, die ich mit einem Asus RT-AC66U (Merlin-Firmware und mit deaktivierter Firewall) erzielt habe; rechts (nach dem Unterbruch) die Werte von Turris Omnia (mit aktivierter Firewall).

Beim Client handelt es sich um einen Intel NUC DC3217IYE, welcher mit einem Cat 5e-Kabel über einen 16-Port TP-LINK TL-SG1016D über ein 20m Cat 6 STP-Flachband-Kabel auf einen ZyXEL GS1100-8HP PoE Switch via ein Cat 5e-Kabel am Turris angeschlossen ist.

Ich gehe davon aus, dass die Performance höher wäre, wenn ich einen nicht so schmalbrüstigen Client verwenden würde. Und ja, die Firewall des Turris könnte ich ja eigentlich der Performance wegen auch deaktivieren. Doch mich reizt es, die Crowd-Firewall eingeschaltet zu belassen, um mich und mein Netzwerk besser vor Gefahren aus dem Internet zu schützen.

Doch das spielt hier keine Rolle, weil im Setup einzig der Router selber ausgewechselt wurde, der Rest blieb gleich.

Michael hingegen kommt der Schallmauer gefährlich nahe — 927 MBit/s:

Führe ich speedtest-cli (ein Python-Script) direkt auf dem Turris Omnia aus, erhalte ich folgende Werte:

# ./speedtest-cli --simple --server 3026
Ping: 4.704 ms
Download: 684.35 Mbit/s
Upload: 208.04 Mbit/s

CPU-Auslastung

Dank der Aufzeichnung der Vitalparameter des Routers mittels Cacti musste ich soeben feststellen, dass die beiden CPUs des Gerätes seit heute Mitternacht (sprich seit meinem zweiten, fehlgeschlagenen Test mit dem SFP-Transceiver) 100% beträgt. Auf beiden Cores:

turris-omnia-cpu-0-usage

turris-omnia-cpu-1-usage

Ein Login auf dem Router und htop zeigen, welche Prozesse die Last verursachen:

turris-omnia-socat-cpu-usage

Die Prozesse habe ich direkt in htop mittels F9 und SIGKILL abgeschossen (ein Neustart von socat im LuCI-Interface unter System > Software hat nichts gebracht). Jetzt ist die CPU-Auslastung im einstelligen Prozentbereich und die Load Average bereits bei 0.40.

LEDs

Natürlich dürfen frei konfigurierbare LED-Farben nicht den Ausschlag geben, ein Produkt zu kaufen. Dennoch möchte ich dies nicht mehr missen. Nun sehe ich nämlich von der Eingangstüre unserer Wohnung aus, ob der Router läuft (grünes LED für Power) und ob er mit dem Internet verbunden ist (rotes LED für WAN). Hinzu kommen weiss blinkende LEDs, die mir zeigen, dass im LAN Pakete herumgeschickt werden.

turris-omnia-leds

IPv6

Das Ding würde auch IPv6 unterstützen, doch mental, fähigkeitstechnisch und auf Grund meiner leicht komplexeren Netzwerk-Infrastruktur im LAN sehe ich mich derzeit nicht imstande, diesen Schritt bereits zu wagen. Gut zu wissen, dass Turris auf jeden Fall bereit wäre:

Usability

Verwirrend (und unschön) ist es, dass der Router über zwei Web-Oberflächen verfügt: Einerseits das von Turris Omnia selbst entwickelte Foris, welches einen Wizard, aber kaum Einstellungsmöglichkeiten bietet, andererseits das OpenWRT-LuCI-Interface, über welches man jedes hinterste Bit des Routers konfigurieren kann (oder so).

Das letztere Interface kannte ich so bereits von meinem TP-LINK TL-MR3020 Travel-Router, der mich auf Reisen überall hin begleitet. Ganz interessant ist hier der Paket-Manager des Turris, obwohl ich abgesehen von snmpd und ethtool noch kein Paket installiert habe. Die Bedienbarkeit dieses Interfaces ist aber nicht so simpel gehalten wie bei einem Consumer-Router und benötigt deshalb eine gewisse Einarbeitungszeit.

Nachtrag: Unboxing-Photos

Turris vom Flickr-Benutzer Doommeer

Tags: , , , , , , , , , , , , , , , , , ,
Labels: IT

5 Kommentare | neuen Kommentar verfassen