PXE Server mit DNSmasq

Wenn man, wie ich, des öfteren die PC’s von Freund und Familie zum Service da hat, dann ist nützlich wenn man seine Tool Sammlung an einem zentralen Ort hat. Entweder man hat zig USB Sticks oder CD-Roms immer griffbereit, oder man macht es wie ich und nutzt das eigene NAS (in meinem Fall mein unRaid Server) als PXE Server.

Schon lange wollte ich das umsetzen, bloss jeder Guide den ich gefunden hatte war relative kompliziert und hätte es nötig gemacht das ich einen zusätzlichen DHCP Server anstatt dem in meiner FritzBox benutze.

Hätte ich wie früher einen Router auf OpenWRT Basis genutzt wäre das kein Problem gewesen, aber nun managed meine Fritzbox mein Netzwerk und das soll auch so bleiben.

Da fiel mir auf einmal ein Artikel aus der c’t 15/2012 in die Hände welcher beschreibt wie man deren Antiviren Linux desinfec’t per PXE bootet. Das geniale daran ist das DNSmasq hier im Proxy Modus läuft, also problemlos parallel zu einem bestehenden DHCP Server betrieben werden kann, ausserdem ist darin schon ein TFTP Server vorhanden.

Des weiteren ist DNSmasq für alle Linux Distributionen vorhanden, so das Sie auch auf NAS Systemen von Synology etc. so das das ganze auch darauf laufen sollte.

Ich möchte das ganze hier einmal exemplarisch an einer PXE installation der Linux Live Distribution Clonezilla beschreiben. Ich nutze diese um regelmäßig komfortabel Backups meiner HTPC’s auf dem unRaid Server abzulegen.

Um Clonezilla zu booten muss auf dem NAS noch eine NFS Freigabe existieren, von der aus das OS geladen werden kann, denn nur die Init-Ram-Disk wird per TFTP geladen.

Zuerst müssen wir die Clonzilla Live Zip herunterladen und auf unseren PXE Server laden:

mkdir -p /srv/tftp/clonezilla/live

In diesen Ordner kopieren wir jetzt die Dateien vmlinuz, initrd.img und filesystem.squashfs aus dem live Ordner der Zip Datei.

In den Ordner Clonezilla auf unserem Server kopieren Sie nun die Datei menu.c32 aus dem syslinux Ordner der Zip Datei und die Datei pxelinux.0. Diese können wir entweder dadurch erhalten das wir das Pakate syslinux-common installieren, dann liegt die Datei im Verzeichnis /usr/lib/syslinux oder wir können Sie downloaden pxelinux.0.

Nun brauchen wir noch ein Verzeichnis:

mkdir -p /srv/tftp/clonezilla/pxelinux.cfg

In diesem Verzeichnis legen wir die Datei mit dem Namen default an. Ich poste hier meine default Datei, diese bietet zwei Optionen einmal zum automatischen sichern und einmal für einen Restore, wo man jedoch noch ein paar Knöpfchen drücken muss:

SAY Starte Clonezilla
PROMPT 0
TIMEOUT 0
DEFAULT menu.c32
MENU TITLE Clonezilla

LABEL clonezilla-save
MENU DEFAULT
MENU LABEL CLONEZILLA-SAVE
KERNEL live/vmlinuz
APPEND boot=live initrd=live/initrd.img netboot=nfs nfsroot=EURENFSIP:/srv/tftp/clonezilla config noswap nolocales edd=on nomodeset toram=filesystem.squashfs ocs_lang="de_DE.UTF-8" ocs_live_keymap="/usr/share/keymaps/i386/qwertz/de-latin1.kmap.gz" ocs_prerun1="mount -t nfs EURENFSIP:PFAD/FUER/BACKUPS /home/partimag" ocs_prerun2="sleep 5" ocs_live_run="/opt/drbl/sbin/ocs-sr -q2 -j2 -z1 -i 2000 -sc -p reboot savedisk autoname sda" ocs_live_extra_param="" ocs_live_batch="no" vga=788 nosplash noprompt

LABEL clonezilla-restore
MENU LABEL CLONEZILLA-RESTORE
KERNEL live/vmlinuz
APPEND boot=live initrd=live/initrd.img netboot=nfs nfsroot=EURENFSIP:/srv/tftp/clonezilla config noswap nolocales edd=on nomodeset toram=filesystem.squashfs ocs_lang="de_DE.UTF-8" ocs_live_keymap="/usr/share/keymaps/i386/qwertz/de-latin1.kmap.gz" ocs_prerun1="mount -t nfs EURENFSIP:PFAD/FUER/BACKUPS /home/partimag" ocs_prerun2="sleep 5" ocs_live_batch="no" vga=788 nosplash noprompt

Wenn Ihr wissen möchtet was die ganzen Optionen bedeutet, dann schaut euch mal auf der Website von Clonezilla um.

