Projekt: Linux-basierender Firewall-Router — Eigene Kernel Module für die Endian Firewall / Teil 4

Nachdem wir im Rahmen des Router-Projekts uns bereits über den Rahmen der Hardware klar sind fehlt nun noch die passende Software. Mit der Endian Firewall Firewall existiert eine auf Linux basierende äußerst leistungsfähige Software, welche eine Menge Einsatzgebiete abdeckt und für die meisten kleineren und mittleren Büros ausreichend sein sollte.

Bei vielen Systemen, welche insbesonders auf der stromsparenden Atom-Plattform basieren, wird allerdings die Installation deutlich schwieriger. Die bei der relativ neuen Plattform verwendeten Netzwerkchipsätzen werden zum Teil noch nicht von dem bei der Endian Firewall mitgelieferten Linux-Kernel unterstützt. Wobei dies nicht nur für die Endian Firewall gilt, sondern für fast alle Ablieger der IPCop Router-Distribution.

Mit diesem Howto soll einmal grundlegend erklärt werden mit welchen Schritten ein Kernel Modul für die Endian Firwall kompiliert werden kann. Mit den Kernelmodulen für Realtek RTL8111/8168B und Intel e1000e-basierenden PCIe Gigabit-Netzwerkkarten werden für die Anleitung zwei weit verbreitete Netzwerkchipsätze verwendet.

Wie immer für meine Howtos gilt, dass sie für Personen gedacht sind denen die Linux-Konsole nicht fremd ist. Die Nutzung des Howtos und der Kernelmodule erfolgt — wie üblich — auf eigene Gefahr. Eine weitere Vorraussetzung ist diesmal ein installiertes Vmware oder Virtualbox (siehe Schritt 1). Wer Fragen oder Probleme im Zusammenhang mit diesem Howto hat, den möchte ich bitten primär die Kommentarfunktion im Blog zu verwenden.

Schritt 1: Basis-System einrichten:

Als Vorbereitung sollte Vmware oder Virtualbox installiert werden um das Endian Development System als virtuelles Betriebssystem zu betreiben. Hierbei ist nur wichtig, dass für das Gast-System zwei virtuelle Netzwerkkarten vorhanden sein müssen, die als Netzwerkbrücke (Bridge-Mode) konfiguriert sein müssen. Auch wenn dies nicht zwingend benötigt wird, vereinfacht es den Installationsvorgang. Desweiteren wird ein SSH Client wie zum Beispiel Putty benötigt.

Noch ein genereller Hinweis. Die Anleitung selber verlangt sowohl gewisse Kentnisse unter Linux als auch mit der Endian Firewall selber. Durch ein Bug kann es im übrigen vorkommen, dass die bei der Installation angegebenen Zugangsdaten für die Anmeldung bei der Weboberfläche und für den SSH Zugang nicht funktionieren. In diesem Fall sollten noch die Standard Zugangsdaten aktiv sein. Für die Weboberfläche wäre dies Benutzername „admin” und als Passwort „endian”. Für den SSH Zugang lautet der Benutzername „root” und das Passwort, wie bei der Weboberfläche, „endian”. Die Groß- und Kleinschreibung muss unbedingt beachtet werden.

Nach dem anlegen des virtuellen Systems muss als erstes ein normale Installation der Endian Firewall durchgeführt werden. Wer die Endian Firewall bereits kennt, sollte hierbei kein größeres Problem haben. Als grünes und rotes
Interface wählt man jeweils eine der beiden verfügbaren Netzwerkkarten aus. Ein „blue” Interface wird nicht benötigt. Als Zugangsart wählt man für das rote Interface entweder DHCP oder Static IP. DHCP wird natürlich nur funktionieren, wenn zum Beispiel im Router der DHCP Server aktiviert ist. Wählt man Static IP, sollte man eine freie IP Adresse aus dem eigenen Netz angeben und für Gateway und DNS Server die gleichen Daten, wie beim Host-System (meistens die IP Adresse des Routers).

Schritt 2: Build Umgebung installieren:

