Högis Dungeon

Und jetzt erst recht!

SMTP Firewall/Gateway mit iptables

Jüngst hatte ich das Vergnügen, einen internen Mail-Server ohne gigantische Konfigurations- oder Designänderungen über eine statische IP ans Netz anzubinden. Das Gateway spielt eine Linux-Kiste mit Postfix als SMTP-Relayer. Mit ein bisschen iptables-Magie kann man den Traffic für SMTP, Submission und IMAP bequem ins interne Netz weiterleiten:

 

Scheintod einer Netzwerkkarte

Dieses Problem ließ mir schon längere Zeit keine Ruhe, doch wollte sich einfach keine Lösung finden – bis heute.

Wir haben für unsere mobilen Nutzer hauptsächlich ThinkPad-Notebooks von Lenovo im Einsatz, eines davon das Modell X220. Zwar schon etwas in die Jahre gekommen wurde es durch den Einbau einer SSD einer Verjüngungskur unterzogen. Besitzer (und Admin) soweit glücklich und zufrieden – bis zum (scheinbaren) Tod der Ethernet-Schnittstelle. Von einem Moment auf den anderen konnte keine Netzwerkverbindung mehr via Kabel – weder über die Dock-Station noch über den integrierten Port – hergestellt werden; die Schnittstelle hing im Windows Netzwerk- und Freigabecenter schier endlos im Stadium “Netzwerkidentifizierung…” fest und bekam einfach keine IP-Adresse.

Treiber aktualisieren!

Standardvorgehensweise (zumindest unter Windows), wenn ein Netzwerk-Adapter zickt; Treiber neu installieren bzw. auf neuesten Stand bringen. Leider erfolglos.

Kabel tauschen!

Einige durchprobiert, kein Unterschied. Auch die Buchse war in optisch einwandfreiem Zustand.

An anderen Switch hängen!

Ebenso einige durchprobiert, Speed und Duplex auf automatisch, von Hand oder auf skurrile Werte geändert; kein Glück.

Das Internet nach ähnlichen Fällen abgrasen!

Zahllose Forenbeiträge gewälzt, verschiedenste Suchbegriffe verwendet, Lösungsvorschläge, Tools, Registry-Hacks ausprobiert; hat die Karte kalt gelassen.

Tja, dann neu aufsetzen!

Die letzte Verzweiflungstat wenn nicht mal mehr das allwissende Internet hilft. Also Windows 7 neu drauf gebügelt und siehe da: das Problem besteht noch immer!!^1! In-Place Upgrade auf Windows 10 gemacht (denn das hilft ja bekanntlich immer); vollkommen egal, kein Netzwerk!

Dann liegt wohl ein Hardware-Defekt vor…

…sollte man meinen. Zum Glück wurde das Gerät nicht aus Wut und Verzweiflung entsorgt, denn man lese gespannt weiter 

An der falschen Stelle gesucht

Jetzt schlägt’s aber Dreizehn!  Als Vollbluttechniker kann ich sowas nicht auf sich beruhen lassen, es muss doch eine vernünftige Erklärung – und vor allem Lösung – für dieses Verhalten geben.

In einer ruhigen Minute konnte ich das Problem noch weiter eingrenzen; vergibt man dem Adapter eine statische IP-Adresse kommt man wieder ins Netz! Ok, daran hätte man schon früher denken können, aber zumindest ist nun gewiss, dass die Karte keinen physischen Defekt ausweist. Also ein Problem mit dem DHCP…?  Unser Windows DHCP-Server verrichtet aber nun schon seit Jahren unbeschwert seine Dienste und kein anderes IP-fähiges Gerät im selben Netz ist betroffen  Na was soll’s, dann schließen wir das eben auch noch aus. Also schnell einen DHCP-Server aufs Analyse-Laptop gepackt und das Problemkind direkt angestöpselt… und es klappt! 

Ok, eine heiße Spur, endlich! Jetzt will ich wissen, was sich auf der Leitung tut. Also etwas tiefer in die Trickkiste greifen und den guten alten Netzwerk-Sniffer auspacken, Gerät wieder am nicht-kooperierenden Netzwerk angeschlossen und mal auf BOOTP/DHCP gefiltert:

23-05-_2016_15-06-38

Ok, so weit so gut; wir haben einen DHCP Request, ein Offer vom Server mit einer IP im richtigen Netz und…

23-05-_2016_15-06-51

…ein NAK?!  Nach jedem Request/Offer?!

23-05-_2016_15-07-14

Und das Spiel wiederholt sich, mehrere hundert bis tausend Male; eine DHCP-Endlosschleife!

