
[{"content":"","date":"6 Januar 2026","externalUrl":null,"permalink":"/tags/linux/","section":"Tags","summary":"","title":"Linux","type":"tags"},{"content":"","date":"6 Januar 2026","externalUrl":null,"permalink":"/","section":"Networkstudents Blog","summary":"","title":"Networkstudents Blog","type":"page"},{"content":"","date":"6 Januar 2026","externalUrl":null,"permalink":"/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":" Vielleicht steht bei dir irgendwo ein Raspberry Pi im Keller, entweder als Testsystem oder sogar als kleines Produktivsystem. Auch wenn man Updates gerne aufschiebt, kommt irgendwann der Moment, in dem das Betriebssystem auf den neuesten Stand gebracht werden muss. Genau dafür habe ich dir hier eine kurze und einfache Anleitung zusammengestellt.\nDein System vorbereiten # Zuerst loggst du dich auf deinem Raspberry Pi oder Debian-Server ein und machst dich zu root:\nsudo -i # oder alternativ: su - Anschließend schauen wir, welches Release aktuell installiert ist:\nawk -F= \u0026#39;$1 == \u0026#34;PRETTY_NAME\u0026#34; { printf \u0026#34;Release: %s\\n\u0026#34;, $2 }\u0026#39; /etc/os-release Alle Pakete aktualisieren # Bevor wir das eigentliche Upgrade durchführen, solltest du alle aktuellen Pakete aktualisieren:\napt update \u0026amp;\u0026amp; apt upgrade -y \u0026amp;\u0026amp; apt dist-upgrade -y \u0026amp;\u0026amp; apt autoremove -y Die Paketquellen auf Trixie umstellen # Damit dein System die neuen Pakete für Debian Trixie findet, musst du die source.list anpassen. Ersetze darin „bookworm“ durch „trixie“:\nperl -i.bak -pe \u0026#39;s/bookworm/trixie/\u0026#39; /etc/apt/sources.list perl -i.bak -pe \u0026#39;s/bookworm/trixie/\u0026#39; /etc/apt/sources.list.d/raspi.list System auf Trixie upgraden # Jetzt aktualisieren wir noch einmal die Paketlisten und führen das Upgrade durch:\napt update \u0026amp;\u0026amp; apt full-upgrade Während des Upgrades kann es vorkommen, dass du gefragt wirst, ob du Konfigurationsdateien ersetzen oder behalten möchtest. Wenn du dir unsicher bist, behalte deine Dateien oder wähle die vorgeschlagene Standardoption, dass ist in der Regel die sicherere Wahl. Bei meinem Raspberry Pi 3B hat das Upgrade circa 25min gedauert, bei meinem Raspberry Pi 5 circa 10.\nNeustart und Kontrolle # Nach dem Upgrade startest du dein System neu und entfernst noch alte Pakete:\nreboot sudo -i apt autoremove -y Jetzt kannst du wieder prüfen, welches Release jetzt läuft:\nawk -F= \u0026#39;$1 == \u0026#34;PRETTY_NAME\u0026#34; { printf \u0026#34;Release: %s\\n\u0026#34;, $2 }\u0026#39; /etc/os-release Wenn alles geklappt hat, solltest du nun Debian Trixie sehen.\nHinweis zu Affiliate-Links # Um meine Arbeit und Inhalte zu unterstützen, stelle ich dir einen Affiliate-Link zur Verfügung.\nSolltest du über diesen Link ein Produkt bei Netcup mieten, erhalte ich eine kleine Provision.\nFür dich entstehen dadurch keine zusätzlichen Kosten.\nTransparenz ist mir wichtig:\nDieser Beitrag dient ausschließlich Informationszwecken.\nDie Nutzung des Affiliate-Links ist vollkommen freiwillig.\nVielen Dank, falls du dich entscheidest, mich auf diesem Weg zu unterstützen!\n","date":"6 Januar 2026","externalUrl":null,"permalink":"/posts/update-debian-bookworm/","section":"Posts","summary":"","title":"So aktualisierst du Debian Bookworm auf Debian Trixie","type":"posts"},{"content":"","date":"6 Januar 2026","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"1 Januar 2026","externalUrl":null,"permalink":"/tags/networking/","section":"Tags","summary":"","title":"Networking","type":"tags"},{"content":"","date":"1 Januar 2026","externalUrl":null,"permalink":"/tags/security/","section":"Tags","summary":"","title":"Security","type":"tags"},{"content":"","date":"1 Januar 2026","externalUrl":null,"permalink":"/tags/ssh/","section":"Tags","summary":"","title":"Ssh","type":"tags"},{"content":"SSH ist für viele Administratoren und Entwickler ein alltägliches Werkzeug. Meist wird es genutzt, um sich per Kommandozeile auf einem Server anzumelden. Was viele jedoch unterschätzen: SSH kann deutlich mehr als nur ein Login-Tool sein.\nMit SSH-Tunneln lassen sich Dienste sicher erreichbar machen, ohne Ports im Internet zu öffnen. Genau darum geht es in diesem Artikel.\nVielleicht stellst du dir jetzt die Frage: Wozu brauche ich überhaupt SSH-Tunnel?\nDie Antwort ist einfach: Sicherheit, Flexibilität und Kontrolle.\nWarum überhaupt SSH-Tunnel? # In der Praxis gibt es zwei sehr häufige Szenarien:\n1. SSH Tunnel (Local Port Forwarding) # Du möchtest von deinem eigenen Rechner auf einen Dienst zugreifen, der nur lokal auf einem Server läuft, zum Beispiel:\neine MySQL- oder PostgreSQL-Datenbank (localhost:3306 oder localhost:5432) ein interner Webdienst eine Admin-Oberfläche, die bewusst nicht öffentlich erreichbar ist Mit einem SSH-Tunnel wird dieser entfernte Dienst verschlüsselt auf einen lokalen Port deines Rechners weitergeleitet. Für deine Anwendung sieht es so aus, als würde der Dienst lokal laufen – tatsächlich läuft er aber auf dem Server.\n2. SSH Reverse Tunnel (Remote Port Forwarding) # Hier ist die Situation genau andersherum:\nEin Rechner oder Server ist nicht direkt aus dem Internet erreichbar z. B. wegen NAT, CGNAT, Firewall oder fehlender Portfreigaben typisch für Heimserver, TrueNAS, Home Assistant oder IoT-Systeme Der interne Server baut aktiv eine SSH-Verbindung zu einem öffentlichen Server auf. Über diesen öffentlichen Server kannst du anschließend von außen zurück auf dein internes System zugreifen.\nSSH Tunnel (Local Port Forwarding) in der Praxis # Stellen wir uns ein klassisches Szenario vor:\nDu möchtest auf einem Server eine Datenbank überprüfen. Die Datenbank läuft aus Sicherheitsgründen nur auf localhost und ist nicht öffentlich erreichbar.\nDu nutzt auf deinem Rechner zum Beispiel DBeaver, ein kostenloses und weit verbreitetes Datenbank-Tool.\nWenn du jetzt einfach versuchst, dich mit der öffentlichen IP-Adresse des Servers zu verbinden, funktioniert das nicht – und das ist auch gut so.\nDie Datenbank direkt ins Internet zu stellen wäre ein unnötiges Sicherheitsrisiko.\nDie bessere Lösung: SSH Tunnel # Mit einem SSH-Tunnel leitest du einen lokalen Port auf deinem Rechner an einen lokalen Port auf dem Server weiter.\nssh -N -L localhost:3306:127.0.0.1:3306 root@dein-server.de Erklärung der Parameter # ssh\nStartet die SSH-Verbindung.\n-N\nEs wird kein Kommando auf dem Server ausgeführt. Die Verbindung dient ausschließlich dem Tunnel.\n-L (Local Port Forwarding)\nSyntax:\n[lokale Adresse]:[lokaler Port]:[Zieladresse]:[Zielport]\nIn unserem Beispiel:\nlocalhost:3306 → lokaler Port auf deinem Rechner\n127.0.0.1:3306 → Datenbank-Port auf dem Server\nroot@dein-server.de\nBenutzer und Zielserver für die SSH-Verbindung\nNutzung in DBeaver # Nachdem der Tunnel aufgebaut ist:\nöffnest du DBeaver\nlegst eine neue Datenbankverbindung an\nals Host trägst du localhost ein\nals Port 3306\nDBeaver verbindet sich nun mit deinem lokalen Port, der verschlüsselt über SSH zur Datenbank auf dem Server weitergeleitet wird.\nDie Datenbank selbst bleibt weiterhin nicht öffentlich erreichbar.\nSSH Reverse Tunnel (Remote Port Forwarding) # Jetzt drehen wir das Szenario um.\nAngenommen, du möchtest von unterwegs auf die TrueNAS Web-UI zugreifen, die bei deinen Eltern im Heimnetz läuft.\nProbleme dabei:\nkeine öffentliche IPv4-Adresse\nCGNAT oder NAT beim Internetanbieter\nkeine Portweiterleitungen möglich oder gewünscht\nLösung: Reverse SSH Tunnel # Der TrueNAS Server im Heimnetz baut aktiv eine SSH-Verbindung zu einem öffentlichen Server (z. B. einem VPS) auf.\nDer öffentliche Server stellt dann einen Port bereit, über den du auf das interne System zugreifen kannst.\nssh -N -R 0.0.0.0:80:localhost:80 root@dein-server.de Erklärung der Parameter # -R (Remote Port Forwarding)\nSyntax:\n[öffentliche Adresse]:[öffentlicher Port]:[lokale Adresse]:[lokaler Port]\nIn diesem Beispiel:\n0.0.0.0:80 → Port 80 auf dem öffentlichen Server\nlocalhost:80 → Web-UI von TrueNAS im Heimnetz\n-N\nAuch hier wird kein Kommando ausgeführt, nur der Tunnel aufgebaut.\nWichtig zu wissen # Damit 0.0.0.0 funktioniert, muss auf dem öffentlichen Server in der SSH-Konfiguration Folgendes gesetzt sein:\nGatewayPorts yes oder GatewayPorts clientspecified\nAndernfalls ist der Port nur lokal auf dem Server erreichbar (127.0.0.1).\nErgebnis # Du kannst nun im Browser die IP oder Domain deines öffentlichen Servers aufrufen.\nDie Verbindung wird automatisch über den SSH-Tunnel zur TrueNAS Web-UI im Heimnetz weitergeleitet – ohne Portfreigabe am Router.\nKombinierter SSH Tunnel (Best Practice) # In der Praxis ist es oft sinnvoll, beide Varianten zu kombinieren, um den Zugriff noch weiter abzusichern.\nTypisches Szenario # Dein Laptop baut einen SSH Tunnel zum öffentlichen Server auf\nDein Heimserver (z. B. TrueNAS) baut einen Reverse SSH Tunnel zum gleichen Server auf\nDer öffentliche Server fungiert nur als Vermittler\nErgebnis:\nDie Web-UI ist nicht öffentlich im Internet sichtbar\nDer Zugriff ist nur möglich, wenn beide SSH-Verbindungen aktiv sind\nKein direkter Zugriff von außen\nDieses Setup eignet sich hervorragend für:\nHeimserver\nWartungszugriffe\ntemporäre Admin-Zugänge\nSicherheitshinweise und Best Practices # Nutze SSH-Keys statt Passwörter\nBeschränke SSH-Zugriffe per Firewall\nVerwende nach Möglichkeit nicht privilegierte Ports\nBeende Tunnel nach der Nutzung\nFür dauerhafte Tunnel: systemd Dienst verwenden\nLogs regelmäßig prüfen\nSSH-Tunnel sind extrem mächtig – aber nur dann sicher, wenn sie bewusst eingesetzt werden.\nFazit # SSH-Tunnel und Reverse SSH-Tunnel sind einfache, aber sehr wirkungsvolle Werkzeuge, um Dienste sicher erreichbar zu machen.\nDu vermeidest offene Ports, reduzierst Angriffsflächen und behältst die volle Kontrolle über deine Infrastruktur.\nGerade für:\nDatenbanken\nAdmin-Oberflächen\nHeimserver\nWartungszugriffe\nsind SSH-Tunnel oft die sauberste und sicherste Lösung.\nHinweis zu Affiliate-Links # Um meine Arbeit und Inhalte zu unterstützen, stelle ich dir einen Affiliate-Link zur Verfügung.\nSolltest du über diesen Link ein Produkt bei Netcup mieten, erhalte ich eine kleine Provision.\nFür dich entstehen dadurch keine zusätzlichen Kosten.\nTransparenz ist mir wichtig:\nDieser Beitrag dient ausschließlich Informationszwecken.\nDie Nutzung des Affiliate-Links ist vollkommen freiwillig.\nVielen Dank, falls du dich entscheidest, mich auf diesem Weg zu unterstützen!\n","date":"1 Januar 2026","externalUrl":null,"permalink":"/posts/ssh-tunnel/","section":"Posts","summary":"","title":"SSH Tunnel und Reverse SSH Tunnel – sicherer Zugriff ohne offene Ports","type":"posts"},{"content":"","date":"19 April 2025","externalUrl":null,"permalink":"/tags/esp32/","section":"Tags","summary":"","title":"Esp32","type":"tags"},{"content":"","date":"19 April 2025","externalUrl":null,"permalink":"/tags/tasmota/","section":"Tags","summary":"","title":"Tasmota","type":"tags"},{"content":"Es passiert öfter, als man denkt: Man hat alles richtig eingerichtet, Tasmota läuft, die Steckdosen sind verbunden – und plötzlich, ohne Vorwarnung, ist die Verbindung weg. Genau das ist mir neulich passiert, und es stellte sich heraus, dass es eine ziemlich einfache, aber unterschätzte Ursache gab: Der WLAN-Kanal!\nWas war los? # Über Nacht hatte mein WLAN-Router den Kanal gewechselt – und das nicht einfach auf einen anderen Kanal im Standardbereich, sondern auf Kanal 13. Zunächst dachte ich, es sei nur ein temporäres Problem, aber nachdem die Verbindung meiner Tasmota-Steckdosen immer noch nicht wiederhergestellt war, musste ich ein bisschen tiefer graben.\nDas Problem liegt darin, dass Tasmota-basierte Geräte (wie meine Steckdosen) oft nur die Kanäle 1 bis 11 des 2,4 GHz-Bereichs unterstützen. Und das bedeutet, dass Kanäle wie Kanal 12 und 13, die in einigen Ländern wie Europa verfügbar sind, von vielen Geräten (einschließlich der ESP8266- und ESP32-basierten Module in Tasmota) nicht unterstützt werden.\nDer Lösungsweg # Was musst du also tun, wenn deine Tasmota-Steckdosen plötzlich offline gehen? Ganz einfach: Stelle sicher, dass der Kanal deines WLAN-Routers wieder auf einen der Kanäle im Bereich 1 bis 11 eingestellt ist.\nIn meinem Fall habe ich den Router auf Kanal 1 gesetzt, weil Kanal 11 für mein Zigbee-Netzwerk reserviert ist (damit ich keine Interferenzen zwischen Zigbee und WLAN bekomme). Wenn du ebenfalls Zigbee nutzt, solltest du sicherstellen, dass dein WLAN-Kanal nicht mit dem Zigbee-Kanal kollidiert.\nWarum Kanal 1 und nicht Kanal 11? # Kanal 1 ist ein Klassiker und sorgt für gute Kompatibilität in den meisten Netzwerken.\nKanal 11 sollte vermieden werden, wenn du Zigbee auf diesem Kanal betreibst, da es sonst zu Interferenzen zwischen den beiden Netzwerken kommen kann.\nWie du deinen Kanal im UniFi Access Point änderst: # Logge dich in die UniFi Controller-Software ein.\nWähle deinen Access Point aus und gehe zu den WLAN-Einstellungen.\nStelle den Kanal auf 1 (oder einen anderen Kanal zwischen 1 und 11) ein.\nSpeichern und fertig!\nNach diesem kleinen Schritt war meine Verbindung wieder stabil und alles lief wie gewohnt.\nFazit # Es ist manchmal so einfach, dass man gar nicht auf die Idee kommt: Ein WLAN-Kanalwechsel kann viele Probleme verursachen, vor allem bei Geräten, die nicht alle Kanäle unterstützen. Achte darauf, dass du einen kompatiblen Kanal nutzt, um Interferenzen zu vermeiden – und wenn du Zigbee betreibst, stelle sicher, dass dein WLAN-Kanal nicht im Konflikt mit deinem Zigbee-Kanal steht.\nWer hätte gedacht, dass ein einfacher Kanalwechsel so viel bewirken kann? Es gibt immer eine Lösung – man muss nur wissen, wo man suchen muss.\n💡 Unterstützen ohne Mehrkosten # Um meine Arbeit und Inhalte zu unterstützen, stelle ich dir einen Affiliate-Link zur Verfügung. Solltest du über diesen Link ein Produkt bei Netcup mieten, erhalte ich eine kleine Provision. Für dich entstehen dadurch keine zusätzlichen Kosten.\nHier der Link:\nTransparenz ist mir wichtig:\nDieser Beitrag ist rein redaktionell und wurde nicht gesponsert. Der Affiliate-Link ist natürlich komplett freiwillig. Danke, wenn du mich auf diesem Weg unterstützt! 🙏\n","date":"19 April 2025","externalUrl":null,"permalink":"/posts/tasmota-wlan-problem/","section":"Posts","summary":"","title":"WLAN-Probleme mit Tasmota-Steckdosen: Der Kanalwechsel und warum deine Geräte sich nicht mehr verbinden","type":"posts"},{"content":"Wenn du regelmäßig mit Linux arbeitest oder entfernte Server verwaltest, kennst du vermutlich diesen Klassiker:\nssh networkstudent@172.30.100.55 -p 2345 Der Befehl ist funktional – keine Frage. Aber mit der Zeit wird er zur lästigen Routine. Du tippst IP-Adressen, Ports, Benutzernamen und gegebenenfalls noch den Pfad zum SSH-Schlüssel ein. Und das mehrfach am Tag. Für mehrere Server. Immer und immer wieder.\nWas zu Beginn nach einem simplen Kommando aussieht, wird schnell zum Flaschenhals deiner Produktivität.\nIch hab\u0026rsquo;s selbst erlebt:\nDu überlegst: „War das jetzt die .55 oder doch die .56?“ Der Port war doch angepasst… aber auf was nochmal? Und der SSH-Key? Copy-Paste oder Tipparbeit – beides nervt. Wenn du mehrere Maschinen managst – sei es im Homelab, auf dedizierten Servern oder in der Cloud – kosten dich solche Details täglich Zeit und Nerven.\nAber was, wenn’s auch anders geht?\nEin SSH-Login, der sich wie Magie anfühlt # Stell dir vor, du gibst einfach nur ein:\nssh webserver Keine IP. Kein Port. Kein Benutzername. Kein Schlüsselpfad. Einfach der Name, den du selbst gewählt hast – und zack, du bist drauf.\nSchnell. Klar. Fehlerfrei.\nGenau das erreichst du mit einer einzigen Datei: ~/.ssh/config. Ein unterschätzter Power-Hack für jeden Admin und Entwickler, der sich tagtäglich durch Serververbindungen kämpft.\nSo richtest du deine SSH-Konfiguration ein # Öffne oder erstelle die Datei:\nvim ~/.ssh/config Und trage deinen Server ein:\nHost webserver HostName 172.30.100.55 User networkstudent Port 2345 Ab sofort reicht:\nssh webserver Schon verbunden – ganz ohne Copy-Paste-Marathon.\nNatürlich kannst du auch mehrere Hosts eintragen:\nHost web HostName 172.30.100.55 User networkstudent Port 22 Host test HostName 172.30.100.56 User networkstudent Port 22 Damit wird deine ~/.ssh/config zur Schaltzentrale für alle deine Verbindungen. Und das Beste: Du kannst jederzeit anpassen, erweitern und optimieren.\nPasswortlos verbinden mit SSH-Schlüsseln # Okay, du hast dir die Tipperei gespart – aber du musst dich trotzdem noch jedes Mal einloggen? Das geht auch besser!\nSSH-Schlüssel sind der nächste Schritt:\nssh-keygen -t rsa -b 4096 -C \u0026#34;networkstudent@blog.de\u0026#34; Das erstellt zwei Dateien:\n~/.ssh/id_rsa (dein privater Schlüssel – gut verstecken!) ~/.ssh/id_rsa.pub (dein öffentlicher Schlüssel – den gibst du weiter) Jetzt kopierst du deinen öffentlichen Schlüssel auf den Server:\nssh-copy-id -i ~/.ssh/id_rsa.pub networkstudent@172.30.100.55 Ein letztes Mal Passwort eingeben – ab dann brauchst du es nie wieder.\nFüge nun diesen Eintrag deiner SSH-Config hinzu:\nHost webserver HostName 172.30.100.55 User networkstudent Port 2345 IdentityFile ~/.ssh/id_rsa Zukünftig loggst du dich mit:\nssh webserver …und bist sofort drin – ohne Passwort.\nMit der SSH-Autovervollständigung auf Debian-basierten Systemen reicht ein einfaches ssh [TAB], und schon bekommst du eine Liste aller Hosts angezeigt, die du in deiner ~/.ssh/config hinterlegt hast. So musst du nicht mehr manuell nachsehen, ob ein Server eingetragen ist und wie er heißt– du findest es sofort heraus, schnell und bequem.\nFazit: Kleine Änderung, große Wirkung # Die ~/.ssh/config-Datei ist für mich eine der effizientesten Verbesserungen im Alltag mit Linux-Servern. Sie spart Zeit, reduziert Fehler und macht deinen Workflow sauberer.\nEgal ob du ein Homelab betreibst, beruflich Server verwaltest oder einfach deine Umgebung optimieren willst – investiere ein paar Minuten und richte dir deine SSH-Konfiguration ordentlich ein. Du wirst den Unterschied sofort merken.\nWenn dir dieser Beitrag geholfen hat, lass es mich wissen – entweder in den Kommentaren oder direkt per Nachricht.\nNoch mehr praktische Tipps, Deep-Dives und Anleitungen findest du auf meinem YouTube-Kanal:\n🔗 YouTube.com@NetworkStudent\nIch freue mich, wenn du vorbeischaust, ein Abo dalässt oder das Video teilst – so verpasst du keine neuen Inhalte und unterstützt meine Arbeit direkt.\nHinweis zu Affiliate-Links # Um meine Arbeit und Inhalte zu unterstützen, stelle ich dir einen Affiliate-Link zu Netcup zur Verfügung. Wenn du über diesen Link einen Server mietest, erhalte ich eine kleine Provision – für dich entstehen keine zusätzlichen Kosten.\nTransparenz ist mir wichtig:\nDieser Beitrag verfolgt rein informative Ziele – kein Sponsoring, keine Werbung. Die Nutzung des Affiliate-Links ist komplett freiwillig. Danke, wenn du dich entscheidest, mich auf diesem Weg zu unterstützen 🙌\n","date":"8 April 2025","externalUrl":null,"permalink":"/posts/ssh-command/","section":"Posts","summary":"","title":"SSH-Zugriff vereinfachen – der unterschätzte Boost für deinen Workflow","type":"posts"},{"content":"","date":"28 März 2025","externalUrl":null,"permalink":"/tags/dns/","section":"Tags","summary":"","title":"DNS","type":"tags"},{"content":"","date":"28 März 2025","externalUrl":null,"permalink":"/tags/unifi/","section":"Tags","summary":"","title":"Unifi","type":"tags"},{"content":" Eine kleine Geschichte aus meinem Homelab # In meinem Homelab läuft eigentlich alles ziemlich rund. Zwei BIND9-DNS-Server kümmern sich um meine interne Namensauflösung, VLANs sind sauber getrennt und durchdacht, meine Webdienste hängen hinter einem Reverse Proxy, abgesichert durch HTTPS und geschützt über feingranulare Access-Control-Listen. So weit, so stabil – bis eines Tages Home Assistant einfach keinen Zugriff mehr auf Zigbee2MQTT hatte. Statt der gewohnten Oberfläche: 403 Forbidden.\nWas zum\u0026hellip;? Ich hatte an der Konfiguration nichts verändert. Also begann die übliche Reise – Wireshark auf, dig und nslookup in der Hand, Logs gewälzt. Schnell wurde klar: Die DNS-Auflösung funktioniert – aber nur in dem VLAN, in dem auch die DNS-Server stehen. In anderen VLANs dagegen bekomme ich beim dig die öffentliche IP meines Dienstes zurück, statt der internen. Und mit +norecurse gibt’s nur noch ein schnödes SERVFAIL.\nAn diesem Punkt war klar: Hier wird irgendetwas umgeleitet. Irgendetwas (oder jemand) greift in meine DNS-Requests ein. Aber was?\nDie Spur führt zu Unifi # Nachdem ich in den Interneteinstellungen meines Unifi-Controllers die DNS-Server manuell auf meine internen BIND9-Instanzen gesetzt hatte, lief plötzlich wieder alles wie gewohnt. Doch das war für mich keine saubere Lösung, eher ein Workaround. Ich wollte verstehen, warum das Ganze überhaupt schief lief.\nUnd dann – durch einen Zufall – fand ich diesen Satz auf einer Support-Seite von Unifi:\n„Clients, die benutzerdefinierte DNS-Server verwenden, werden zur Verwendung des UniFi Gateway DNS-Servers umgeleitet, wenn die Werbeblockierung aktiviert ist.“ Bingo.\nWas wirklich passiert ist # Sobald das Unifi Ad Blocking aktiv war, hat das Gateway die DNS-Anfragen meiner Clients umgebogen – weg von meinen eigenen DNS-Servern, hin zu seinen eigenen. Diese kannten natürlich meine internen Domains nicht und reichten die Anfragen einfach an externe Resolver weiter.\nDie Folge: Meine Clients erhielten die öffentliche IP meines Dienstes zurück – statt der privaten. Als sie versuchten, diese Adresse aufzurufen, schlug der Reverse Proxy sofort Alarm. Für ihn kam die Anfrage von außen (wegen SNAT durch das Gateway), also wurde sie zu Recht von der ACL geblockt. Aus Sicht des Proxys war das ein Angriff.\nDie Lösung? Einfach – wenn man’s weiß # Ich hab’s getestet, Schritt für Schritt:\nAd Blocking deaktiviert im Unifi Controller. Die manuell eingetragenen DNS-Server aus den Interneteinstellungen gelöscht – zurück auf „automatisch“. dig +norecurse getestet → saubere interne IP. Zugriff auf Zigbee2MQTT → alles läuft wieder. Was mich anfangs Stunden gekostet hat, war im Endeffekt eine versteckte Komfortfunktion von Unifi – mit unbequemen Nebenwirkungen.\nMein Fazit für dich # Wenn du in deinem Unifi-Netzwerk plötzlich DNS-Probleme zwischen VLANs bekommst und dir deine internen Dienste nicht mehr sauber auflösen, dann prüf, ob Ad Blocking aktiv ist.\nGerade in Homelabs mit eigener DNS-Infrastruktur kann genau das zu unerwarteten Nebeneffekten führen. Nicht immer liegt der Fehler in der eigenen Konfiguration – manchmal greift einfach der Hersteller zu sehr unter die Arme.\n🔗 Noch mehr aus meinem Homelab? # Wenn dir dieser Beitrag gefallen hat, schau gern auf meinem YouTube-Kanal vorbei. Dort findest du viele tiefgehende Anleitungen, praktische Beispiele und alles rund um Netzwerke, Server und Selbsthosting.\n👉 YouTube.com/@NetworkStudent\nIch freue mich, wenn du ein Abo dalässt oder den Kanal weiterempfiehlst – so verpasst du nichts und hilfst mir gleichzeitig, neue Inhalte zu erstellen.\n💡 Unterstützen ohne Mehrkosten # Wenn du sowieso gerade planst, dir einen vServer oder Webhosting bei Netcup zu holen, kannst du meinen Affiliate-Link nutzen. Für dich bleibt alles gleich – ich bekomme eine kleine Provision zur Unterstützung meines Blogs.\nTransparenz ist mir wichtig:\nDieser Beitrag ist rein redaktionell und wurde nicht gesponsert. Der Affiliate-Link ist natürlich komplett freiwillig. Danke, wenn du mich auf diesem Weg unterstützt! 🙏\n","date":"28 März 2025","externalUrl":null,"permalink":"/posts/unifi-dns-problem/","section":"Posts","summary":"","title":"Wenn VLANs plötzlich nicht mehr sprechen: Mein DNS-Mystery mit Unifi \u0026 BIND9","type":"posts"},{"content":"In dieser Anleitung zeige ich dir, wie du deinen ESP32 mit Tasmota flashst und für den Betrieb mit einem DS18B20-Temperatursensor konfigurierst.\nTasmota auf dem ESP32 installieren # Zuerst wechsle ich in das Verzeichnis des esptools:\ncd /daten/esptool/ Bevor wir Tasmota flashen, muss der ESP32 geleert werden. Das erledigen wir mit folgendem Befehl:\n./esptool --port /dev/ttyUSB* erase_flash Jetzt können wir Tasmota auf den ESP32 flashen. Die aktuelle Firmware-Datei findest du hier. In diesem Beispiel nutze ich die deutsche Version:\n./esptool --port /dev/ttyUSB* write_flash 0x0 tasmota/tasmota32-DE.factory.bin Nach dem erfolgreichen Flashen startet der ESP32 neu und erstellt ein eigenes WLAN-Netzwerk mit dem Namen tasmota-xxx-xxx. Verbinde dich mit diesem WLAN und rufe die Konfigurationsseite unter der IP-Adresse 192.168.4.1 in deinem Browser auf.\nAnschließend werden dir verfügbare WLAN-Netzwerke angezeigt. Wähle dein gewünschtes Netzwerk aus, gib dein Passwort ein und speichere die Einstellungen. Der ESP32 startet nun neu und verbindet sich mit deinem WLAN.\nGrundlegende Konfiguration # Telemetrie-Intervall festlegen # Um die Häufigkeit der Telemetriedaten zu definieren, setzen wir das TelePeriod-Intervall:\nTelePeriod 10 MQTT-Einstellungen # Für die Anbindung an einen MQTT-Broker müssen folgende Parameter konfiguriert werden:\nServer-IP: Die Server IP-Adresse des MQTT Hosts Port: 1883 Topic: ESP32-temp Full Topic: tasmota/wohnzimmer/esp32/%prefix%/%topic%/ Diese Einstellungen kannst du im Tasmota-Webinterface unter Einstellungen → MQTT-Konfiguration vornehmen.\nDS18B20 Temperatursensor einrichten # Damit der DS18B20-Temperatursensor funktioniert, müssen wir den entsprechenden GPIO-Pin im Tasmota-Webinterface konfigurieren:\nNavigiere zu Einstellungen → Gerät konfigurieren. Wähle den GPIO-Pin aus, an den der Sensor angeschlossen ist, und setze ihn auf DS18x20. Speichere die Einstellungen. Unter Einstellungen → Erweitert kannst du noch einen Gerätenamen vergeben, z. B.: Esp32-temp Nach einem Neustart sollte der Sensor seine Temperaturwerte über MQTT oder das Tasmota-Webinterface bereitstellen.\nFertig! Dein ESP32 mit Tasmota ist nun vollständig eingerichtet und sendet Temperaturdaten über MQTT. 🎉\nHinweis zu Affiliate-Links # Um meine Arbeit und Inhalte zu unterstützen, stelle ich dir einen Affiliate-Link zur Verfügung. Solltest du über diesen Link ein Produkt bei Netcup mieten, erhalte ich eine kleine Provision. Für dich entstehen dadurch keine zusätzlichen Kosten.\nHier der Link:\nTransparenz ist mir wichtig:\nIch möchte klarstellen, dass dieser Beitrag keinen kommerziellen Charakter hat und rein informative Zwecke verfolgt. Die Nutzung des Affiliate-Links ist vollständig freiwillig. Vielen Dank, falls du dich entscheidest, mich auf diesem Weg zu unterstützen! ","date":"19 März 2025","externalUrl":null,"permalink":"/posts/tasmota-esp32/","section":"Posts","summary":"","title":"ESP32 mit Tasmota flashen und konfigurieren","type":"posts"},{"content":"AWK ist ein leistungsstarkes Tool zur Textverarbeitung unter Unix/Linux. Es ermöglicht das einfache Filtern, Bearbeiten und Umwandeln von Daten, zum Beispiel aus Dateien oder Befehlsausgaben.\nAWK-Befehle und ihre Bedeutung # Nr. Befehl Beschreibung 1 awk '{print $1}' test.txt Gibt die erste Spalte jeder Zeile aus. 2 awk -F':' '{print $1, $3, $4}' /etc/passwd Verwendet : als Trennzeichen und gibt Spalte 1, 3 und 4 aus. 3 awk '$3 \u0026gt; 100' test.txt Zeigt nur Zeilen, in denen die dritte Spalte größer als 100 ist. 4 awk 'BEGIN {print \u0026quot;Header\u0026quot;} {print $0} END {print \u0026quot;Footer\u0026quot;}' test.txt Fügt vor den Daten \u0026ldquo;Header\u0026rdquo; und danach \u0026ldquo;Footer\u0026rdquo; hinzu. 5 awk 'NR==1 {print}' test.txt Gibt nur die erste Zeile der Datei aus. 6 awk 'NF \u0026gt; 8' test.txt Zeigt Zeilen mit mehr als 8 Spalten an. 7 awk '$2 ~ /pattern/' test.txt Gibt Zeilen aus, in denen die zweite Spalte \u0026ldquo;pattern\u0026rdquo; enthält. 8 awk 'length($0) \u0026gt; 30' test.txt Zeigt nur Zeilen mit mehr als 30 Zeichen. 9 awk '{sum += $1} END {print sum}' test.txt Addiert alle Werte der ersten Spalte und gibt die Summe aus. 10 awk '!seen[$0]++' test.txt Entfernt doppelte Zeilen und gibt nur eindeutige aus. 11 awk sub(\u0026quot;alt\u0026quot;, \u0026quot;neu\u0026quot;, $2) Ersetzt „alt“ durch „neu“ in Spalte 2 (nur erstes Vorkommen) 12 awk gsub(\u0026quot;alt\u0026quot;, \u0026quot;neu\u0026quot;, $2) Ersetzt „alt“ überall in Spalte 2 In AWK steht $0 für die gesamte Zeile.\n$1, $2, $3, \u0026hellip; → einzelne Spalten (Felder) $0 → die komplette Zeile Beispiele # Ich habe eine Datei namens test.txt erstellt, die folgenden Inhalt enthält: Diese Zeile existiert nur für die Show\nBefehl:\nawk \u0026#39;BEGIN {print \u0026#34;Header\u0026#34;} {print $0} END {print \u0026#34;Footer\u0026#34;}\u0026#39; test.txt Header Diese Zeile existiert nur für die Show Footer Befehl:\nawk \u0026#39;sub(\u0026#34;nur\u0026#34;, \u0026#34;nicht\u0026#34;)\u0026#39; test.txt Diese Zeile existiert nicht für die Show Hinweis zu Affiliate-Links # Um meine Arbeit und Inhalte zu unterstützen, stelle ich dir einen Affiliate-Link zur Verfügung. Solltest du über diesen Link ein Produkt bei Netcup mieten, erhalte ich eine kleine Provision. Für dich entstehen dadurch keine zusätzlichen Kosten.\nHier der Link:\nTransparenz ist mir wichtig:\nIch möchte klarstellen, dass dieser Beitrag keinen kommerziellen Charakter hat und rein informative Zwecke verfolgt. Die Nutzung des Affiliate-Links ist vollständig freiwillig. Vielen Dank, falls du dich entscheidest, mich auf diesem Weg zu unterstützen! ","date":"3 März 2025","externalUrl":null,"permalink":"/posts/awk-cheat-sheet/","section":"Posts","summary":"","title":"AWK Commands Cheat Sheet","type":"posts"},{"content":"","date":"3 März 2025","externalUrl":null,"permalink":"/tags/linux-cheat-sheet/","section":"Tags","summary":"","title":"Linux Cheat-Sheet","type":"tags"},{"content":"","date":"11 Februar 2025","externalUrl":null,"permalink":"/tags/ds-lite/","section":"Tags","summary":"","title":"DS-Lite","type":"tags"},{"content":"","date":"11 Februar 2025","externalUrl":null,"permalink":"/tags/homelab/","section":"Tags","summary":"","title":"Homelab","type":"tags"},{"content":" Vorbereitungen # Zuerst muss das System aktualisiert und das WireGuard-Paket installiert werden. Das geschieht mit dem folgenden Befehl:\napt update \u0026amp;\u0026amp; apt upgrade -y \u0026amp;\u0026amp; apt install wireguard iptables Um WireGuard erfolgreich zu nutzen und sicherzustellen, dass unsere Pakete das Ziel erreichen, müssen wir die Weiterleitung mit dem folgenden Befehl einrichten.\nsed -i \u0026#39;s/^#\\s*net.ipv4.ip_forward\\s*=.*/net.ipv4.ip_forward=1/\u0026#39; /etc/sysctl.conf Nun aktivieren wir die Weiterleitung von IPv4-Paketen.\nsystctl -p Das Firewall-Skript muss nun unter /etc/wireguard/postup abgelegt werden. Achte darauf, das Skript an deine spezifischen Bedürfnisse anzupassen, indem du beispielsweise Ports und die Server-IP-Adresse entsprechend deiner Gegebenheiten änderst.\n#!/bin/bash IPTABLES=\u0026#34;/usr/sbin/iptables\u0026#34; # Firewall Regeln zurücksetzen ${IPTABLES} -F ${IPTABLES} -X ${IPTABLES} -t nat -F ${IPTABLES} -t nat -X # Setze Default Policy für Filter Table ${IPTABLES} -P INPUT DROP ${IPTABLES} -P FORWARD DROP ${IPTABLES} -P OUTPUT ACCEPT # Bestehende Verbindungen erlauben ${IPTABLES} -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT ${IPTABLES} -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Loopback Schnittstelle erlauben ${IPTABLES} -A INPUT -i lo -j ACCEPT # Erlaube ICMP ${IPTABLES} -A INPUT -p icmp -j ACCEPT # Erlaube SSH ${IPTABLES} -A INPUT -p tcp --dport 22 -j ACCEPT # WireGuard (Port 51820) erlauben ${IPTABLES} -A INPUT -p udp --dport 51820 -j ACCEPT # Teamspeak 3 von Public weiterleiten ${IPTABLES} -t nat -A PREROUTING -i ens3 -p tcp --dport 9987 -j DNAT --to-destination 172.30.100.200 ${IPTABLES} -t nat -A PREROUTING -i ens3 -p udp --dport 9987 -j DNAT --to-destination 172.30.100.200 # Nginx Proxy Manager von Public (z.B. Homeassistant) weiterleiten ${IPTABLES} -t nat -A PREROUTING -i ens3 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 172.30.100.10 # Icmp innerhalb des VPN Netzwerkes erlauben ${IPTABLES} -A FORWARD -i wg0 -o wg0 -p icmp -j ACCEPT # DNS Anfragen im VPN Netzwerk erlauben ${IPTABLES} -A FORWARD -i wg0 -o wg0 -p udp --dport 53 -j ACCEPT ${IPTABLES} -A FORWARD -i wg0 -o wg0 -p tcp --dport 53 -j ACCEPT # SSH innerhalb des VPN Netzwerkes erlauben ${IPTABLES} -A FORWARD -i wg0 -o wg0 -p tcp --dport 22 -j ACCEPT # Nginx Proxy Manager Regeln innerhalb des VPN Netzwerkes erlauben ${IPTABLES} -A FORWARD -i wg0 -o wg0 -p tcp --dport 80 -j ACCEPT ${IPTABLES} -A FORWARD -i wg0 -o wg0 -p tcp --dport 443 -j ACCEPT # Nginx Proxy Manager Regeln von Public erlauben ${IPTABLES} -A FORWARD -i ens3 -o wg0 -p tcp --dport 80 -j ACCEPT ${IPTABLES} -A FORWARD -i ens3 -o wg0 -p tcp --dport 443 -j ACCEPT # Teamspeak 3 Regeln von Public erlauben ${IPTABLES} -A FORWARD -i ens3 -o wg0 -p tcp --dport 9987 -j ACCEPT ${IPTABLES} -A FORWARD -i ens3 -o wg0 -p udp --dport 9987 -j ACCEPT # Optional wenn du alles über die Wireguard verbindung schickst #${IPTABLES} -A FORWARD -i wg0 -o ens3 -j ACCEPT Die gleichen Regeln müssen natürlich auch deaktiviert werden, wenn die WireGuard-Schnittstelle heruntergefahren wird. Das entsprechende Skript dafür heißt postdown.\n#!/bin/bash IPTABLES=\u0026#34;/usr/sbin/iptables\u0026#34; # WireGuard (Port 51820) löschen ${IPTABLES} -D INPUT -p udp --dport 51820 -j ACCEPT # Teamspeak 3 von Public weiterleitung entfernen ${IPTABLES} -t nat -D PREROUTING -i ens3 -p tcp --dport 9987 -j DNAT --to-destination 172.30.100.200 ${IPTABLES} -t nat -D PREROUTING -i ens3 -p udp --dport 9987 -j DNAT --to-destination 172.30.100.200 # Nginx Proxy Manager von Public (z.B. Homeassistant) weiterleitung entfernen ${IPTABLES} -t nat -D PREROUTING -i ens3 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 172.30.100.10 # Icmp innerhalb des VPN Netzwerkes löschen ${IPTABLES} -D FORWARD -i wg0 -o wg0 -p icmp -j ACCEPT # DNS Anfragen im VPN Netzwerk erlauben ${IPTABLES} -D FORWARD -i wg0 -o wg0 -p udp --dport 53 -j ACCEPT ${IPTABLES} -D FORWARD -i wg0 -o wg0 -p tcp --dport 53 -j ACCEPT # SSH innerhalb des VPN Netzwerkes löschen ${IPTABLES} -D FORWARD -i wg0 -o wg0 -p tcp --dport 22 -j ACCEPT # Nginx Proxy Manager Regeln innerhalb des VPN Netzwerkes löschen ${IPTABLES} -D FORWARD -i wg0 -o wg0 -p tcp --dport 80 -j ACCEPT ${IPTABLES} -D FORWARD -i wg0 -o wg0 -p tcp --dport 443 -j ACCEPT # Nginx Proxy Manager Regeln von Public löschen ${IPTABLES} -D FORWARD -i ens3 -o wg0 -p tcp --dport 80 -j ACCEPT ${IPTABLES} -D FORWARD -i ens3 -o wg0 -p tcp --dport 443 -j ACCEPT # Teamspeak 3 Regeln von Public löschen ${IPTABLES} -D FORWARD -i ens3 -o wg0 -p tcp --dport 9987 -j ACCEPT ${IPTABLES} -D FORWARD -i ens3 -o wg0 -p udp --dport 9987 -j ACCEPT # Optional wenn du alles über die Wireguard verbindung schickst löschen #${IPTABLES} -D FORWARD -i wg0 -o ens3 -j ACCEPT Des Weiteren muss du die Datei brechtigungen noch ändern, damit es ausführbar ist, dazu einfach folgenden Befehl ausführen.\nchmod 744 post* Es ist ebenfalls wichtig, die Firewall-Regeln deines zu Hause eingesetzten Routers (in meinem Fall ein Unifi Cloud Gateway Ultra) anzupassen, falls die Verbindung blockiert wird. Ein Beispiel dazu findest du in diesem YouTube Video.\nWireguard konfigurationen # Wireguard Keys erstellen # Um den WireGuard-Server zum Laufen zu bringen, werden sowohl ein privater als auch ein öffentlicher Schlüssel benötigt. Du kannst diese mit dem folgenden Befehl erstellen:\nDer erste Teil des Befehls generiert den privaten Schlüssel. Der zweite Teil sorgt dafür, dass der private Schlüssel sowohl in einer Datei gespeichert als auch in die Standardausgabe umgeleitet wird. Der dritte Teil des Befehls nutzt den privaten Schlüssel, um den öffentlichen Schlüssel zu generieren und in einer Datei zu speichern. wg genkey | tee server_private.key | wg pubkey \u0026gt; server_public.key Server konfiguration # Unter /etc/wireguard/ wird die Datei wg0.conf erstellt, die folgenden Inhalt hat. Den Inhalt musst du natürlich noch an deine Gegebenheiten anpassen.\n[Interface] PrivateKey = \u0026lt;Server-Private-Key\u0026gt; # Der private Schlüssel des Servers Address = 172.27.31.1/24 # Die IP-Adresse, die dem Server im VPN-Netzwerk zugewiesen wird ListenPort = 51820 # Der Port, auf dem WireGuard lauscht # IPtables-Regeln für HTTP- und HTTPS-Verkehr PostUp = /etc/wireguard/postup # Skript, das nach dem Hochfahren der Schnittstelle ausgeführt wird PostDown = /etc/wireguard/postdown # Skript, das nach dem Herunterfahren der Schnittstelle ausgeführt wird ############################################################## ############ Konfiguration der Clients ############## ############################################################## # Client-UCG [Peer] PublicKey = # Öffentlicher Schlüssel des Clients (ersetze mit dem tatsächlichen Public Key) AllowedIPs = 172.27.31.2/32, 172.30.100.0/24 # Die IP-Adresse des Clients im VPN und ggf. weitere zulässige IPs # Client Mac-Mini-Philipp [Peer] PublicKey = # Öffentlicher Schlüssel des Clients (ersetze mit dem tatsächlichen Public Key) AllowedIPs = 172.27.31.10/32 # Die IP-Adresse des Clients, die du dir merken musst Client konfiguration # Das gleiche gilt für den Client: Auch hier musst du die Konfiguration an deine spezifischen Gegebenheiten anpassen.\n[Interface] PrivateKey = # Der private Schlüssel des Clients (bereits in der Konfiguration festgelegt) Address = # Die IP-Adresse des Clients im VPN-Netzwerk (wähle eine Adresse aus dem VPN-Subnetz) DNS = # Die IP-Adresse des DNS-Servers, idealerweise der lokale DNS-Server bei dir zu Hause [Peer] PublicKey = # Der öffentliche Schlüssel des VPN-Servers (ersetze mit dem tatsächlichen Public Key des Servers) AllowedIPs = # Die Netzwerke, die über das VPN geroutet werden sollen (z.B. 0.0.0.0/0 für alles oder spezifische Subnetze) Endpoint = Dein-Server:51820 # Die öffentliche IP-Adresse des VPN-Servers und der Port, auf dem WireGuard hört PersistentKeepalive = 25 # Intervall (in Sekunden) für Keepalive-Nachrichten, um die Verbindung aktiv zu halten Verbindung Testen # Nun kannst du eine Verbindung von deinem Client zu deinem Server herstellen. Wenn alles korrekt eingerichtet ist, sollte die Verbindung problemlos hergestellt werden, sodass du jederzeit auf dein Homelab zugreifen kannst. Bitte Beachte das du bei dir zu Hause auch dafür sorgen musst, das deine Firewall Regeeln passen, da sonst natürlich keine Verbindung möglich ist. Ebenso musst du alles was über DNS erreichbar ist auf den Server umleiten, welcher deine Verbindung zu dir nach Hause herstellt. Also alles was ööfentlich erreichbar ist, muss auch auf den Server zeigen.\nHinweis zu Affiliate-Links # Um meine Arbeit und Inhalte zu unterstützen, stelle ich dir einen Affiliate-Link zur Verfügung. Solltest du über diesen Link ein Produkt bei Netcup mieten, erhalte ich eine kleine Provision. Für dich entstehen dadurch keine zusätzlichen Kosten.\nHier der Link:\nTransparenz ist mir wichtig:\nIch möchte klarstellen, dass dieser Beitrag keinen kommerziellen Charakter hat und rein informative Zwecke verfolgt. Die Nutzung des Affiliate-Links ist vollständig freiwillig. Vielen Dank, falls du dich entscheidest, mich auf diesem Weg zu unterstützen! ","date":"11 Februar 2025","externalUrl":null,"permalink":"/posts/ds-lite/","section":"Posts","summary":"","title":"Homelab trotz DS-Lite","type":"posts"},{"content":"","date":"11 Februar 2025","externalUrl":null,"permalink":"/tags/wireguard/","section":"Tags","summary":"","title":"Wireguard","type":"tags"},{"content":"Das Erstellen von PTR-Einträgen für IPv6-Adressen ist eine wiederkehrende Aufgabe, die oft mit DNS-Management einhergeht. Mit einem Python-Skript lässt sich dieser Prozess deutlich vereinfachen und beschleunigen. In diesem Beitrag stelle ich ein einfaches Python-Skript vor, das die Erstellung eines PTR-Records automatisiert.\nWas sind PTR-Records? # PTR-Records (Pointer Records) sind ein wichtiger Bestandteil des DNS-Systems. Sie ermöglichen die rückwärtige Auflösung von IP-Adressen in Hostnamen, was z. B. für Mailserver eine Voraussetzung ist, um nicht auf Blacklists zu landen. Insbesondere bei IPv6-Adressen ist die Erstellung solcher Einträge aufgrund der Länge und Komplexität der Adressen fehleranfällig.\nDas Python-Skript # Das folgende Skript nimmt eine IPv6-Adresse und einen Hostnamen entgegen, um daraus einen PTR-Eintrag zu generieren. Es verwendet das Python-Modul ipaddress, das standardmäßig in Python 3 enthalten ist.\n#!/usr/bin/python3 import sys import ipaddress DOMAIN_NAME=\u0026#34;\u0026lt;deine-domain\u0026gt;.\u0026lt;de\u0026gt;.\u0026#34; if __name__ == \u0026#34;__main__\u0026#34;: if len(sys.argv) != 3: print(\u0026#34;Verwendung: addptr6.py \u0026lt;Hostname\u0026gt; \u0026lt;IPv6-Address\u0026gt; \u0026#34;) sys.exit(1) hostname = sys.argv[1] ipv6 = sys.argv[2] ptr_record = ipaddress.ip_address(ipv6).reverse_pointer print(f\u0026#39;{ptr_record} PTR {hostname}.{DOMAIN_NAME}\u0026#39;) So funktioniert das Skript # Eingaben über die Kommandozeile: Das Skript erwartet zwei Argumente:\nDen Hostnamen. Die IPv6-Adresse. Umwandlung der IPv6-Adresse: Mithilfe des Moduls ipaddress wird die IPv6-Adresse in ihren rückwärtigen DNS-Namen (reverse pointer) umgewandelt.\nPTR-Record ausgeben: Der PTR-Eintrag wird im Format PTR hostname.domain. ausgegeben.\nBeispiel # Angenommen, du möchtest einen PTR-Eintrag für die IPv6-Adresse 2001:db8::1 und den Hostnamen webserver erstellen. Du kannst das Skript wie folgt aufrufen:\n./addptr6.py webserver 2001:db8::1 Die Ausgabe wäre:\n1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa. PTR webserver.\u0026lt;deine-domain\u0026gt;.\u0026lt;de\u0026gt;. Die Ausgabe kannst du so wie sie ist kopieren und direkt in dein Zone File einfügen. Jetzt noch die Serial erhöhen und den Dienst neu starten.\nAnpassung an deine Umgebung # Domainname: Passe die Variable DOMAIN_NAME an deinen spezifischen Domainnamen an. Integration in DNS-Management: Das Skript kann erweitert werden, um den PTR-Eintrag direkt in dein DNS-System (z. B. Bind) zu übernehmen. Hinweis zu Affiliate-Links # Um meine Arbeit und Inhalte zu unterstützen, stelle ich dir einen Affiliate-Link zur Verfügung. Solltest du über diesen Link ein Produkt bei Netcup mieten, erhalte ich eine kleine Provision. Für dich entstehen dadurch keine zusätzlichen Kosten.\nHier der Link:\nTransparenz ist mir wichtig:\nIch möchte klarstellen, dass dieser Beitrag keinen kommerziellen Charakter hat und rein informative Zwecke verfolgt. Die Nutzung des Affiliate-Links ist vollständig freiwillig. Vielen Dank, falls du dich entscheidest, mich auf diesem Weg zu unterstützen! ","date":"13 Januar 2025","externalUrl":null,"permalink":"/posts/ipv6-ptr-script/","section":"Posts","summary":"","title":"Automatisierung von PTR-Einträgen für IPv6-Adressen mit Python","type":"posts"},{"content":"","date":"13 Januar 2025","externalUrl":null,"permalink":"/tags/scripts/","section":"Tags","summary":"","title":"Scripts","type":"tags"},{"content":"","date":"13 Januar 2025","externalUrl":null,"permalink":"/tags/scripts/python/","section":"Tags","summary":"","title":"Scripts/Python","type":"tags"},{"content":"","date":"7 Dezember 2024","externalUrl":null,"permalink":"/tags/wled/","section":"Tags","summary":"","title":"Wled","type":"tags"},{"content":"In diesem Beitrag erkläre ich dir Schritt für Schritt, wie du WLED auf einem ESP32 installierst. Die Anleitung basiert auf der WLED Audioreactive Binary, funktioniert jedoch genauso mit dem normalen WLED Binary. Du musst lediglich den Namen des Binaries anpassen.\nIch zeige dir den gesamten Vorgang auf einem Linux-PC, da ich für solche Projekte gerne Linux nutze. Unter Windows ist der Prozess ähnlich, allerdings benötigst du dort zusätzliche Treiber.\nVoraussetzungen # Um loszulegen, benötigst du:\nWLED Binary: Die passende Version kannst du von der offiziellen WLED-Seite herunterladen. esptool: Dieses Tool wird verwendet, um den ESP32 zu flashen. Du findest es hier. Bootloader für den ESP32: Diese Binary ist nur für den ESP32 erforderlich; beim ESP8266 kannst du diesen Schritt überspringen. WLED Binary herunterladen # Suche auf der verlinkten Webseite das passende Binary für dein Projekt aus. In meinem Fall habe ich mich für das WLED_0.14.4_ESP32_audioreactive.bin entschieden. Lade dir zusätzlich den Bootloader für den ESP32 herunter.\nVorbereitung der Dateien # Sortiere alle heruntergeladenen Dateien in Ordner, damit du den Überblick behältst. Hier ein Beispiel, wie du die Struktur aufbauen kannst:\n├── espefuse ├── esp_rfc2217_server ├── espsecure ├── esptool ├── tasmota │ ├── tasmota-esp32-DE.bin │ └── tasmota-esp8266-DE.bin └── wled ├── esp32_bootloader_v4.bin ├── WLED_0.14.4_ESP32_audioreactive.bin ├── WLED_0.14.4_ESP32.bin └── WLED_0.14.4_ESP8266.bin Diese Struktur hilft dir, die späteren Befehle nachvollziehbar und fehlerfrei auszuführen.\nInstallation von WLED # Schritt 1: Bootloader installieren # Zunächst musst du den Bootloader auf den ESP32 flashen. Öffne ein Terminal und führe den folgenden Befehl aus:\nsudo ./esptool write_flash 0x0 ./wled/esp32_bootloader_v4.bin Warte, bis der Vorgang erfolgreich abgeschlossen ist.\nSchritt 2: WLED Binary installieren # Nach der Installation des Bootloaders kannst du das entsprechende WLED Binary flashen. Nutze dazu diesen Befehl:\nsudo ./esptool write_flash 0x10000 ./wled/WLED_0.14.4_ESP32_audioreactive.bin WLED konfigurieren # Nachdem die Installation abgeschlossen ist, kannst du deinen ESP32 anschließen und konfigurieren:\nWLAN-Verbindung herstellen\nVerbinde dich mit dem WLAN des ESP32. Der Netzwerkname lautet WLED-AP, und das Standardpasswort ist wled1234.\nWeb-Interface aufrufen\nÖffne deinen Browser und gib die IP-Adresse 4.3.2.1 ein. Du solltest eine Webseite sehen, die dir verschiedene Einstellungen bietet:\nWIFI SETTINGS: Trage hier die Zugangsdaten deines Heim-WLANs ein. TO THE CONTROLS: Hier kannst du Effekte, Helligkeit und weitere Einstellungen vornehmen. Verkabelung für Sound Reactive WLED # Falls du die Audioreactive-Funktion nutzen möchtest, benötigst du zusätzliche Verkabelung. Hier eine Übersicht:\n+------------------+ | MICRO | +------------------+ | | | | | v v v v +-------+ WS SCK SD VDD | | | | | | v v v v | G15 G14 G32 3V3 | +------------------+ | | ESP32 | | +------------------+ | | | | | v v v | 5V G16 GND | | | | | +------\u0026gt; GND (Auf einer WAGO) v LED(DATA) Ich wünsche dir viel Spaß mit deinem WLED-Controller! Experimentiere mit den Effekten und tauche in die unzähligen Möglichkeiten ein, die dir WLED bietet.\nHinweis zu Affiliate-Links # Um meine Arbeit und Inhalte zu unterstützen, stelle ich dir einen Affiliate-Link zur Verfügung. Solltest du über diesen Link ein Produkt bei Netcup mieten, erhalte ich eine kleine Provision. Für dich entstehen dadurch keine zusätzlichen Kosten.\nHier der Link:\nTransparenz ist mir wichtig:\nIch möchte klarstellen, dass dieser Beitrag keinen kommerziellen Charakter hat und rein informative Zwecke verfolgt. Die Nutzung des Affiliate-Links ist vollständig freiwillig. Vielen Dank, falls du dich entscheidest, mich auf diesem Weg zu unterstützen! ","date":"7 Dezember 2024","externalUrl":null,"permalink":"/posts/wled-installieren/","section":"Posts","summary":"","title":"WLED auf einem ESP32 installieren","type":"posts"},{"content":"","date":"6 Dezember 2024","externalUrl":null,"permalink":"/tags/docker/","section":"Tags","summary":"","title":"Docker","type":"tags"},{"content":"Kürzlich wollte ich mit meinen Freunden ein paar entspannte Runden zocken. Da aber keiner von uns einen Teamspeak-Server hatte, habe ich kurzerhand selbst einen aufgesetzt – und zwar mit Docker! Das Ganze war überraschend einfach und schnell erledigt.\nVoraussetzungen # Zuerst brauchst du einen Server, der von außen erreichbar ist. Ich habe dafür einen VPS-Server bei Netcup gemietet, aber du kannst auch bei anderen Anbietern fündig werden. Wichtig ist, dass du ein aktuelles Ubuntu- oder Debian-Betriebssystem nutzt, da ich diese Anleitung darauf abgestimmt habe.\nEin weiterer Punkt: Dein Server sollte auf einem x86-basierten Prozessor laufen. Falls du das Ganze auf einem Raspberry Pi oder einem ARM-basierten Server ausprobieren willst, wirst du auf Probleme stoßen, da die Teamspeak-Images nicht mit ARM kompatibel sind.\nDocker installieren # Für die Einrichtung meines Servers nutze ich Docker, weil es den Prozess extrem vereinfacht. In dieser Anleitung erkläre ich nicht, wie Docker installiert wird. Dafür gibt es zahlreiche Tutorials, die dir dabei helfen können.\nHier sind zwei hilfreiche Links:\nDocker Installation – YouTube Video Docker Compose nutzen # Ich habe für meinen Teamspeak-Server eine Docker-Compose-Datei erstellt, die ich dir hier zur Verfügung stelle. Du kannst den Inhalt einfach kopieren und die Platzhalter durch deine eigenen Werte ersetzen.\nDocker-Compose-Datei erstellen und bearbeiten # Öffne die Datei docker-compose.yml mit einem Texteditor:\nvim docker-compose.yml Füge diesen Inhalt ein:\nservices: teamspeak: image: teamspeak restart: always ports: - 9987:9987/udp - 10011:10011 - 30033:30033 environment: TS3SERVER_DB_PLUGIN: ts3db_mariadb TS3SERVER_DB_SQLCREATEPATH: create_mariadb TS3SERVER_DB_HOST: db TS3SERVER_DB_USER: root TS3SERVER_DB_PASSWORD: \u0026lt;Dein-Sicheres-Passwort\u0026gt; TS3SERVER_DB_NAME: teamspeak TS3SERVER_DB_WAITUNTILREADY: 30 TS3SERVER_LICENSE: accept volumes: - ./teamspeak:/var/ts3server db: image: mariadb restart: always environment: MYSQL_ROOT_PASSWORD: \u0026lt;Dein-Sicheres-Passwort\u0026gt; MYSQL_DATABASE: teamspeak volumes: - ./mariadb/conf:/etc/mysql/conf.d - ./mariadb/data:/var/lib/mysql:Z Achtung: Ersetze \u0026lt;Dein-Sicheres-Passwort\u0026gt; durch ein starkes, individuelles Passwort.\nTeamspeak-Server starten # Nachdem du die Datei angepasst und gespeichert hast, kannst du den Server starten:\ndocker compose up -d Dein Teamspeak-Server sollte jetzt laufen. Um dich damit zu verbinden, benötigst du einen Berechtigungsschlüssel (ServerAdmin-Token), den du entweder aus den Logs oder dem Log-Ordner des Containers auslesen kannst.\nBerechtigungsschlüssel finden # In den Docker-Logs suchen: docker logs ts3-teamspeak-1 Dort findest du eine Ausgabe ähnlich dieser:\n------------------------------------------------------------------ I M P O R T A N T ------------------------------------------------------------------ ServerAdmin privilege key created, please use it to gain serveradmin rights for your virtualserver. token=fjhsdfkljsijvmi2jj8efsdjfkjksdklfv ------------------------------------------------------------------ Im Log-Ordner nach dem Schlüssel suchen:\nGehe in den Ordner, den du in der docker-compose.yml unter volumes angegeben hast. Dort gibt es einen Ordner namens logs. Führe den folgenden Befehl aus, um den Schlüssel zu finden: grep -nr token * Fazit # Mit diesen einfachen Schritten hast du deinen eigenen Teamspeak-Server aufgesetzt. Docker macht die Verwaltung unglaublich einfach, und du bist in wenigen Minuten bereit.\nViel Spaß beim Zocken! 🎮\nHinweis zu Affiliate-Links # Um meine Arbeit und Inhalte zu unterstützen, stelle ich dir einen Affiliate-Link zur Verfügung. Solltest du über diesen Link ein Produkt bei Netcup mieten, erhalte ich eine kleine Provision. Für dich entstehen dadurch keine zusätzlichen Kosten.\nHier der Link:\nTransparenz ist mir wichtig:\nIch möchte klar stellen, dass dieser Beitrag keinen kommerziellen Charakter hat und rein informative Zwecke verfolgt. Die Nutzung des Affiliate-Links ist vollständig freiwillig. Vielen Dank, falls du dich entscheidest, mich auf diesem Weg zu unterstützen! ","date":"6 Dezember 2024","externalUrl":null,"permalink":"/posts/teamspeak3-server.md/","section":"Posts","summary":"","title":"Teamspeak 3 Server mit Docker selbst hosten","type":"posts"},{"content":"Wenn du wie ich einen DNS-Server bei einem Provider deiner Wahl nutzt und beispielsweise einen eigenen Minecraft- oder TeamSpeak 3-Server lokal betreibst, möchtest du diesen vermutlich gemeinsam mit deinen Freunden verwenden. Dabei stehst du möglicherweise vor der Herausforderung, dass du von deinem Internetprovider nur eine dynamische IP-Adresse erhältst, die sich regelmäßig ändert.\nDamit dein DNS-Server immer die aktuelle IP-Adresse kennt, benötigst du eine einfache und kostengünstige Lösung, die deine dynamische IP automatisch aktualisiert. In diesem Beitrag zeige ich dir, wie du das mit einem kleinen Skript umsetzen kannst.\nVoraussetzungen # Bevor wir starten, stelle sicher, dass:\ndein DNS-Server (z. B. Bind9) korrekt eingerichtet ist, dein DNS-Server dynamische Updates deiner Zone akzeptiert, du die nötigen Berechtigungen für die Updates hast. In diesem Beitrag gehe ich nicht darauf ein, wie du deinen DNS-Server einrichtest. Der Fokus liegt auf einem funktionierenden Skript, das die Aufgabe für dich übernimmt.\nDas Skript # Das folgende Skript ermittelt deine aktuelle öffentliche IP-Adresse und aktualisiert sie auf deinem DNS-Server: WICHTIG: Passe deine Variablen an\n#!/bin/bash ECHO=$(which echo) NSUPDATE=$(which nsupdate) # DNS-Eintrag festlegen, der aktualisiert werden soll. Beachte den abschließenden Punkt. HOST=\u0026#34;test.dein-domain.de.\u0026#34; # Den vom DNS-Administrator bereitgestellten Schlüssel festlegen KEY=\u0026#34;/etc/bind/update.key\u0026#34; # Den Namen oder die IP-Adresse des DNS-Servers festlegen SERVER=\u0026#34;ns1.deine-domain.de\u0026#34; # Die Zone festlegen, die geändert werden soll. Es kann jede Zone sein, für die der Schlüssel Änderungsrechte hat. ZONE=\u0026#34;deine-domain.de.\u0026#34; if ! which dig; then echo \u0026#34;Fehler: dig ist nicht installiert; exit 1 else IP=`dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F\u0026#39;\u0026#34;\u0026#39; \u0026#39;{ print $2}\u0026#39;` OLDIP=`dig $HOST +short @8.8.8.8` if [ \u0026#34;$IP\u0026#34; != \u0026#34;$OLDIP\u0026#34; ]; then $ECHO \u0026#34;server $SERVER\u0026#34; \u0026gt; /tmp/nsupdate $ECHO \u0026#34;debug yes\u0026#34; \u0026gt;\u0026gt; /tmp/nsupdate $ECHO \u0026#34;zone $ZONE\u0026#34; \u0026gt;\u0026gt; /tmp/nsupdate $ECHO \u0026#34;update delete $HOST\u0026#34; \u0026gt;\u0026gt; /tmp/nsupdate $ECHO \u0026#34;update add $HOST 600 A $IP\u0026#34; \u0026gt;\u0026gt; /tmp/nsupdate $ECHO \u0026#34;send\u0026#34; \u0026gt;\u0026gt; /tmp/nsupdate $NSUPDATE -k ${KEY} -v /tmp/nsupdate \u0026gt;\u0026gt; /var/log/nsupdate.log 2\u0026gt;\u0026amp;1 else : fi fi Meine Empfehlung für DNS-Server mit Netcup # Für meinen DNS-Betrieb nutze ich aktuell zwei VPS Nano von Netcup. Diese kleinen und kostengünstigen Server sind für DNS-Dienste völlig ausreichend. Wenn du jedoch etwas mehr Leistung benötigst, könntest du dir die VPS 250 G11s anschauen. Diese bieten dir zusätzliche Ressourcen und bleiben dennoch budgetfreundlich.\nHinweis zu Affiliate-Links # Um meine Arbeit und Inhalte zu unterstützen, stelle ich dir einen Affiliate-Link zur Verfügung. Solltest du über diesen Link ein Produkt bei Netcup mieten, erhalte ich eine kleine Provision. Für dich entstehen dadurch keine zusätzlichen Kosten.\nHier der Link:\nTransparenz ist mir wichtig:\nIch möchte klarstellen, dass dieser Beitrag keinen kommerziellen Charakter hat und rein informative Zwecke verfolgt. Die Nutzung des Affiliate-Links ist vollständig freiwillig. Vielen Dank, falls du dich entscheidest, mich auf diesem Weg zu unterstützen! ","date":"4 Dezember 2024","externalUrl":null,"permalink":"/posts/dyndns-update-bind9/","section":"Posts","summary":"","title":"Automatische Aktualisierung deiner dynamischen IP auf deinem DNS-Server(Bind9)","type":"posts"},{"content":"","date":"4 Dezember 2024","externalUrl":null,"permalink":"/tags/bind9/","section":"Tags","summary":"","title":"Bind9","type":"tags"},{"content":" Wenn du auf deinem Raspberry Pi 4 oder Raspberry Pi 5 Docker-Container betreibst und mit docker stats die Auslastung überprüfen möchtest, kann es vorkommen, dass die RAM-Nutzung nicht angezeigt wird. Dieses Problem kannst du leicht selbst überprüfen:\ndocker stats Die Ausgabe könnte etwa so aussehen (hier ein gekürztes Beispiel):\nCONTAINER ID NAME CPU% MEM USAGE/LIMT MEM% NET I/O PID bfe55a3d5a38 homeassi 1.8% 0B / 0B 0.00% 41.8kB 30 Wie du siehst fehlen hier die Angaben zur RAM-Auslastung. Ich zeige dir, wie du dieses Problem beheben kannst, damit die RAM-Daten korrekt angezeigt werden.\ncmdline.txt bearbeiten # Die Lösung liegt darin, bestimmte Parameter in der Datei cmdline.txt zu aktivieren. Öffne die Datei mit einem Texteditor:\nvim /boot/firmware/cmdline.txt Der Inhalt der Datei sieht in etwa so aus:\nconsole=serial0,115200 console=tty1 root=PARTUUID=0cabf6fc-02 rootfstype=ext4 fsck.repair=yes rootwait cfg80211.ieee80211_regdom=DE Füge nun am Ende der Zeile die folgenden Parameter hinzu:\ncgroup_enable=memory cgroup_memory=1 Die Datei sollte danach so aussehen:\nconsole=serial0,115200 console=tty1 root=PARTUUID=0cabf6fc-02 rootfstype=ext4 fsck.repair=yes rootwait cfg80211.ieee80211_regdom=DE cgroup_enable=memory cgroup_memory=1 System neu starten # Damit die Änderungen wirksam werden, musst du dein System einmal neu starten. Die Parameter werden beim Booten an den Kernel übergeben.\nreboot Fazit # Nach dem Neustart kannst du erneut docker stats ausführen. Die RAM-Auslastung sollte jetzt korrekt angezeigt werden. Falls du eine visuelle Anleitung bevorzugst, findest du hier ein hilfreiches Video.\nHinweis zu Affiliate-Links # Um meine Arbeit und Inhalte zu unterstützen, stelle ich dir einen Affiliate-Link zur Verfügung. Solltest du über diesen Link ein Produkt bei Netcup mieten, erhalte ich eine kleine Provision. Für dich entstehen dadurch keine zusätzlichen Kosten.\nHier der Link:\nTransparenz ist mir wichtig:\nIch möchte klarstellen, dass dieser Beitrag keinen kommerziellen Charakter hat und rein informative Zwecke verfolgt. Die Nutzung des Affiliate-Links ist vollständig freiwillig. Vielen Dank, falls du dich entscheidest, mich auf diesem Weg zu unterstützen! ","date":"13 Juli 2024","externalUrl":null,"permalink":"/posts/docker-ram-usage/","section":"Posts","summary":"","title":"Docker RAM Usage der Container auf dem Raspberry Pi 5 anzeigen","type":"posts"},{"content":" In diesem Beitrag zeige ich dir, wie du Paperless-NGX, eine Lösung für das digitale Dokumentenmanagement, mit Docker Compose einrichtest. Dabei legen wir den Fokus auf eine saubere Konfiguration, die leicht zu verwalten und sicher ist.\nOrdnerstruktur vorbereiten # Als Erstes benötigst du einen Ordner, in dem alle Daten und Konfigurationsdateien des Containers gespeichert werden. Achte darauf, dass deine Festplatte genügend freien Speicherplatz bietet. Den Ordner legst du mit folgendem Befehl an:\nmkdir -p /daten/docker/paperless Docker Compose-Datei erstellen # Wechsle in den gerade erstellten Ordner und erstelle eine Datei namens docker-compose.yml. Diese Datei enthält die Konfiguration für die Container und deren Umgebung. Achte darauf, die Variablen wie Benutzername, Passwort und URL an deine Bedürfnisse anzupassen. Auch die Umgebungsdateien (.env und docker-compose.env) müssen im gleichen Ordner wie die docker-compose.yml liegen, damit alles korrekt funktioniert.\ndocker-compose.yml # # Docker Compose für Paperless-NGX services: broker: image: docker.io/library/redis:7 container_name: paperless-redis restart: unless-stopped volumes: - /daten/docker/paperless/redis:/data db: image: docker.io/library/postgres:15 container_name: paperless-db restart: unless-stopped volumes: - /daten/docker/paperless/pgdata:/var/lib/postgresql/data env_file: .env environment: POSTGRES_DB: paperless POSTGRES_USER: ${paperless_user} POSTGRES_PASSWORD: ${paperless_password} webserver: image: ghcr.io/paperless-ngx/paperless-ngx:latest container_name: paperless-webserver restart: unless-stopped depends_on: - db - broker ports: - \u0026#34;8085:8000\u0026#34; volumes: - /daten/docker/paperless/data:/usr/src/paperless/data - /daten/docker/paperless/media:/usr/src/paperless/media - /daten/docker/paperless/export:/usr/src/paperless/export - /daten/docker/paperless/consume:/usr/src/paperless/consume env_file: - docker-compose.env - .env environment: PAPERLESS_REDIS: redis://broker:6379 PAPERLESS_DBHOST: db PAPERLESS_DBUSER: ${paperless_user} PAPERLESS_DBPASS: ${paperless_password} Environment-Dateien # docker-compose.env # In der Datei docker-compose.env definierst du Paperless-spezifische Einstellungen. Diese Datei könnte wie folgt aussehen:\n# Paperless-Einstellungen PAPERLESS_URL=https://paperless.lan.reish.de PAPERLESS_TIME_ZONE=Europe/Berlin PAPERLESS_OCR_LANGUAGE=deu # Eigene Einstellungen PAPERLESS_APP_TITLE=DMS PAPERLESS_FILENAME_FORMAT={correspondent}/{created_year}/{title} PAPERLESS_OCR_MODE=redo PAPERLESS_OCR_CLEAN=clean .env # Hier speicherst du sensible Daten wie Benutzername und Passwort, um diese aus der Hauptkonfiguration auszulagern. So schützt du deine Daten vor ungewolltem Zugriff oder versehentlichen Leaks. Der Inhalt könnte so aussehen:\npaperless_user=\u0026lt;dein-Benutzer\u0026gt; paperless_password=\u0026lt;dein-Passwort\u0026gt; paperless_db=\u0026lt;dein-Datenbankname\u0026gt; Ersetze \u0026lt;dein-Benutzer\u0026gt;, \u0026lt;dein-Passwort\u0026gt; und \u0026lt;dein-Datenbankname\u0026gt; durch deine eigenen Werte.\nContainer starten # Nachdem du die Dateien erstellt und angepasst hast, kannst du die Container starten:\nErstelle die Container und starte sie im Hintergrund:\ndocker compose up -d Lege einen Superuser für die Anmeldung in Paperless-NGX an:\ndocker exec -it paperless-webserver /bin/bash python3 manage.py createsuperuser Gib hier deinen Benutzernamen, deine E-Mail-Adresse und dein Passwort ein, um den Zugang zu erstellen.\nNun kannst du dich über die Web Oberfläche mit den eben erstellten Anmeldeinformationen einloggen. Falls du eine visuelle Anleitung bevorzugst findest du hier ein hilfreiches Video\nHinweis zu Affiliate-Links # Um meine Arbeit und Inhalte zu unterstützen, stelle ich dir einen Affiliate-Link zur Verfügung. Solltest du über diesen Link ein Produkt bei Netcup mieten, erhalte ich eine kleine Provision. Für dich entstehen dadurch keine zusätzlichen Kosten.\nHier der Link:\nTransparenz ist mir wichtig:\nIch möchte klarstellen, dass dieser Beitrag keinen kommerziellen Charakter hat und rein informative Zwecke verfolgt. Die Nutzung des Affiliate-Links ist vollständig freiwillig. Vielen Dank, falls du dich entscheidest, mich auf diesem Weg zu unterstützen! ","date":"10 Mai 2024","externalUrl":null,"permalink":"/posts/docker-paperless-ngx/","section":"Posts","summary":"","title":"Installation und Einrichtung von Paperless-NGX mit Docker Compose","type":"posts"},{"content":"","date":"10 Mai 2024","externalUrl":null,"permalink":"/tags/paperless/","section":"Tags","summary":"","title":"Paperless","type":"tags"},{"content":" Über mich # Einfach nur installieren“ kann jeder. Ich bin Philipp, und ich gehöre zu der Sorte Mensch, die erst dann zufrieden ist, wenn sie die letzte Schraube im System verstanden hat.\nAls Linux-Systemadministrator verbringe ich auch nach Feierabend viel Zeit in meinem Homelab. Warum? Weil es mir unglaublich viel Spaß macht, eigene Setups zu entwerfen, mit Virtualisierung zu experimentieren und meine Infrastruktur Schritt für Schritt zu optimieren.\nDiese Begeisterung fürs „Selberbauen“ hört beim Monitor aber nicht auf: Mit 3D-Druck und IoT bringe ich meine IT-Projekte in die physische Welt. Am Ende des Tages bin ich ein Tüftler: Ich baue Dinge auf, fordere sie heraus und lerne aus jedem Crash, wie man es beim nächsten Mal noch smarter lösen kann.\n","externalUrl":null,"permalink":"/about/","section":"Networkstudents Blog","summary":"","title":"","type":"page"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":" Allgemeine Hinweise # Hiermit informiere ich Sie über die Erhebung personenbezogener Daten bei der Nutzung meiner Website.\nPersonenbezogene Daten umfassen gemäß der Definition in Art. 4 Nr. 1 der Verordnung (EU) 2016/679 (im Folgenden „Datenschutz-Grundverordnung\u0026quot; oder „DSGVO\u0026quot;) alle Informationen, die sich auf eine identifizierbare oder identifizierte Person beziehen. Dazu zählen beispielsweise Name, Adresse, E-Mail-Adresse und Nutzerverhalten. Weitere Begriffe wie „Verarbeitung\u0026quot;, „Verantwortlicher\u0026quot;, „Auftragsverarbeiter\u0026quot; und „Einwilligung\u0026quot; sind ebenfalls in Art. 4 DSGVO definiert.\nIch verarbeite personenbezogene Daten grundsätzlich nur, wenn dies zur Bereitstellung einer funktionsfähigen Website sowie der Inhalte und Dienstleistungen, die ich anbiete, notwendig ist. Eine Verarbeitung personenbezogener Daten erfolgt in der Regel nur, wenn Sie mir gemäß Art. 6 Abs. 1 lit. a) DSGVO Ihre Zustimmung gegeben haben oder wenn dies aufgrund gesetzlicher Bestimmungen, insbesondere durch eine der in Art. 6 Abs. 1 lit. b) bis f) DSGVO genannten Rechtsgrundlagen, erlaubt ist.\nIhre personenbezogenen Daten werden entweder gelöscht oder gesperrt, sobald sie für die ursprünglich vorgesehenen Zwecke nicht mehr benötigt werden. Eine längere Speicherung kann erfolgen, wenn dies durch nationale oder europäische Gesetze vorgeschrieben ist, denen wir unterliegen. In solchen Fällen werden die Daten gesperrt oder gelöscht, sobald die gesetzlich vorgeschriebene Speicherfrist abgelaufen ist. Sollte die Speicherung der Daten jedoch für einen Vertragsabschluss oder die Erfüllung eines Vertrags notwendig sein, bleiben die Daten entsprechend länger gespeichert.\nSoweit ich für einzelne Funktionen meiner Webseite auf beauftragte Dienstleister zurückgreife oder Ihre Daten für werbliche Zwecke nutzen möchte, werde ich Sie untenstehend im Detail über die jeweiligen Vorgänge informieren.\nVerantwortliche Stelle # Kontakt zum Verantwortlichen # Einzelheiten zur verantwortlichen Stelle können Sie meinem Impressum entnehmen.\nIhre Rechte # Sie haben mir gegenüber hinsichtlich der Sie betreffenden personenbezogenen Daten die nachfolgenden Rechte:\nRecht auf Auskunft Recht auf Berichtigung oder Löschung Recht auf Einschränkung der Verarbeitung Recht auf Widerspruch gegen die Verarbeitung Recht auf Datenübertragbarkeit Sie haben zudem das Recht, sich bei einer Datenschutzaufsichtsbehörde über die Verarbeitung Ihrer personenbezogenen Daten durch mich zu beschweren.\nErhebung personenbezogener Daten bei Besuch der Website # Wenn Sie meine Webseite aufrufen, ohne mir auf andere Weise Informationen zu übermitteln („informatorische Nutzung“), erfasse ich nur die personenbezogenen Daten, die Ihr Webbrowser an meine Server übermittelt. Zur Anzeige der Webseite und zur Gewährleistung von Stabilität und Sicherheit werden dabei folgende Daten erfasst:\nIP-Adresse Datum und Uhrzeit der Anfrage Zeitzonendifferenz zur GMT Inhalt der Webseite Zugriffsstatus (HTTP-Status) übertragene Datenmenge anfordernde Webseite Webbrowser Betriebssystem Sprache und Version des Browsers Die oben genannten Daten werden ebenfalls in sogenannten Logfiles auf meinen Servern gespeichert. Eine Speicherung dieser Daten zusammen mit anderen personenbezogenen Daten von Ihnen erfolgt jedoch nicht.\nDie Speicherung der oben genannten Daten in Logfiles dient dazu, die Funktionsfähigkeit und Optimierung meiner Webseite sicherzustellen sowie die Sicherheit meiner informationstechnischen Systeme zu gewährleisten.\nEine Auswertung dieser Daten zu Marketingzwecken erfolgt nicht. Mein berechtigtes Interesse an der Datenverarbeitung liegt in den genannten Zwecken. Die Rechtsgrundlage ist Art. 6 Abs. 1 Satz 1 lit. f) DSGVO. Die Daten werden gelöscht, sobald die jeweilige Sitzung beendet ist. Die Erhebung dieser Daten ist für den Betrieb der Webseite zwingend erforderlich, daher besteht keine Widerspruchsmöglichkeit.\nKontaktformular und E-Mail-Kontakt # Bei einer Kontaktaufnahme per E-Mail werden die von Ihnen übermittelten personenbezogenen Daten gespeichert.\nAuf meiner Webseite steht ein Kontaktformular zur Verfügung, mit dem Sie mich erreichen können. Die dabei eingegebenen Daten (z. B. Name und E-Mail-Adresse) werden übermittelt und gespeichert.\nDie Daten werden ausschließlich zur Bearbeitung Ihrer Anfrage verwendet. Eine Weitergabe an Dritte erfolgt nicht. Zusätzlich erfasse ich Ihre IP-Adresse sowie den Zeitpunkt der Übermittlung.\nDie Verarbeitung erfolgt ausschließlich zur Bearbeitung Ihrer Anfrage.\nDie Verarbeitung zusätzlicher Daten dient dazu, Missbrauch zu verhindern und die Sicherheit meiner IT-Systeme zu gewährleisten.\nRechtsgrundlagen:\nArt. 6 Abs. 1 lit. a) DSGVO (Einwilligung) Art. 6 Abs. 1 lit. f) DSGVO (berechtigtes Interesse) Art. 6 Abs. 1 lit. b) DSGVO (Vertrag, falls relevant) Nach abschließender Bearbeitung Ihrer Anfrage werden die Daten unter Berücksichtigung gesetzlicher Fristen gelöscht. Sie können der Speicherung jederzeit widersprechen. In diesem Fall kann Ihre Anfrage jedoch nicht weiter bearbeitet werden. Der Widerruf ist per E-Mail an die im Impressum angegebene Adresse möglich.\nFragen zum Datenschutz? # Bei Fragen zu dieser Datenschutzerklärung wenden Sie sich gerne an mich:\n📧 post@philippreis.de\n","externalUrl":null,"permalink":"/datenschutz/","section":"Networkstudents Blog","summary":"","title":"Datenschutzerklärung","type":"page"},{"content":" Angaben gemäß § 5 TMG # Name\nPhilipp Reis\nAnschrift\nNürnberger Str. 28b\n01187 Dresden\nDeutschland\nTelefon\n+49 151 20584606\nE-Mail\npost@philippreis.de\nWebsite\nphilippreis.de\nVerantwortlich für den Inhalt nach § 55 Abs. 2 RStV # Philipp Reis\nNürnberger Str. 28b\n01187 Dresden\nHaftung für Inhalte # Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als Diensteanbieter jedoch nicht unter der Verpflichtung, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen.\nVerpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.\nHaftung für Links # Unser Angebot enthält Links zu externen Websites Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung nicht erkennbar.\nEine permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Links umgehend entfernen.\nUrheberrecht # Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite sind nur für den privaten, nicht kommerziellen Gebrauch gestattet.\nSoweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.\nRechtlicher Hinweis # Diese Website und alle darin enthaltenen Informationen werden in der vorliegenden Form bereitgestellt. Wir übernehmen keine Gewähr für die Aktualität, Richtigkeit und Vollständigkeit der bereitgestellten Informationen.\n","externalUrl":null,"permalink":"/impressum/","section":"Networkstudents Blog","summary":"","title":"Impressum","type":"page"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"}]