Um die Installation etwas zu vereinfachen aktiviert man am besten über die Weboberfläche der eben installierten Firewall den SSH Zugang über den Menüpunkt „System / SSH Zugang”. Im Anschluss sollte man sich bereits mit dem SSH Client als „root” einloggen können. Über die Shell muss man nachfolgenden Kommandos ausführen. Mit diesen Kommandos werden für den kompilierungsvorgang essentielle Programme installiert, die zum Teil von einer anderen Distribution, aber auch direkt von Endian selber in binärer Form bereitgestellt werden.

[cc lang=„bash” escaped=„true”]root@ipgate:~ # cd ~; mkdir ~/dev
root@ipgate:~/dev # cd ~/dev
root@ipgate:~/dev # rpm -Uvh http://archives.fedoraproject.org/pub/archive/fedora/linux/\
> core/3/i386/os/Fedora/RPMS/info-4.7–5.i386.rpm
root@ipgate:~/dev # rpm -Uvh http://archives.fedoraproject.org/pub/archive/fedora/linux/\
> core/3/i386/os/Fedora/RPMS/wget-1.9.1–17.i386.rpm
root@ipgate:~/dev # wget http://kent.dl.sourceforge.net/project/efw/Development/\
> Endian%20Firewall%202.2%20RC3/EFW-COMMUNITY-2.2-rc3-devel-rpms.tar.gz
root@ipgate:~/dev # tar zxvf EFW-COMMUNITY-2.2-rc3-devel-rpms.tar.gz
root@ipgate:~/dev # cd ~/dev/RPMS/devel
root@ipgate:~/dev/RPMS/devel # rpm -Uvh binutils-2.15.92.0.2–24.endian1.i586.rpm
root@ipgate:~/dev/RPMS/devel # rpm -Uvh kernel-devel-2.6.22.19–72.endian15.i586.rpm
root@ipgate:~/dev/RPMS/devel # rpm -Uvh glibc-kernheaders-2.4–9.1.100.EL.endian1.i386.rpm
root@ipgate:~/dev/RPMS/devel # rpm -Uvh patch-2.5.4–20.endian0.i386.rpm
root@ipgate:~/dev/RPMS/devel # rpm -Uvh –nodeps glibc-headers-2.3.4–2.39.endian6.i386.rpm
root@ipgate:~/dev/RPMS/devel # rpm -Uvh –nodeps glibc-devel-2.3.4–2.39.endian6.i386.rpm
root@ipgate:~/dev/RPMS/devel # rpm -Uvh libgomp-4.1.2–14.endian1.i586.rpm
root@ipgate:~/dev/RPMS/devel # rpm -Uvh make-3.81–3.endian0.i586.rpm
root@ipgate:~/dev/RPMS/devel # rpm -Uvh cpp-3.4.6–9.endian7.i586.rpm
root@ipgate:~/dev/RPMS/devel # rpm -Uvh gcc4-4.1.2–14.endian1.i586.rpm[/cc]

Im Anschluss müssen nur noch zwei Symlink erzeugt werden, damit beim kompilieren die im vorherigen Schritt installierten Kernel Header sowie der Compiler auch tatsächlich gefunden werden. Dazu ist auf der Konsole nur folgendes notwendig:

[cc lang=„bash” escaped=„true”]root@ipgate:~ # rm /lib/modules/2.6.22.19–72.e18/build
root@ipgate:~ # ln -s /usr/src/kernels/2.6.22.19–72.endian15-i586/lib/modules/2.6.22.19–72.e18/build
root@ipgate:~ # ln -s /usr/bin/gcc4 /usr/bin/gcc[/cc]

Schritt 3a: Unterstützung für die Intel PCIe Netzwerkkarten basierend auf dem e1000e Kernelmodul:

Für viele der aktuellen Intel PCIe Gigabit Netzwerkkarten bietet die Endian Firewall in der aktuellen 2.3er Version der Community-Edition zur Zeit keine Unterstützung, da das hierfür benötigte e1000e Kernelmodul nicht mit in den fertigen Kernel genommen wurde. Da Endian das nachladen von Kernel Modulen zulässt, benötigt man keinen komplett neuen Kernel, sondern nur das einzelne Kernel Modul. Das Kernel Modul kann direkt
von der Intel Homepage herunterladen kann und sollte im Anschluss per scp in den Ordner /root des virtuellen Systems kopiert werden. Um das Modul im Anschluss zu kompilieren, sind folgende Schritte notwendig:

[cc lang=„bash” escaped=„true”]root@ipgate:~ # mkdir ~/drivers; cd ~/drivers
root@ipgate:~/drivers # tar zxvf e1000e-1.1.2.tar.gz
root@ipgate:~/drivers # cd ~/drivers/e1000e-1.1.2/src
root@ipgate:~/drivers/e1000e-1.1.2/src # make
root@ipgate:~/drivers/e1000e-1.1.2/src # cp e1000e.ko ../
root@ipgate:~/drivers/e1000e-1.1.2/src # cd ..
root@ipgate:~/drivers/e1000e-1.1.2 # strip –strip-debug e1000e.ko
root@ipgate:~/drivers/e1000e-1.1.2 # gzip e1000e.ko[/cc]

Sofern alles fehlerfrei ablief, sollte man nun das fertige Kernelmodul in gepackter Form (e1000e.ko.gz) vorliegen haben. Diese Datei kann man nun zum Beispiel via scp vom virtuellen System auf den Hosterrechner kopiert werden. Wie genau nun das Kernel-Modul in das eigentliche System eingebunden wird, kann man im folgenden vierten Schritt nachlesen.

Schritt 3b: Unterstützung für die Realtek RTL8111/8168B PCIe Gigabit-Netzwerkkarten:

Ähnlich wie bei der erwähnten Intel PCIe Netzwerkkarten funktioniert der RTL8111/8168B Chipsatz unter der Endian Firewall nicht ohne das installieren eines Kernel Moduls. Der Auslöser ist hier allerdings nicht ein fehlendes Kernel Modul, sondern ein Fehler im Linux-Kernel. Dieser Fehler sorgt dafür, dass die Karten zwar erkannt werden, aber von einem falschen Kernel Modul angesprochen werden und damit keine Netzwerkverbindung aufgebaut werden kann. Die Lösung ist hier ähnlich zu der bei den Intel Netzwerkkarten. Auf der Realtek Homepage sollte man das aktuelle Kernel Modul für „LINUX driver for kernel 2.6.x and 2.4.x (Support x86 and x64)” herunterladen und im Anschluss per scp in den Ordner /root des virtuellen Systems kopiert werden. Um das Modul im Anschluss zu kompilieren, sind folgende Schritte notwendig:

[cc lang=„bash” escaped=„true”]root@ipgate:~ # mkdir ~/drivers; cd ~/drivers
root@ipgate:~/drivers # tar tar xfvj r8168-8.015.00.tar.bz2
root@ipgate:~/drivers # cd r8168-8.015.00
root@ipgate:~/drivers/r8168-8.015.00 # make
root@ipgate:~/drivers/r8168-8.015.00 # cp src/r8168.ko .
root@ipgate:~/drivers/r8168-8.015.00 # strip –strip-debug r8168.ko
root@ipgate:~/drivers/r8168-8.015.00 # gzip r8168.ko[/cc]

Auch hier gilt, wie im Fall des e1000e Kernel Moduls, dass man das fertige Kernelmodul in gepackter Form (r8168.ko.gz) vorliegen haben sollte. Um das Modul auf das eigentliche Endian System kopieren zu können, ist auch hier notwendig die Datei zum Beispiel per scp vom virtuellen System auf den Hostrechner zu kopieren.

Schritt 4: Integration des Kernel Moduls in das fertige Endian Firewall System

Für den letzten Schritt ist es notwendig, dass das Installationsprogramm der Endian Firewall auf dem geplanten Router komplett durchlaufen wurde und nun vor der Erstkonfiguration steht. Das benötigte Kernelmodul,
welches im dritten Schritt kompiliert wurde, sollte im Hauptverzeichnis eines mittels FAT16/32 formatierten USB Stick vorliegen, wobei der Stick erst nach dem durchlaufen des Installationsprogramms und dem abschließenden Reboot angeschlossen werden darf. Um die Unterstützung der Intel oder Realtek Netzwerkkarte hinzufügen, müssen über die Shell nun die folgenden Kommandos ausgeführt werden. Die Shell selber kann am Router über die Taste 0 im Bootmenü gestartet werden. Die Zugangsdaten für die Shell lauten „root” / „endian”.