Na super! Jetzt wissen wir zumindest mal was das eigentliche Problem ist; unser DHCP-Server bietet dem Client scheinheilig eine gültige Adresse an, der Client möchte diese annehmen, wird nun jedoch abgelehnt (NAK) und der Zyklus beginnt von neuem. Anstatt bei der nächsten Anfrage eine neue, freie Adresse anzubieten, gibt der Server nun immer wieder dieselbe zurück und verweigert dem Client die finale Zusage. Endlosschleife. Gibt scheinbar nicht mal einen Timeout-Mechanismus, die Netzwerkidentifizierung steckt in diesem Stadium mehrere Minuten (und wahrscheinlich auch Stunden) fest.

Die Lösung

Also ist doch unser DHCP-Server Schuld an diesem Debakel, wer hätte das gedacht!  Jetzt müssen wir nur noch der Lösung auf die Spur kommen. Also mal am Server die Managementkonsole gestartet und die vorhandenen Leases inspiziert. Da sticht plötzlich unter den Reservierungen die Adresse hervor, welche dem Client permanent angeboten wird:

23-05-_2016_14-46-54

Äh, sowohl der Hostname als auch die MAC-Adresse gehören nicht zu dem betroffenen Client…  Egal, das ist die verdächtige IP, also Reservierung auf gut Glück kicken und das Laptop neu anstöpseln:

23-05-_2016_14-59-54

Hey, sieh’ an; eine neue Adresse wird angeboten! 

23-05-_2016_15-00-27

Und wir dürfen sie behalten!  Mysterium gelöst!

Schlusswort

Hin und wieder stößt man in der IT auf Probleme der Kategorie “Also das habe ich ja noch nicht erlebt…”, recherchiert stundenlang, grübelt endlos und erlangt dann schließlich doch noch die Erleuchtung und findet die Lösung. Ein gutes Gefühl 

Quellen

Projektvorstellung: ScpToolkit

Wow, über ein halbes Jahr ist nun schon wieder vergangen, seit ich mein erstes richtig großes Community-Projekt in die Welt gepflanzt habe. Passend zu meiner schier grenzenlosen Trägheit folgt nun auch der erste Blog-Beitrag dazu hier  Nun, besser spät als nie: ich präsentiere das ScpToolkit!

Was bitte?

Ok, eines gleich vorweg: das “Scp” steht nicht für Secure, Contain, Protect sondern für Scarlet.Crush Productions, eine fiktive Herstellerfirma des ursprünglichen Autors des ScpServer Projekts und dessen Vorgängern. Die Software dient auch nicht dazu Verbindung zu übernatürlichen Wesen herzustellen bzw. würde ich auch nicht darüber berichten dürfen, wenn es so wäre  Der ursprüngliche Autor Bruce James (zumindest ist das der Name des Besitzers der digitalen Signatur) hat aus unbekannten Gründen Anfang 2014 dem Projekt den Rücken zugekehrt, seit Juli 2015 sitze ich am Ruder 

Worum geht es?!

Oh, natürlich! Es handelt sich bei dem Projekt um einen Windows Treiber für Sony DualShock 3 bzw. DualShock 4 Controller. Die Software ersetzt hierbei den für die über USB angeschlossenen Controller Standardtreiber hidusb.sys durch den generischen WinUSB.sys und übernimmt so die volle Kontrolle über die angeschlossenen Controller. Die gesendeten Eingangssignale (sog. HID Reports) werden anschließend in ein Xbox 360 kompatibles Format umgewandelt und an einen virtuellen Xbox 360 Controller gesendet, welcher wiederum von XInput-kompatiblen erkannt und genutzt werden kann. Spiele sehen also nur einen Xbox-Controller und dessen Features, während in Wahrheit ein Sony-Controller mit dem System verbunden ist.

Wieso?

Da ich ohne Spielkonsolen aufgewachsen bin (ein Trauma, ich weiß ) und erst über Emulatoren am PC in den Genuss zahlreicher Klassiker gekommen bin, musste auch irgendwann ein klassisches Gamepad statt Maus und Tastatur her, um voll in den authentischen Genuss von 2D-Spielen kommen zu können. Hierfür hat der typische Nullachtfuffzehn-Controller von Gamestop lange gute Dienste geleistet. Irgendwann im Sommer 2015 kam mir schließlich in den Sinn, das ganze etwas professioneller anzugehen und auf drahtlos umzusteigen, damit das Kabelgewirr in der Gaming-Höhle vom Boden weg kommt. Also bin ich eines sonnigen Tages guter Dinge in den Blöd-Markt marschiert und habe mir den erstbesten Wireless Controller geschnappt, zufällig ein Nachbau des DualShock 3 für die Playstation 3. Steht ja Bluetooth drauf, muss also auch am PC unter Windows funktionieren – typisches Consumer-Verhalten eben  Nun, leider war dem nicht so.

