Erfahrungen mit Telekom LTE Hybrid und SSH Problemen mit IPv4 / IPv6

Die Fördermittel für den Bandbreitenausbau in Deutschland scheinen langsam Wirkung zu zeigen.
Während wir bisher im Büro auf das LTE-Netz der Telekom angewiesen waren und aufgrund des Traffic-Limits regelmäßig nachbuchen mussten,
ist seit diesem Juni bei uns auch normales DSL verfügbar.
Und wir haben uns für MagentaZuhause Hybrid M entschieden, mit dem neuen Speedport LTE Hybrid der deutschen Telekom. Die Technik scheint ja durchaus interessant zu sein.
Mit LTE haben wir bereits sehr gute Erfahrungen, der einzige Negativ-Punkt ist das Traffic-Limit. Nach 40GB werden wir so stark gedrosselt, dass ein sinnvolles Arbeiten nicht mehr möglich ist. Wir sind also dazu gezwungen, ständig nachzubuchen.

Beim neuen Hybrid-Anschluss wird bevorzugt die DSL-Leitung verwendet. Reicht diese nicht mehr aus, wird zusätzlich auf LTE zurück gegriffen.
Hierfür ist jedoch eine besondere Hardware – also ein besonderer Router – nötig.
Die monatlichen Kosten für den Anschluss egal ob mit oder ohne hybrid sind gleich, nur die Hybrid-Hardware ist teurer.

Da man den Telekom-Geräten durchaus keine Featuritis vorwerfen können, wir als Techniker aber gerne etwas tiefer eintauchen, hätten wir anstelle der von der Telekom bereit gestellten Hardware eine alternative Hardware wie beispielsweise eine Fritzbox verwendet. Aber es gibt wohl leider noch keinen alternativen Router, der mit dem Telekom-Vertrag kompatibel sind.

Letzten Dienstag war also Schaltungstermin bei uns und mit dem neuen DSL wurde unser Anschluss von ISDN auf IP umgestellt.
Über unsere die Erfahrungen zur Umstellung und zu den technischen Feinheiten möchte ich im Nachfolgenden berichten:

Die Umstellung selbst war verhältnismäßig unspektakulär. Am Tag des Schaltungstermins ging plötzlich unsere LTE-Verbindung nicht mehr.
Kurz darauf folgte eine SMS der Telekom, in der sie uns die Schaltung bestätigt haben.
Also haben wir kurzerhand den alten LTE-Speedport entfernt, die SIM-Karte in den neuen Speedport Hybrid Router eingelegt.
Außerdem den NTBA entfernt und den Hybrid-Router direkt an der TAE-Dose angesteckt.
Zugangsdaten, Konfiguration, Telefonnummern für VOIP, etc. hatten wir alles bereits eingerichtet, wir waren also relativ schnell wieder online.
Dennoch hatten wir mit diversen Problemchen zu kämpfen, bei denen man nicht annehmen würde, dass sie im Zusammenhang mit einem neuen DSL-Anschluss stehen könnten:

Kein Mail-Versand möglich:
Über unsere Mailclients (Thunderbird) war kein Mailversand mehr möglich.
Die Lösung hierfür war relativ einfach und schnell gefunden:
Beim Speedport musste unser Mailserver in die Liste der vertrauenswürdigen Mailserver eingetragen werden.
Viele Mailserver wie beispielsweise gmx oder web waren bereits enthalten.
Von unserem firmeninternen Mailserver wusste die Telekom verständlicherweise jedoch nichts.

SSH-Problem (QOS) / SSH blieb „hängen“
Etwas seltsamer war, dass plötzlich unsere SSH-Verbindungen instabil wurden.
Entweder blieb die SSH-Verbindung hängen oder wurde abrupt getrennt.
Teilweise konnte auch gar keine SSH-Verbindung zu den Servern mehr aufgebaut werden.

