Netzwerk Spielereien

Erstellt: 05.04.2022 Bearbeitet: 05.12.2025

UDP-Verbindung mit netcat und tcpdump prüfen

Auf dem Zielhost kann man z. B. mit tcpdump schauen, ob Pakete ankommen.

tcpdump -n port 10011 -vv

Und von einem anderen Host kann man diesen Port z. B. mit netcat anpingen.

nc -vz -u 192.168.100.100 10011
graph RL A[nc] -->|UDP ping| B(tcpdump port 10011)

Netcat als Sender und Empfänger über UDP benutzen

Mit -l kann man netcat auch lauschen lassen (Empfänger).

nc -luk 192.168.100.100 20000

Und mit -uv eine Verbindung von einem anderen Client herstellen und etwas zum Host senden (Sender).

nc -uv 192.168.100.100 20000
hello host!<ENTER>

Das sollte auf dem Empfänger ein hello host! ausgeben.

graph LR A[Sender] -->|UDP package| B(Empfänger)

SPF-Record erstellen und prüfen

Erstellt: 28.03.2022 Bearbeitet: 05.12.2025

SPF (Sender Policy Framework) ist ein recht einfaches Verfahren, um Missbrauch der eigenen E-Mails ein wenig zu verhindern. Mit dem SPF-Domain-Record gibt man an, aus welchen Netzen E-Mails der eigenen Domain versendet werden dürfen.

SPF-Record abfragen

Der einfachste Weg ist wohl, mit host oder dig eine einfache DNS-Abfrage zu machen. Das geht z. B. mit

host -t TXT gmx.de | grep -i spf
dig heise.de TXT | grep -i spf
dig gmx.de TXT | grep -i spf
dig gmx.net TXT | grep -i spf
nslookup -q=TXT gmx.net | grep -i spf

Bedeutung der Felder

Feld Bedeutung
v Version des Records, z. B. v=spf1
ip4 IPv4-Adresse oder Adressbereich, z. B. ip4:1.2.3.0/24
ip6 IPv6-Adresse oder Adressbereich, z. B. ip6:2a02:2e0:3fe:1001::/64
a Ein A- oder AAAA-Record der befragten (oder explizit angegebenen) Domäne, der die IP-Adresse des Senders enthält
mx Ein MX-Record der befragten (oder explizit angegebenen) Domäne, der die IP-Adresse des Senders enthält
-all Alle anderen hier nicht aufgeführten Sender sind nicht autorisiert und sollen abgewiesen werden.
~all Softfail, nicht autorisierte Sender; der Empfänger soll diesen Fehlschlag aber großzügig behandeln.
?all Neutral, die Direktive definiert Sender, über deren Legitimität nichts ausgesagt werden soll; der Sender muss so behandelt werden, als wäre kein Qualifikator angegeben.
include Eine zusätzliche SPF-Anfrage zur im Include-Statement angegebenen Domain, die die IP-Adresse des Senders enthält, z. B. include:_spfdiv.heise.de
redirect Der SPF-Record einer anderen Domain soll eingeholt und ausgewertet werden, z. B. redirect=gmx.net

Beispiel

Aus den Testabfragen sollte sich der restliche Aufbau von selbst erklären.

Im Grunde ist es immer „Version, Regelwerk der eigenen Infrastruktur, Rest mit all“.

Beispiel: v=spf1 mx:mx.domain.com a:domain.com ip4:1.2.3.0/24 ~all

Wie testet man die MTU-Größe

Erstellt: 26.03.2022 Bearbeitet: 05.12.2025

Wie oft hat man das Problem, dass man in einem Netzwerk unerklärliche Verbindungsabbrüche hat. Oft ist der Grund einfach eine falsche MTU-Größe, die dazu führt, dass zwar Kommunikation möglich ist, aber bei größeren datenabhängigen Übertragungen plötzlich nichts mehr geht.

Grundlagen

Die MTU (Maximum Transmission Unit) definiert die effektiv nutzbare Datenmenge und ist mit jeder zusätzlichen Netzwerkschicht bzw. unterschiedlichen Protokollen anders. Dazu gehören z. B. IPv4 vs. IPv6, UDP vs. TCP oder Ethernet vs. Internet oder VPN. Mit jedem zusätzlichen Feature kommen ein paar Bytes zum Header dazu, der die nutzbare Datengröße verringert. In einem lokalen Netz hat man meist eine MTU von 1500 und Richtung Internet etwa 1472.

Eine zu kleine Größe führt dazu, dass die Daten in zu viele Pakete aufgesplittet werden, man so mehr Header-Daten senden muss und dadurch einen schlechteren Durchsatz hat. Wohingegen zu große Blöcke zu Netzwerkproblemen führen.

Testen

Mit Ping kann man die MTU-Werte testen. Ping benutzt ICMP als Protokoll, was eine Header-Größe von 28 Bytes hat mit IPv4 (IPv4 = 20 Bytes + ICMP = 8 Bytes = 28).

ping -D -c 2 -s 1472 8.8.8.8

Das sollte etwa so aussehen:

PING 8.8.8.8 (8.8.8.8): 1472 data bytes
36 bytes from x.1x.1xx.1xx: frag needed and DF set (MTU 1492)
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 05dc 0000   0 0000  3e  01 646f 192.1xx.1x.2xx  8.8.8.8

Jetzt sagt uns Ping, das Paket müsste fragmentiert werden.

Wenn man die Blockgröße viel zu groß wählt, sieht es dann so aus:

ping -D -c 2 -s 1473 8.8.8.8

PING 8.8.8.8 (8.8.8.8): 1473 data bytes
ping: sendto: Message too long
ping: sendto: Message too long

Also testen wir es nochmal mit den vorgeschlagenen 1492. 1492 - 28 = 1464

ping -D -c 2 -s 1464 8.8.8.8

PING 8.8.8.8 (8.8.8.8): 1464 data bytes
76 bytes from 8.8.8.8: icmp_seq=0 ttl=115 time=19.860 ms

Das heißt also, wir können eine MTU von 1492 in dieser Verbindung verwenden.

Windows

Unter Windows sind die Argumente ein wenig anders, aber es funktioniert dort genauso.

# Windows PowerShell
ping -f -n 2 -l 1464 8.8.8.8

Ping wird ausgeführt für 8.8.8.8 mit 1464 Bytes Daten:
Antwort von 8.8.8.8: Bytes=68 (gesendet 1464) Zeit=19ms TTL=115

Visual packet size calculator

How to Calculate MTU for Tunnels

Git Kniffe und Tricks

Erstellt: 06.12.2021 Bearbeitet: 05.12.2025

Einen alten Branch-Namen nach Merge neu nutzen

git checkout master
git pull
git branch -d branchname
git checkout -b branchname
git push origin branchname

Das geht aber nur, wenn der Branch schon gemerged und gelöscht wurde!

chmod auf eine Datei im Git-Repo

git update-index --chmod=+x path/to/file

Um das Exec-Bit zu löschen:

git update-index --chmod=-x path/to/file

Anzeigen von chmod im Git-Index

git ls-files --stage path/to/file
cd destdir
ln -s ../../../existing_file symlinkfile
git add symlinkfile
git ls-files -s symlinkfile     # zeigt Link
git cat-file -p linkhash        # zeigt Quelle

Wenn das Zielfile Git schon bekannt war, muss man es erst aus Git löschen, bevor man es mit add hinzufügen kann!

Git Config prüfen

Zum Auflisten der aktuellen Config gibt es die Option --list:

git config --list

Und zum Ändern einer Option kann man sie z. B. mit --global ändern:

git config --global user.name "dein Name"

Git das Passwort speichern erlauben

Git bringt eine einfache Methode zum Passwortspeichern mit, die allerdings nicht unbedingt sicher ist. Zum Aktivieren muss man nur diese Zeile ausführen und Git speichert das Passwort für die Repos.

git config --global credential.helper store

Nun muss man nur noch einmal z. B. ein

git pull

ausführen und er speichert die Zugangsdaten für das nächste Mal in der Datei ~/.git-credentials im Klartext. Es ist also eine sehr unsichere Sache.

Alternativ kann man auch nur einen Memory-Cache mit Timeout nutzen:

git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'

Dann hält er das Passwort nur im RAM und verwirft es nach dem Timeout.

Es existieren auch noch ein paar andere Methoden, hier eine interessante Zusammenfassung auf stackoverflow.com

git mtime restore

Manchmal braucht man die mtime für Dateien und wenn man eine Datei nicht modifiziert hat, wird die neue mtime eventuell nicht richtig gesetzt. Für dieses Problem gibt es aber eine einfache Lösung:

sudo apt install git-restore-mtime
cd [repo]
git restore-mtime

Commit-Log in der Shell

git log --graph --all --decorate --oneline --simplify-by-decoration

Umgang mit Docker und Kubernetes Pods

Erstellt: 24.11.2021 Bearbeitet: 02.10.2025

Das wird mein erster FAQ-Artikel, der sich um Docker drehen wird. Ich werde hier mit der Zeit immer mal wieder kleine hints hinzufügen, damit ich nicht lange suchen muss.

Eine laufende Docker Instanz betreten

Docker

    docker ps
    docker exec -it containerid bash

Kubernetes

    kubectl get pods -n namespace
    kubectl -i -t -n namespace containerid bash

Eine shell in einem pod über proxy (jumphost) und eigner Config öffnen

    KUBECONFIG=~/.kube/config_xxl https_proxy=http://127.0.0.1:8888 kubectl exec -it -n namespace poduniname -- bash

Container logs lesen

-f, --follow hat den gleichen effect wie tail -f

Docker

    docker ps
    docker logs containerid -f

Kubernetes

    kubectl get pods -n namespace
    kubectl logs -n namespace containerid -f

Ereignisübersicht

Einen namesspace

    kubectl get events --sort-by=.metadata.creationTimestamp -n namesspace

Alle namespaces mit mehr output

    kubectl get events --all-namespaces -o wide

kubectl Spickzettel

 1  2  3  4  5  6  7  8  
Chronologische Sortierung