Nachdem ich durch herumfummeln mit den Bluetooth-Einstellungen und fehlgeschlagenen Paarungsversuchen des Controllers mit dem Host selbst nicht wirklich weiter gekommen bin, musste mal wieder das Internet herhalten. Ziemlich schnell bin ich auf einen Treiber namens MotioninJoy gestoßen. Ich linke aus zweierlei Gründen nicht darauf; erstens ist es bekannt als Ad- und/oder Spyware, zweitens ist die zugehörige Website seit Monaten down und, äh, drittens funktioniert es mit neueren Versionen von Windows nicht mehr allzu gut. Alternativ hierzu bin ich dann ziemlich schnell auf Scarlet.Crushs Project gestoßen, welches ich wie gesagt übernommen habe.

Und nun?

In dem vergangenen halben Jahr hat sich einiges getan; zu allererst wurde die Codebasis mittels ReSharper ordentlich aufgeräumt und ausgedünnt, mit massenhaft Kommentaren versehen, das zu Grunde liegende .NET Framework auf eine aktuelle Version gehoben, kompiliert, experimentiert und vieles mehr. Nach fast 1000 Commits wage ich zu behaupten, den Code relativ gut zu kennen. Mittlerweile gibt es sogar ein schmuckes Setup erstellt mittels Advanced Installer. Aber es gibt noch viel zu tun:

  • Bluetooth-Konnektivität zu Nachbau-Controllern von diversen chinesischen Drittanbietern (“PANHAI”, “VINS”, “GHIC”, …) funktioniert nicht oder nur eingeschränkt. Der aktuelle im Projekt inkludierte Bluetooth-Stack ist sehr rudimentär und emuliert die Funktionalität der PS3 nicht gut genug um diese gefälschten Controller zu unterstützen. Als kompletter Bluetooth-Noob komme ich diese Materie betreffend nur sehr langsam voran; aktuell vertiefe ich mich in das Buch Bluetooth Low Energy: The Developer’s Handbook um die Probleme hoffentlich ohne weiteres Reverse Engineering beheben zu können. Mal sehen 
  • Mapping-Profile: ich habe begonnen, die Funktionalität, Buttons und Sticks auf andere Kommandos umzubiegen neu zu implementieren. Eine furchtbar unsinnige Arbeit aus Sicht der Programmierung… mal überlegen ob ich das durchziehe 
  • Xbox 360 Emulator: es gibt noch ein paar bekannte Bugs im Scp Virtual Bus bzw. Xbox 360 Emulator Treiber. Einer davon wäre, dass man keinen legitimen (physischen) Microsoft Xbox 360 Controller mehr benutzen kann, wenn der Emulator aktiv ist. Leider ist hier das Thema ähnlich wie beim Bluetooth-Stack; ich habe keine bis wenig Erfahrung mit der Entwicklung von Kernel-Mode Treibern. Hierbei werde ich mir – in welcher Form auch immer – Unterstützung suchen müssen.

Fortsetzung folgt definitiv 

MDT Zerotouch Konfiguration

Das Microsoft Deployment Toolkit ist in Kombination mit den Windows Deployment Services eine günstige und flexible Methode, um eine oder mehrere Windows-Installationen im Netzwerk auszurollen. Vergangene Woche kam ich in die Verlegenheit, einen Arbeitsplatz an einem unserer Außenstandorte aufgrund von merkwürdigen Problemen mit einer Software neu aufsetzen zu dürfen. Wegen einem einzigen PC den halben Tag im Auto zu sitzen reizt nicht wirklich, also mal schnell eine VM mit Windows Server 2008 R2 und der WDS-Rolle aus dem Boden gestampft. Anschließend noch das aktuelle MDT und Windows AIK/ADK heruntergeladen, installiert und bereit zur Konfiguration.

Anleitungen zum MDT in Deutsch und Englisch gibt es im Netz haufenweise; in meinem Fall wollte ich aber explizit eine sogenannte Zerotouch-Installation. Hierbei wird das Boot-Image so vorbereitet, dass nach dem PXE-Boot über das Netzwerk keine weitere Interaktion am Endgerät selbst mehr notwendig ist und das Betriebssystem sich bis zum finalen Desktop vollständig autonom installiert.

Zerotouch-Konfiguration20-06-_2015_15-35-20

Die bootstrap.ini muss um ein paar wenige wie unten beschriebenen Zeilen adaptiert werden um einen fehlerlosen Start des Prozesses zu ermöglichen. Die Bedeutung der einzelnen Direktiven ist als Kommentar eingefügt und kann natürlich an die eigenen Anforderungen angepasst und erweitert werden.

bootstrap.ini

Rules

20-06-_2015_17-41-15Nun kommen wir zu dem Teil, den man sich etwas schwer merken kann  In den Eigenschaften des Deployment-Shares muss man die im Tab “Rules” enthaltenen Direktiven wie gelistet anpassen und erweitern:

Wie im Kommentar erwähnt muss sich die ID der Tasksequenz mit jener decken, die automatisch gestartet werden soll:

20-06-_2015_15-05-28

Ich erspare mir an dieser Stelle die Beschreibung einer vollständigen Tasksequenz, da man die Details wie gesagt Zuhauf im Netz findet. Ein paar kleine Anpassungen sind allerdings von Vorteil.

Custom Tasks

Unter den “Custom Tasks” fügt man nun noch folgende vom Typ “Run Command Line” ein, um nach Abschluss der Installation mittels RDP auf die Maschine zugreifen zu können.

RDP aktivieren #1

RDP aktivieren #2

RDP aktivieren #3

Dies sollte dann so aussehen:

20-06-_2015_15-23-08

Unattend.xml

Die Windows-Antwortdatei Unattend.xml sollte mindestens um die gezeigten Optionen erweitert werden, um bei der unbeaufsichtigten Installation keine Fehlermeldungen zu provozieren. Wird beispielsweise kein Produktschlüssel angegeben bricht die Installation ab und wird zwangsläufig in einer Boot-Schleife enden; nicht zielführend 

20-06-_2015_17-45-06

KMS-Produktschlüssel eingeben:

20-06-_2015_17-47-43

Zeitzone setzen:

20-06-_2015_17-48-36

Spracheinstellungen setzen:

20-06-_2015_17-51-20

Das wäre es gewesen, alles speichern und F12 drücken 

Intel: Evil Inside

Anfang November hatten wir in einem unserer Standorte einen (längst überfälligen) PC-Lifecycle-Tausch; alle verbleibenden Windows XP Kisten flogen endgültig raus und wurden durch aktuelle HP ProDesk 600 G1 Small-Form-Factor-PCs ersetzt. Klassische Vorgehensweise: die Geräte werden fertig aufgesetzt, auf unsere Umgebung angepasst ausgeliefert und unter Berücksichtigung des alltäglichen Arbeitszyklus’ des Personals in den jeweils betroffenen Abteilungen aufgestellt. Der Tausch lief soweit absolut sauber und problemlos ab; nach den üblichen Hürden des Umstiegs von der bekannten XP auf Windows 7 Oberfläche lief der Laden sprichwörtlich wieder. Nur einen Tag nach unserer Abreise (wann sonst; solange Techniker vor Ort sind läuft alles scheinheilig gut ) fingen die Probleme an…

Die Symptome

Plötzlich tauchten die merkwürdigsten Probleme auf, welche mit einem plumpen Rechner-Tausch scheinbar nicht viel gemein haben konnten. Zuerst gingen die Drucker reihenweise offline; Verkabelung, Print-Server-Konfiguration und Stromversorgung jedoch intakt. Klagen über massive Performance-Probleme wurden eingereicht; das Hochfahren und Anmelden dauert ewig, Applikationen hingen und wurden nahezu un-bedienbar, schließlich hatte auch noch zu allem Überfluss plötzlich die WAN-Verbindung unregelmäßige Aussetzer, was Internet und Rechenzentrums-Dienste stark beeinträchtigte. Ein Wochenende verstrich und trotz penibler Prüfung sämtlicher verdächtigen Komponenten (File-Server spinnt womöglich und überlastet das Netzwerk mit Synchronisation von Profil-Daten? Sehr unwahrscheinlich, laut Netzwerkmonitor langweilte sich die Maschine) besserte sich die Lage um kein Quäntchen. Fernwarten ist nahezu unmöglich, da die WAN-Leitung trotz gemeinsamer Analyse mit dem ISP immer noch massiv Pakete verlor. Also Werkzeuge eingepackt und den Standort besucht.

Die Diagnose

Da sich an der Peripherie nichts signifikantes verändert hatte, lag der Fokus der Analyse an den Komponenten des Netzwerks. Zuerst viel auf, dass der Link von WAN-Modem zu Core-Switch im 100 Half-Duplex-Modus lief, trotz Auto-MDI-X. Setzen beider Seiten auf 1000 Full brachte nur geringfügige Verbesserung. Blieb doch noch das massive Problem verborgen im eigenen LAN. Also schnappte ich mir das Patch-Kabel eines betroffenen Druckers, schloss mein Notebook an und ließ den Packet-Sniffer auf das Netz los:

ICMPv6 Mutlicast Flood

Ja was zum Kuckuck…  ICMPv6 Multicast? Fast eine Million Pakete in nur ~3 Sekunden? Wo kommt das denn her!?

Die Suche

OK, mit den IPv6-Adressen als Quelle kommen wir nicht weit, da es sich hierbei um automatisch vergebene Link-Local-Adressen handelt. Doch halt, diese beinhalten doch die MAC-Adresse der Quell-NIC? Und mit der MAC-Adresse und einem Blick in die Inventar-Datenbank lässt sich der Standort der Geräte ermitteln!

IPv6 to MACHa!  Damit hatten wir den Standort! Und natürlich waren es die Büros, welche alle neue Rechner spendiert bekamen…

MAC-AdresseDie Ursache

Die Problemkinder waren gefunden, nun ging es darum herauszufinden, warum uns diese in die Suppe spukten. Direkter Verursacher ist nun wohl offensichtlich die Netzwerkkarte, also mal etwas mehr darüber in Erfahrung gebracht:

Intel-NIC alt

Hm, Intel i217-LM und ICMPv6 Multicast, was sagt denn das Internet dazu

Interessant, der Artikel beschreibt exakt das hier beobachtete Verhalten. Nur ist dieser vom Februar 2014, der ausgelieferte Treiber jedoch von Dezember 2013!  Also schnell das aktuellste Paket von der Intel-Homepage heruntergeladen, installiert und siehe da; sofort um einige Features reicher und einige Monate aktueller:

Intel-NIC neuNachdem diese Korrektur auf allen Maschinen angewandt wurde, habe ich diese wieder in den Standby versetzt und das Netz beobachtet.

Der Spuk war vorbei! 

Die Moral von der Geschicht’

Treiber pflegt man, oder nicht 

Die Drucker konnten übrigens nur durch einen Hard-Reset (Stromstecker ziehen) wieder zur Kooperation gezwungen werden, da sich durch den Flood die Firmware komplett aufgehängt hatte. Nun drucken sie wieder wie am ersten Tag 

Upd4tes!!^1!

Hey ho! Ja, es gibt mich noch  Habe soeben auf WordPress 4.0 aktualisiert, hoffentlich funktioniert noch alles…  Anschließend wage ich den Schritt die Wiki-Engine mal wieder auf Stand zu bringen. Drückt mir die Daumen; bei meinem Extreme-Customizing läuft das sicher nicht problemlos ab, wir werden sehen  Sollte das Wiki also in den kommenden Tagen Stunden offline sein oder merkwürdig aussehen oder gar unbedienbar sein: tja, Geduld 

Cinematic Mod 10.90 gelöscht

Seit dem SteamPipe Update von VALVe hat sich für viele Mod-Entwickler – welche auf Basis der Source-Engine entwickeln – einiges geändert. Davon betroffen ist auch FakeFactory’s Cinematic Mod, eine unglaubliche Modifikation die Half-Life 2 in neuem zeitgemäßen Glanz erstrahlen lässt. Seit Release der Version 10 habe ich angefangen, den Entwickler zu unterstützen indem ich mit meinem Webserver als Download-Mirror eine Alternative zu den verhassten One-Click-Hostern wie RapidShare oder anderem Müll, der das Herunterladen massiv erschwert zur Verfügung stelle.

Durch das SteamPipe Update werden alle Versionen vor der Cinematic Mod 2013 unspielbar, daher habe ich nun beschlossen, meinen Mirror zu entfernen. Als nostalgischer Wermutstropfen folgt nun ein Screenshot mit den Download-Statistiken seit dem Bereitstellen im Jahre 2010 

20-07-2014 12-02-47

Mit Spannung erwarte ich das Release der Version 2013! 

STRIFE – “Dark” Track

Vor gut einem Monat hat Ross Scott sein hervorragendes Video zum antiquierten DOOM-Engine basierenden Spiel Strife herausgebracht. Als Reaktion auf seine Aufforderung, die enthaltenen Musikstücke in ein konsistentes Format wie MP3 umzuwandeln, habe ich ein kleines Demo-Video erstellt. Zu hören ist der Titel “Dark”, welcher mit dem bereits erwähnten Software MIDI-Synthesizer VirtualMIDISynth und den GMRBasico1.1 SoundFonts erstellt wurde:

Synthesia und VirtualMIDISynth zur Zusammenarbeit zu bewegen ist einfach und gut dokumentiert.