Auf ersteres Problem waren wir gefasst. Dass das Aufteilen der Pakete parallel auf eine physikalische Leitung und auf „die Luft“ via LTE mit allen Anwendungsfällen problemlos möglich sein sollte, war uns von vorne herein suspekt. Und tatsächlich, als wir LTE komplett deaktiviert hatten, waren die Verbindungsabbrüche mit SSH weg.
Glücklicherweise bietet der Speedport Hybrid zusätzlich die Möglichkeit an, LTE für bestimmte Verbindungen auszuschließen. Man kann also einfach Port 22 von LTE ausschließen und muss LTE nicht fortan komplett deaktiviert lassen.

Das zweite Problem, dass gar keine SSH-Verbindung aufgebaut werden konnte bestand jedoch immer noch.
Ließ sich jedoch auf Server reduzieren, die bereits via IPv6 angebunden waren.

Merkwürdig daran war jedoch, dass die IPv6-Verbindung an sich funktionierte.
Der Server war Pingbar und auch der initiale Verbindungsaufbau klappte:

$ ssh -v root@serverX
debug1: Server accepts key: pkalg ssh-dss blen 433
debug1: Enabling compression at level 6.
debug1: Authentication succeeded (publickey).
Authenticated to serverX
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LANG = de_DE.UTF-8
Write failed: Broken pipe

….
Also hier brach die Verbindung ab.

Witzigerweise funktionierte die Verbindung, wenn explizit die BASH gestartet werden sollte:
$ ssh root@serverX bash -i

Auch, wenn wir SSH angewiesen haben, explizit eine IPv4 Verbindung aufzubauen, funktionierte es:
$ ssh -4 root@serverX

Wir wollten deshalb beim Verbindungsaufbau via IPv6 zunächst sicherstellen, dass keine Pakete verloren gingen.
Hierzu haben wir sowohl auf dem Server als auch auf dem Client die Pakete mittels tcpdump verfolgt:

$ tcpdump -i eth0 -vvv -tttt -n ‚port 22 and ip6‘

Und siehe da, die ersten Pakete kamen perfekt durch:
2015-06-11 16:15:18.945743 IP6 (hlim 64, next-header TCP (6) payload length: 72) 2a01:4f8:140:72c2::2.22 > 2003:62:5f2b:e207:ccb7:146f:cbe5:b810.37357: Flags [P.], cksum 0x1bdf (correct), seq 2248:2288, ack 3384, win 196, options [nop,nop,TS val 2171104204 ecr 18722466], length 40

Und ab einem bestimmten Zeitpunkt, wurden zwar Pakete vom Server versendet, vom Client jedoch nicht mehr empfangen:
———–
2015-06-11 16:15:18.984022 IP6 (class 0x10, hlim 64, next-header TCP (6) payload length: 120) 2a01:4f8:140:72c2::2.22 > 2003:62:5f2b:e207:ccb7:146f:cbe5:b810.37357: Flags [P.], cksum 0xb2b2 (correct), seq 2288:2376, ack 3680, win 216, options [nop,nop,TS val 2171104242 ecr 18722476], length 88

Und es lässt sich sogar ein Unterschied ausmachen „class 0x10“.
Diese Angabe bezieht sich auf ein sog. QOS – Quality of Service, TOS Type-of-Service bzw. mittlerweilse DSCP (Differentiated Services Code Point) genannt und bedeutet, dass dem Traffic eine Klasse zugeordnet wurde. Ziel dabei ist es, bestimmte IP-Pakete zu bevorzugen. Class 0x10 bedeutet in diesem Fall, dass das Paket nicht stark verzögert bzw. im Umkehrschluss bevorzugt werden soll.
Ist bei SSH logisch, man möchte ja beim Eintippen von Befehlen möglichst schnell das resultat sehen.

Aus irgend einem bisher uns unbekannten Grund, scheint das Routing dieser speziell gekennzeichneten Pakete beim MagentaZuhause Hybrid M nicht korrekt zu funktionieren.
Glücklicherweise kann man SSH so konfigurieren, dass es den Paketen keine Klasse mehr zuordnet.

Hierzu einfach in die Dateien
/etc/ssh/ssh_config
/etc/ssh/sshd_config
diese Zeile einfügen:
IPQoS 0x0
Und den SSH-Server neustarten:
/etc/init.d/ssh restart