Damit ist Clonezilla an sich fertig. Nun müssen wir noch DNSmasq einrichten. Nachdem Ihr DNSmasq installiert habt müsst Ihr noch die Konfigurationsdatei anpassen:

port=0
log-dhcp
enable-tftp
tftp-root=/srv/tftp
dhcp-range=192.168.1.0,proxy
pxe-prompt="Taste F8 zeigt Auswahl",5
pxe-service=X86PC,"Starten von Festplatte",0
pxe-service=X86PC,"mit Clonezilla starten",clonezilla/pxelinux

Die DHCP Rangt muss natürlich zu euren Netzwerk passen. Wenn DNSmasq die einstellungen geladen hat kann man auch schon den ersten PC starten und Ihn per Netzwerk booten lassen. Wenn man beim Netzwerkstart F8 drück dann sollte man Clonezilla als Auswahl bekommen und direkt ein Backup anlegen können.

9 Gedanken zu „PXE Server mit DNSmasq“

  1. Hi Björn! Vielen Dank für die Informationen!

    Ich habe bei der ct-Anleitung in Verbindung mit Ubuntu 12.04 Server das Problem, dass nach der Installation von dnsmasq in der /etc/resolv.conf die 127.0.0.1 als DNS hinterlegt ist. Allerdings werden Anfragen an 127.0.0.1 nicht beantwortet, sprich, DNS ist tot.

    Hast du (oder sonst jemand) ein ähnliches Problem und vielleicht sogar einen Lösungsansatz? Wäre super!

  2. Hey Björn,

    ich versuche heute schon etwas weiter zu gehen. Ich hatte noch einen kleinen PC, darauf habe ich unter Ubuntu 14.04 eine PXE Umgebung eingerichtet, in der die Dell Diagnose Tools gebootet werden (Da auf einer LAN-Party bei der ich helfe solche Server eingesetzt werden), eine Debian Netinstall und memtest86+ gestartet werden kann. Jedoch mit eigenem DHCP Server etc.

    Jetzt wollte ich das in mein aktives Netzwerk wie du einrichten, jedoch frag ich mich gerade in der dnsmasq Config eine Sache. Die Zeilen:
    pxe-service=X86PC,“Starten von Festplatte“,0
    pxe-service=X86PC,“mit Clonezilla starten“,clonezilla/pxelinux sind dann die erste Auswahl wenn ich boote, wähle ich dann das zweite aus, startet da gleich clonezilla, oder kommt dann das nächste Bootmenü von pxelinux?

  3. Hallo Björn, es ist nun schon etwas älter aber ich versuche mich gerade an diesem Thema. Zuerst nach der CT anleitung und nach einen Fehlschlag wollte ich deins ausprobieren.

    Ich bekomme beim bestätigen der Auswahl von Clonzilla folgenden Fehler
    „starte Clonezilla“
    „menu.c32: not a COM32R image“
    boot:

    Beim laden der Default Datei steht rechts „ok“ da.
    Das ganze ist ein Teil von meiner Prüfungsarbeit :-/

    Hoffe du kommst da irgendwie mit einer schlauen Idee um die Ecke 😀

    Lg Oliver

    1. Ohne die Inhalte deiner DNSmasq Config und der pxelinux.cfg zu kennen kann ich nichts sagen. Kannst die beiden DAteien ja mal bei Pastebin uppen.

      1. Hatte ausversehen als neune Kommentar gepostet. Hab mal nach der Fehlermedlung „help“ eingegeben und dort steht das er das Kernel Image nicht finden konnte. Das sollte ja den Fehler schon ziemlich eingrenzen aber irgednwie stehe ich da auf dem Schlauch :-/

  4. http://pastebin.com/413dQHQe
    Das ist die default Datei. So wie deine nur hoffentlich angepasst an mein Netzwerk.

    Bei der DNSmasq verstehe ich das laut dem CT Artikel, dass es ein Verzeichnis Namens dnsmasq.d gibt und dort dann eine Datei wie „clonezilla“ (in meinem Fall, die von CT haben diese Datei als desinfect bezeichnet)
    http://pastebin.com/0s1FHMgX

    die default liegt in /srv/tftp/clonezilla/pxelinux.cfg/
    die dnsmasq liegt in /etc/dnsmasq.d/
    das menu.c32 liegt in /srv/tftp/clonezilla
    die 3 *.img Dateien liegen in /srv/tftp/clonezilla/live

    Danke erstmal für die schnelle Antwort!
    Hoffentlich kannst du etwas damit anfangen.

    1. Hast du auch die pxelinux.0 im clonezilla Ordner? Welche 3 img Dateien haste denn im Live Ordner? Das gehören die drei Dateien filesystem.squashfs, initrd.img und vmlinuz rein, und zwar mit genau diesen Namen.
      Ist dein NFS Share denn auch für alle lesbar?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert