TFTP Server auf Einfach

TFTP ohne nerviges Gefrickel

TFTP ist das Trival File Transfer Protocol. Es wird bei Freifunk vor allem dazu verwendet, um dem Bootloader eines Routers Image-Dateien zu schicken, wenn man diese flashen möchte.

Im Internet gibt es bereits einige Tutorials um einen TFTP-Server einzurichten. Diese sind meistens eher etwas älter und gehen davon aus, dass man dauerhaft einen TFTP-Server braucht. Ich fand diese Tutorials eher anstrengend, da sie meistens eine Menge Gebastel an irgendwelchen systemd-units enthielten.

Aber fürs Eben-mal-schnell-einen-Router-flashen brauchen wir das alles ja eigentlich gar nicht. Deshalb hier eine kleine Anleitung, damit ich nicht mehr so viel Hustle beim Nachschauen habe:

TFTP-Server schnell aufsetzen

  1. Server und Client installieren (hier für Fedora)
$ sudo dnf install tftp tftp-server
  1. Server-Verzeichnis anlegen und Rechte setzen:
$ sudo mkdir -p /var/lib/tftpboot
$ sudo chown -R nobody:nobody /var/lib/tftpboot
  1. Server starten.

Ab Fedora 36 verhindert die Firewall den Zugriff auf den TFTP-Server standardmäßig. Ich schalte sie dann meistens kurz ab: sudo systemctl stop firewalld.service

Wir brauchen keinen Daemon, der immer horcht. Also starten wir den Server im Vordergrund

sudo in.tftpd -L -c -p -s /var/lib/tftpboot
  • -L: listen, hört auf eingehende Verbindungen, aber im Vordergrund
  • -c: create, erlaubt neue Dateien zu erstellen. So können wir das Image später hochladen
  • -p: permissive, keine weiteren Nutzer-Checks
  • -s: secure, wechselt beim Starten in das angegebene Verzeichnis
  1. Image hochladen
$ tftp localhost
tftp> put IMAGE-NAME
tftp> quit
  1. Flashen beginnen

Diese Schritte sollten genügen, dass das gewünschte Image im tftp-Server liegt und von einem Bootloader geladen werden kann. Man kann das nachprüfen, indem man ein Listing des Serververzecihnis macht: ls /var/lib/tftpboot/.

Edit: Erzähl mir mehr

2023-09-02: Perry hatte mir neulich einen coolen Hinweis geschickt, wie man den tftp-server dazu bekommt, ein bisschen mehr darüber zu erzählen, was gerade passiert:

$ tftp localhost
tftp> trace
tftp> put IMAGE-NAME
tftp> trace

Das trace schaltet die zusätzlichen Infos ein. Mit einem zweitentrace schaltet man diese wieder aus. Vielen Dank an Perry für diesen Hinweis! :)

 Share!