Optional könnte man diese Angabe auch beim SSH-Befehl mitgeben:
$ ssh -6 -l root -o IPQoS=0x00 serverX
Oder die Zeile in der Datei ~/.ssh/config einfügen.

Aber ACHTUNG: Das Routing-Problem scheint in beiden Richtungen aufzutreten!
Also der SSH-Client muss angewiesen werden, auf QoS zu verzichten, damit die Pakete beim Server ankommen.
Und der Server muss ebenfalls darauf verzichten QoS zu verwenden, damit dessen Pakete wiederum beim Client ankommen!
Bei unseren Tests haben nicht alle SSH-Server QoS standardmäßig verwendet. Während bei den alten Debian Squeeze Servern scheinbar noch kein QoS zum Einsatz kommt, kommt bei unseren Debian Wheezy-Servern QoS zum Einsatz.

Veröffentlicht unter Markus

11. Woche

Hey Hey liebe Leser,

ich habe diese Woche weiter an unserem neuen Auftrag gearbeitet. Die Interneseite im Front-End Bereich. Ich hatte ja die komplette Seite mit modulen aufgebaut. Somit bekommt man dementsprechend viele CSS-Scriptseiten. Riesen Vorteil daraus zieh ich weil ich mich somit immer nur kleinen Klassen-Gruppen widmen muss. so kann man alle module individuell formen und bauen.

Bis zur nächsten Woche

Veröffentlicht unter Sandro

10.Woche Sandro

Guten Tag verehrte Leser und Leserinnen,

hatte euch letze Woche eine Kleinigkeit unterschlagen. Ich durfte ein PDF erstellen was auf einer Internetseite diese Woche online gegangen ist. Und was mich gefreut hatte, war dass ich sogar gelobt wurde für dieses Formular. Dadurch das diese Woche eine großes Projekt von uns online gestellt wurde, war das ein Grund darauf anzustossen. Gute Arbeit von meinen Kollegen muss ich schon sagen.

Ich hatte nun den Auftrag, die alten Urls mit den neuen Urls zu verknüpfen. Sowas ist eine Menge an Sucharbeit. Aber letztendlich lohnt sich auch diese Sucherei denn alle abgespeicherten Seiten die bei dem Endnutzer als Favorit gespeichert sind werden so automatisch auf die entsprechende neue Seite geleitet. Somit erleichtern wir jedem Endnutzer die Arbeit sich seine bestimmten Seiten wieder herauszusuchen.

Nach diesem Auftrag nahm ich mich wieder meinem Projekt an und erstellte Seite zwei und drei. Nach dem ich diese Seiten getippt hatte kam uns die Idee das ganze in eine Art Baukastensystem zu verwandeln. Ein großer Grund dafür war sicher, dass meine Klassennamen nicht ganz so professionell geklungen haben. Somit hab ich nun allein durch diese drei Seiten schon über zwölf Bausteine. Und es können noch um einiges mehr werden. Das wirklich gute aber an dieser Art ist das man sich viel leichter zurecht findet und man leichter einen Fehler findet, denn man hat nicht einen Code aus 1000 Zeilen sondern alles unterteil in so knapp 100 Zeilen. So kann man auch einen Baukasten öfter einfügen. erleichtert einem wieder Arbeit.

So das wars mal wieder für diese Woche. Also denken wir daran Baukasten sind um einiges besser als riesige Dateien. Wenn ihr euch mal vor Ort einen Blick davon machen wollt, kommt vorbei. Meldet euch an und macht mal einen kleinen Schnuppertag bei uns.

Ciao

Veröffentlicht unter Sandro

9.Woche Sandro

Hallooo Liebe Leser,

ich bins wieder, der Sandro. Hab nun eine Woche Berufsschule hinter mich gebracht. Klingt jetzt irgendwie schlimmer als es wirklich ist.

Ich erzählte euch ja, dass ich eine Internetseite komplett neu „erschaffen“ darf. Und genau hier machte ich nun weiter. Als ich mich daran machte die erste Seite gleich mobilfähig zu machen, kammen gleich ein paar Entäuschungen zum Vorschein. Sowas schaut immer leichter aus als es ist. Wenn man mal mit seinem Smartphone auf eine mobilfähige Seite geht, dann freut man sich dass alles so einfach funktioniert, alles schön eingerichtet ist und man oft alles sehr übersichtlich hat. Und genau da liegt das Problem in meinem Fall. Eigentlich sollte es mit col-md -sm -xs funktionieren aber leider klappt das nicht immer.
Um diese Begriffe kurz zu erklären: col-md -sm -xs sind CSS-Klassen, mit der man die Seite und die Inhalte optimal positionieren kann. Diese col ’s sind in zwölfer Schritten aufgeteilt. Und die Umrechnung von beispielsweise col-md zu col-sm beträgt 1:2.
Eine Internetseite nun „schnell“ mobilfähig zu machen kann schon eine längere Zeit in Anspruch nehmen. Deswegen ist es manchmal besser eine art zweite Variante der Internetseiten zu konstruieren die nur für mobile Geräte geschaffen ist.
Behalten wir bei uns das diese col ’s uns Webprogrammierer das Programmieren doch oft sehr erleichtern.

Das wars nun wieder mit einem kleinen Ausschnitt meines Wochenberichts.

Bis bald.

Veröffentlicht unter Sandro

7.Woche Sandro

Heyho liebe Leser,

ich erzählte euch doch letzte Woche von meiner PHP-Übung. Genau richtig, diese Türen-Geschichte. Deswegen konnte ich mich nicht zurückhalten und wollte mich gleich noch mehr PHP-Übungen aussetzten um es noch besser und noch schneller zu lernen. Und diese PHP-Üungen gingen bis in die Mitte der Woche als ich einen neuen Auftrag erhielt.

Erstmal sollte ich mich wieder im Front-End beweisen. Also eine Webseite von den Grundmauern erstellen. Und diesmal kam für mich wieder ein neuer Punkt hinzu: eine Sitebar einzubauen. Dieses Wort klingt so leicht und unbeschwert aber leider gehört zu diesem kleinen Wort eine Menge Quelltext, der bei den ersten paar versuchen auch nicht funktioniert. Aber nach einigem rumprobieren und der netten Hilfe der Arbeitskollegen schaffte ich es nun dann doch noch meine ‚erste‘ Sitebar zu erstellen. Neben dieser Sitebar durfte ich wieder ein paar Images und links einbauen.
Und auch bei dieser Internetseite gibt es einen Header wie auch einen Footer. Mir ist dazu letztens ein sehr praktisches Bsp eingefallen, was es Ihnen erleichtert diese Header und Footer geschichte zu verstehen. Wenn Sie in Word einen Brief schreiben möchten, kann man in die sogenannte Kopfzeile wie auch in die Fusszeile seine Anschrift, Logo oder etwas dergleichen schreiben. Und diese Zeilen bleiben auch bei einem neuen Dokument erhalten. Genauso funktioniert der Header- und Footerbereich in der Web-Programmierung.

Das wars auch schon wieder von mir. Bis bald

Veröffentlicht unter Sandro

6.Woche Sandro

Hallihallo,

ich bins da Sandro und komme hier zu meiner sechsten Woche als Umschüler bei der Firma Allbytes. Also erstmal gehts mir hier in der Firma super. Das lernen der einzelnen Programmiersprachen macht mir noch immer sehr viel Spass und dass obwohl es schon einige Punkte gab an denen ich fast verzweifelt wäre. Aber wenn man nicht mehr weiter weiß helfen einem gerne seine Arbeitskollegen.

Meine Firmeninterne App ist, was das Front-End angeht, komplett fertig. Es fehlt nur noch das Back-End. Um es einfacher zu sagen, das System damit man was mit den einzelnen Buttons oder Eingabefelder anfangen kann.

Deshalb, habe ich in dieser Woche mich in PHP geübt. Ich hatte eine kleine Aufgabe bekommen, in der ich ein Eingabefeld benötige was die eingegebene Zahl weiterverarbeitet. Es ging darum ein paar Türen darzustellen, dass sich bei dem ersten Durchlauf jede zweite Türe öffnet. Beim zweiten Durchlauf sollte sich jede dritte Tür öffnen oder die geöffnete Tür schliessen. Und das soweiter bis die eingegebene Zahl erreicht wurde. Sehr interessante Geschichte muss ich euch sagen.

So dass wars dann auch schon wieder von mir bis zur nächsten Woche. Bis dann.

Veröffentlicht unter Sandro

MySQL Datenbanken in ZF2 (ZendFramework 2)

Tag auch und hallo zu einem weiteren Kapitel im Allbytes Azubiblog!

Diese Woche ergaben sich ein paar Probleme im Bereich Umsetzung von SQL-Anweisungen in Zend Framework 2. Bei den benötigten SQL-Anweisungen handelte es sich um für meine Verhältnisse noch recht fortgeschrittene SQL-Statements und die zusätliche Umsetzung des Ganzen in ZF2 macht es nicht leichter. Neben JOIN (Verknüpfung über mehrere Tabellen hinweg) und GROUP BY (Gruppierung von Daten) musste ebenfalls die zuletzt abgespeicherte ID verwendet werden.

In PDO konnte man sich den zuletzt angelegten Primärschlüssel über die Methode „lastInsertValue()“ holen, allerdings funktionierte dies in ZF2 nicht ganz wie geplant.

In Zend Framework 2 wird der zuletzt generierte Primärschlüssel direkt bei der Datenbankverbindung (TableGateway) abgespeichert, das heißt, nachdem der Datenbankeintrag erstellt wurde, kann man über die Funktion „getLastInsertValue()“ auf die zuletzt erstellte ID zugreifen.

$this->tableGateway->getLastInsertValue();

Auch die Verwendung von JOINS oder in der WHERE-Klause befindlichen ANDs und ORs war anders als vermutet.

Für das SQL-Statement:

SELECT tabelle2.name FROM tabelle1 LEFT JOIN tabelle2 ON tabelle1.tabelle2_id tabelle2.id WHERE tabelle1.id=1;

Equivalenter ZF2 Code:

$select = new Zend\Db\Sql\Select();
$select->from('tabelle1');
$select->join('tabelle2', 'tabelle1.tabelle2_id = tabelle2.id', array('name'));
$select->where(array('tabelle1.id' => 1));
$resultSet = $this->tableGateway->selectWith($select);

Für das SQL-Statement:

SELECT * FROM tabelle1 WHERE id=? AND creation_date > ? AND creation_date < ?;

Equivalenter ZF2 Code:

$sqlObject&amp;nbsp;= new Sql($adapter);
$where = new Zend\Db\Sql\Where();
$where->equalTo('id', $id)
->and
->greaterThan('creation_date', $start_date)
->and
->lessThan('creation_date', $end_date);
$select = $sqlObject->select()->columns(['*'])->from('tabelle1')->where($where);
$statement = $sqlObject->prepareStatementForSqlObject($select);
$resultSet = new ResultSet();
$resultSet->initialize($results);

Zum Schluss hab ich glücklicherweise doch noch alles zum Laufen gebracht.

Grüße

Stefan Weiterlesen

Veröffentlicht unter Stefan

5.Woche Sandro

Guten Morgen liebe Leser,

diese Woche kommt was ganz neues zu Berichten. Meine eigene App. Die Idee ist uns firmenintern in den Sinn gekommen und deswegen berichte ich euch nur mal was ich so alles eingefügt habe. Fangen wir an.

Zu allererst habe ich einen Footer und einen Header gebaut. Vielleicht fragt ihr euch wozu man sowas benötigt. Ein Footer und ein Header sind dazu da das alle Seiten einstimmig aussehen. Ein guter Vergleich ist Facebook. Die blaue Kopfzeile hat man immer da, egal wo man sich befindet. Nachdem ich diese Codes getippt habe, ging ich nun zu meinem Body über. Ich erstellte zuerst ein Regestrierungsformular, dann ein Loginformular, es folgte ein Bestellformular und der dazu gehörige Warenkorb. Es folgte eine Kostenübersichtsliste mit einem Editierbutton. Zu allerletzt kam noch die eigene Übersichtliste. Sie soll die eigenen Bestellungen verwalten.

Was mir daran sehr gefallen hatte war, dass ich ein Logo einfügen konnte das einen Hovereffekt in sich birgt. So kann man selbst ein ernstes Thema ein wenig erheitern.

Ich wünsche einen angenehmen Tag. BB

Veröffentlicht unter Sandro

Von Passwörtern und gesalzenen MD5-Hashes

Hallo hallo,

hier folgt Woche vier. Und gestartet hab ich mal wieder mit Java-Script. Und kaum ist man 2 Stunden in der Arbeit schon kommt der nächste Auftrag. Das macht so viel Spaß, seinen eigenen Auftrag zu besitzen und etwas „richtiges“ zu arbeiten.

Kommen wir aber gleich mal zu meiner Aufgabe. Sie bestand darin ein Registrierungsformular einzufügen. Aber, wieder nur Front-End. An dieses Formular hab ich ne Weile hingebastelt bis es so aussah wie wir uns das vorstellten. Das besondere an  dieser Registrierung war, dass es kein eigenes Passwort gab sondern man bekam ein zufällig generiertes Passwort aus der Datenbank. Und deswegen erzähl ich euch eine Kleinigkeit zu Passwörtern. Die meisten Passwörter können in ein MD5-Hash verwandelt werden. Dieser MD5-Hash ist aber nicht mehr allzu sicher. Deswegen sollten man ein Funktion hinzufügen die auch als Sold bekannt ist. Diese Funktion kreiert ein paar zeichen zu dem Passwort was eingegeben wurde. Dadurch entsteht ein kompletter neuer Hash. Somit hat ein Passwort gleich eine art Schutzmantel. Hier ein kleines Beispiel wie man es in seinen Code baut:    $_POST(‚Password‘)zufälliges_anhängsel

Der zweite Teil meines Auftrags bestand darin eine Seite vorzubereiten. Das bedeutet man baut sie so auf wie sie mal werden soll und mein Kollege der für den Back-End zuständig war/ist baut seinen PHP-Code außen herum. So etwas wird gemacht wenn man zum Bsp: eine Liste aus den eingegeben Daten zusammenstellen möchte. Also bei deiner Bestellungsliste etc. Nicht bei Passwörtern.

So das wars mal wieder. Ciao

Veröffentlicht unter Sandro

MVC anhand Zend Framework 2

Willkommen zu einem weiteren Blogeintrag!

ZendFramework-logo

Diesmal hab ich mich mit einem sog. Framework beschäftigen dürfen, und nicht nur irgendeinem Framework, sondern Zend Framework 2. Es handelt sich dabei um das meistgenutzte Framework für die Webentwicklung und so wird es auch von der Allbytes verwendet. Ein Framework ist eine Art Programm, dass einem die Struktur seines eigentlichen Projekts vorgibt, weshalb es dann deutlich übersichtlicher und leichter zu managen ist.

Das zugrunde liegende Konzept ist das MVC (Model-View-Controller). Eine View ist der Teil, der später auf dem Bildschirm ausgegeben wird, daher ‚view‘, englisch für ’sehen‘. Im Controller befinden sich die nötige Logik und Abfragen, um die Funktion des Projekts zu sichern. Außerdem übergibt der Controller Werte an die View, die diese dann anzeigen lässt. Models sind funktional in sich geschlossen und bieten dem Controller Schnittstellen (z.b. zur Datenbank), die nicht jedes Mal neu definiert werden müssen.

MVC-Diagramm

Dennoch ist Zend Framework 2 sehr kompliziert und vielseitig, weshalb ich lange gebraucht habe, um darin Fuß zu fassen. Es verlangt ein gutes Grundverständnis von Php und objektorientierter Programmierung, was es für mich nicht leichter gemacht hat.

Grüße

Stefan

Veröffentlicht unter Stefan