Schritt 4b: Integration des Realtek Treibers

[cc lang=„bash” escaped=„true”]root@ipgate:~ # cp /mnt/usbstick/r8168.ko.gz /lib/modules/2.6.22.19–72.e18/kernel/drivers/net
In /etc/modprobe.conf die „alias eth …” Zeile in „alias eth r8168” ändern.
root@ipgate:~ # echo „blacklist r8169” » /etc/modprobe.d/blacklist
root@ipgate:~ # depmod -a
root@ipgate:~ # reboot[/cc]

Schritt 4a: Integration des Intel Treibers

[cc lang=„bash” escaped=„true”]root@ipgate:~ # cp /mnt/usbstick/e1000e.ko.gz /lib/modules/2.6.22.19–72.e18/kernel/drivers/net
In /etc/modprobe.conf die „alias eth …” Zeile in „alias eth e1000e” ändern.
root@ipgate:~ # depmod -a
root@ipgate:~ # reboot[/cc]

Noch ein paar Hinweise …

Um zu kontrollieren ob die Integration erfolgreich war, sollte man sich nach dem Reboot nochmals in die Shell einloggen. Per lsmod prüfen ob das „r8169” Kernelmodul erfolgreich geladen wurde. Über ifconfig sollte man noch kontrollieren, ob für die Netzwerkkarte ein ethx-Device existiert. Mittels ethtool ethx kann man prüfen, ob ein angeschlossenes Netzwerkkabel erkannt wird.

Wurden alle Netzwerkanschlüsse sauber erkannt, dann ist die größte Herausforderung festzustellen, welche Netzwerkkarte für die LAN Verbindung verwendet wird. In der Regel ist dies erst einmal die zu „eth0” zugeordnete Netzwerkkarte. Wer die MAC Adressen seiner Netzwerkkarten kennt, der kann über ifconfig sich die MAC Adresse von „eth0” anzeigen lassen. Ansonsten bleibt einem noch ein einfaches try and error. Einfach also die im Startmenü angezeigte IP von einem Rechner im Netz anpingen und nacheinander einfach einmal jede Netzwerkkarte mit dem Switch verbinden. Bei einer Netzwerkkarte sollte das anpingen eigentlich erfolgreich sein. Ist dies nicht der Fall, so sollte man einmal prüfen ob wirklich alle Netzwerkkarten erkannt wurden, ob die richtigen Netzwerkmodule geladen wurden (wichtig bei dem Realtek-Treiber) und ob ein angeschlossenes Netzwerkkabel erkannt wird. Ein Standard-Vorgehen bei dieser Situation gibt es leider nicht, sodass weitergehende Tipps im Rahmen des Howtos nicht möglich sind.

Sollte alles funktioniert haben, so kann man nun beginnen wie im offiziellen Endian Handbuch beschrieben die Erstkonfiguration über den Internetbrowser durchführen. Bei der Wahl der Netzwerkanschlüsse für die verschiedenen Netzwerksegmente (Rot, Grün, Blau etc.) sollten nun auch alle Netzwerkanschlüsse zur Verfügung stehen.

Bei Fragen zu der Konfiguration der Endian Firewall oder bei irgendwelchen Problemen, so kann ich nur efw-forum.de (deutsch) und efwsupport.com (englisch) empfehlen.

14 responses to “Projekt: Linux-basierender Firewall-Router — Eigene Kernel Module für die Endian Firewall / Teil 4”

  1. armin sagt:

    Hallo Jens, erstmal Hut ab! Klasse arbeit. Hast Du das ganze auch für die 2.3 version? Ich habe ne box welche die e1000e gebrauchen könnte aber keinen blassen linux Schimmer. Vielleicht könnten wir uns da einigen. Vielen Dank Jens! Gruss armin

  2. Jens sagt:

    Hallo — die Anleitung ist eigentlich sogar für die 2.3er Version geschrieben worden 😉
    Ich werde dir in den nächsten Minuten gleich die aktuelle Version des Kernelmoduls mailen.

  3. armin sagt:

    Jens, ich fasse es kurz zusammen.
    D A N K E !!!!!!! u r my personal hero!
    Klasse die box läuft wie geschmiert! Viele Grüsse ins Badnerlaendle aus der Schweiz. Armin

  4. Super how-to, vielen dank dafür.
    Bedenkt man meine Linux nubness hat es auch problemlos funktioniert.
    Jez läuft die 2.3 auf nem msi industrie atom board

    fetten merci aus münchen

  5. andreasH sagt:

    Hallo Jens, super Anleitung.
    Bin durch Zufall auf die Seite gekommen weil ich das gleiche System verwende.
    Hab nur das Problem wie Armin, linuxnub.
    Könntest Du mir bitte auch die fertig kompilierten Module zusenden.
    Die Einbindung sollte ich dann ja wohl selbst hinbekommen.

    Bitte,Bitte
    Grüsse
    Andreas

  6. Andreas sagt:

    Hallo Jens,

    kannnst du mir evtl. die fertig kompilierten Module für die für die e1000e zusenden?
    Vielen Dank im Voraus.

    Gruß,

    Andreas

  7. Andreas sagt:

    Ich würde mir die Module gerne selbst basteln,aber die o.g. Adressen sind teilweise nicht mehr aktuell.

    Gruß,

    Andreas

  8. Jens Dutzi sagt:

    @Andreas: es waren durch die Umstellung des Blog-Systems nur direkt am Anfang ein paar Fehler drin, da aus > und HTML Code wurde. Der Fehler ist jetzt korrigiert. Die Mail an dich mit dem Modul geht heute wohl raus.@All: am Wochenende werde ich wohl zusätzlich zu der Anleitung die Kernel-Module in binärer Form bereitstellen, da sowohl der Realtek- als auch der Intel-Treiber soweit ich sehe unter GPL veröffentlicht wurden.

    • Andreas sagt:

      Hallo Jens,

      ich habe selbst versucht,die Entwicklungsumgebung zu installieren. Jedoch habe ich die dafür notwendigen rpm Pakete auf den Server nicht gefunden. Und soviel Ahnung von Linux habe ich nicht,das ich mr das selbst basteln kann. Deshalb wäre es wirklich toll,wenn du mir das fertig kompilierte Treiber-Modul für die Intel-Karte e1000e per Mail zusenden könntest.
      Vielen vielen Dank im voraus.

      Gruß,

      Andreas

    • Andreas sagt:

      Hallo Jens,

      ich wollte mich nochmal für die Zusendung des Treiberpakets bedanken. Endlich läuft meine Endian-Box.

      Gruß,

      Andreas

  9. Dani sagt:

    Hallo Jens

    Bin ebenfalls auf deine Seite gestossen :-).
    Ich wäre sehr froh, wenn du mir ebenfalls das fertige e1000e Module zukommen lassen könntest. Hast du ausserdem eventuell bereits das Modul für die neue Endian Version 2.4 (Kernel 2.6.27.19–72.e22).

    Besten Dank und viele Grüsse aus der Schweiz!

    Dani

  10. Philipp sagt:

    Hallo Jens,

    ich bin einer der zahlreichen leser die dich auch noch nerven 🙂

    Mein Problem ist ich brauch nen igb Driver für EFW2.4 und Intel Quad ET Karten.

    Und bekomme es nicht gebacken 🙁

    Hier meine Versuche die ich unternommen habe:
    http://www.efw-forum.de/www/forum/viewtopic.php?f=53&t=725

    Sorry fürs nerven

    Philipp

  11. Michi sagt:

    wie siehts denn mit integration von wlan routing aus?
    in nem kleinen büro find ich, sollte es schon wlan geben (für etwaige geschäftskunden/partner usw).

    könnte man das eventuell über ne einfache wlan karte erledigen?
    falls das funktionieren könnte, wär ich nämlich auch schon am überlegen mir sonen kleinen router zu baun 🙂

    lg michi

Schreibe einen Kommentar

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