Zum Hauptinhalt springen

Netmap-Installation auf Linux

Veröffentlicht am
.
5 Minuten Lesezeit
.
Für die Englische Version

Zenarmor verwendet das netmap-Framework, um auf rohe Ethernet-Frames zuzugreifen. Um alle Filterfunktionen von Zenarmor nutzen zu können, müssen Sie das netmap-Framework auf Ihrem System installiert haben. Die neuesten FreeBSD-basierten Systeme kommen bereits mit installiertem netmap und sind bereit, Zenarmor zu installieren. Auf Linux ist netmap jedoch nicht standardmäßig enthalten. Wenn Sie eine Linux-basierte Firewall wie iptables, ipfw, firewalld usw. verwenden, sollten Sie netmap auf Ihrem Linux-System einrichten, um die Vorteile aller Zenarmor-Funktionen oder sogar Suricata zu nutzen. Die Installation von netmap auf Linux-Betriebssystemen kann etwas knifflig sein. Daher stellen wir Ihnen die netmap-Installationsschritte in diesem netmap-Starttutorial zur Verfügung. Sie finden Informationen zu den folgenden Themen in diesem netmap-Quickstart-Leitfaden:

  • Was ist netmap?
  • Vorteile der Verwendung von netmap
  • Unterstützte Treiber/Hardwareanforderungen für netmap unter Linux
  • Installationsanweisungen für netmap auf Linux-Betriebssystemen(Ubuntu, Debian, CentOS etc.)
  • Verwenden/Laden von Netmap-Kernelmodulen auf Ihrem Linux-Rechner
  • Testen der Netmap-Installation auf Linux

Was ist Netmap und warum benötigen Sie es?

Netmap ist eine DPDK-ähnliche Kernel-Schnittstelle, die Zenarmor verwendet, um zwischen Ihrem Ethernet-Adapter und dem Linux/BSD-Netzwerk-Stack zu implementieren. Dies ermöglicht es uns, einen Blick auf die Pakete zu werfen und Maßnahmen zu ergreifen, bevor sie überhaupt ihre Ziele erreichen.

Netmap bietet extrem schnelle und effiziente Paket-I/O im Kernel, im Userspace und auf virtuellen Maschinenplattformen. Es ist in der Lage, Dutzende Millionen Pakete pro Sekunde zu verarbeiten und erreicht die Geschwindigkeit von 10G- und 40G-Ports selbst bei kleinen Frames.

Netmap ist mit FreeBSD, Linux und einigen Versionen von Windows kompatibel. Für FreeBSD und Linux wird es als einzelnes Kernelmodul implementiert.

info

Netmap ist bereits in den neuesten FreeBSD (>= 10.x), OPNsense(r) und pfSense® Software-Versionen standardmäßig enthalten und aktiviert. Wenn Sie jedoch Zenarmor im Routed Mode (L3 Mode, Reporting und Blocking verfügbar) auf unterstützten Linux-Distributionen (Ubuntu 18.04 LTS & 20.04 LTS, CentOS 7 & 8, Debian 10 und AlmaLinux 1) ausführen möchten, müssen Sie Netmap selbst installieren. Wenn Sie Surricata haben, sollten Sie netmap installieren, um die Leistung Ihres IPS-Systems zu verbessern.

Anforderungen für die Installation von Netmap auf Linux

Netmap unterstützt nativ die folgenden Geräte auf Linux:

  • virtio_net
  • vmxnet3
  • Intel e1000(1G)
  • Intel e1000e (1G)
  • Realtek 8169(1G)
  • Intel i40e
  • Intel igb(1G)
  • Intel ixgbe(10G)
  • Intel ixgbevf

Netmap unterstützt nativ die folgenden Geräte auf FreeBSD:

  • Intel ixgbe(10G)
  • Intel ixl(10/40G)
  • iflib(4)(bereitstellt igb(4) und em(4))
  • re(4)
  • vtnet(4)
  • cxgbe(4)

Wenn netmap Ihre NICs nicht nativ unterstützt, können sie dennoch im netmap-Modus durch Emulation verwendet werden. Obwohl die Leistung gegenüber dem nativen Netmap-Modus unterlegen ist, ist sie deutlich besser als bei verschiedenen Rohsockeltypen. (bpf, PF PACKET, and so on).

Es sollte beachtet werden, dass bei langsamen Geräten (wie 1 Gbit/s und langsameren NICs oder mehreren 10 Gbit/s NICs, deren Hardware nicht in der Lage ist, die Linienrate aufrechtzuerhalten) die Durchsatzraten im emulierten und nativen Modus höchstwahrscheinlich ähnlich oder sogar identisch sein werden.

Netmap-Installation auf Linux

Die Installation von Netmap auf einer Standard-Linux-Distribution ist unkompliziert. Die nachstehenden Anweisungen wurden auf Ubuntu TLS 20.04, Kernel-Version 5.4.0-74 und Debian 10.9, Kernel-Version 4.19.0-16-amd64 befolgt und getestet. Die Vorgehensweise ist jedoch die gleiche für andere Distributionen.

Sie können das netmap-Kernelmodul für Linux erstellen und installieren, indem Sie dem Standard-Workflow ./configure && make && sudo make install folgen. Aber Sie müssen möglicherweise Ihr System vorbereiten, bevor Sie netmap installieren.

warnung

Privilegierter Zugriff auf Ihr Linux-System als root oder über den sudo-Befehl.

Alle unten angegebenen Befehle sind mit Root-Rechten auszuführen, entweder direkt als Root-Benutzer oder durch Verwendung des sudo-Befehls.

Netmap-Vorinstallationen für Linux

Sie müssen möglicherweise die folgenden Schritte ausführen, bevor Sie mit der Installation von netmap auf Ihrem Linux-System beginnen:

  1. Aktualisieren Sie Ihr lokales Paket-Index, indem Sie den folgenden Befehl ausführen:

    Update your local package index
    sudo apt-get update
  2. Da Sie den netmap-Quellcode kompilieren müssen, müssen Sie zunächst sicherstellen, dass Sie die erforderlichen Kompilierungswerkzeuge und die notwendige Software installiert haben. Sie müssen möglicherweise Folgendes tun:

    Install compiling tools
    sudo apt install build-essential
  3. Installieren Sie Abhängigkeiten (Versionskontrollsysteme wie Git)

    Install Git
    sudo apt-get install -y git
  4. Kernel-Header enthalten die C-Header-Dateien für den Linux-Kernel, die die verschiedenen Funktions- und Strukturdefinitionen bereitstellen, die beim Kompilieren von Code benötigt werden, der mit dem Kernel interagiert, wie z.B. Kernel-Module oder Gerätetreiber. Um die Linux-Header zu installieren, führen Sie den folgenden Befehl aus:

    Install linux headers
    sudo apt-get install -y linux-headers-$(uname -r)

Netmap-Installationsschritte für Linux

Der Installationsprozess von Netmap umfasst sechs grundlegende Schritte. Um Netmap zu installieren, sind die erforderlichen grundlegenden sechs Schritte unten aufgeführt:

  1. Laden Sie netmap aus dem offiziellen GitHub Repository herunter:

    Download netmap
    git clone https://github.com/luigirizzo/netmap.git

    Dies wird ein lokales Klon des entfernten netmap-Repositorys erstellen.

  2. Wechseln Sie in das netmap-Netzverzeichnis:

    cd netmap
  3. Netmap ist ursprünglich ein BSD-Tool, und um es auf Linux zu installieren, müssen Sie das LINUX-Verzeichnis betreten:

    cd LINUX
  4. Als nächstes müssen Sie netmap konfigurieren. In den meisten Fällen ist es ausreichend, die Skripte wie folgt auszuführen:

    ./configure

Konfigurationsoptionen

Das configure-Skript hat viele nützliche Optionen, die Sie möglicherweise benötigen. Einige der configure-Optionen sind unten aufgeführt:

  • Sie können die vollständige Liste der Optionen anzeigen, indem Sie den nächsten Befehl ausführen:

    Configure Options
    ./configure --help
  • Um die unterstützten Treiber anzuzeigen, führen Sie den folgenden Befehl aus:

    Viewing supported drivers
    ./configure --show-drivers

    Zum Zeitpunkt des Schreibens (Juni 2021) werden nur die folgenden Treiber unterstützt:

    mlx5, vmxnet3, i40e, ixgbevf, ixgbe, igb, e1000e, e1000, veth.c, forcedeth.c, virtio_net.c, r8169.c, stmmac*

  • Sie möchten möglicherweise die neuen netmap-fähigen Treibermodule neben den ursprünglichen haben:

    ./configure --driver-suffix=-netmap

    Zum Zeitpunkt des Schreibens (Juni 2021) werden nur die folgenden Treiber unterstützt:

    Die neuen Treiber werden als r8169-netmap, ixgbe-netmap, und so weiter bekannt sein.

  • Das Skript wird Ihre Kernel-Quellen nach patchbaren Treibern durchsuchen. Um netmap vollständig zu nutzen, müssen wir netmap-fähige Treiber verwenden. Netmap wird weiterhin mit Standardtreibern funktionieren, und um den Bau von netmap-fähigen Treibern zu vermeiden, führen Sie die Konfiguration wie folgt aus

    ./configure --no-drivers

    Dies ist praktisch, wenn wir keine unterstützten Treiber haben oder ein netmap-fähiger Treiber Probleme verursacht.

    Für weitere Informationen zu den Konfigurationsoptionen konsultieren Sie bitte die offiziellen netmap Anweisungen und die readme Dokumentation.

  1. Netmap enthält einige Beispielanwendungen, wie z.B. Benchmarking-Tools. Sobald netmap konfiguriert ist, bauen Sie Kernel-Module und Beispielanwendungen, indem Sie Folgendes ausführen:

    Build kernel modules
    make
    Build applications
    make apps
  2. Installieren Sie die neuen Module und Anwendungen wie folgt:

    Install modules and apps
    make install

Laden von netmap in einem Linux-System

Nach der Installation von netmap auf Ihrem Linux sollten Sie die folgenden vier Schritte befolgen, um netmap zu verwenden:

  1. Laden Sie alle Module für die Netzwerkarten, die Sie verwenden möchten, zum Beispiel.

    Unload NIC modules
    rmmod virtio_net.ko
    rmmod e1000.ko
    warnung

    Seien Sie vorsichtig, das Entfernen der NIC-Module wird jede Verbindung auf dieser Schnittstelle trennen.

  2. Laden Sie das netmap- und das Gerätetreiber-Modul, zum Beispiel.

    Auf Ubuntu TLS 20.04:

    Load netmap & NIC modules
    insmod /usr/lib/modules/5.4.114/extra/netmap.ko
    insmod /usr/lib/modules/5.4.114/extra/virtio_net.ko
    insmod /usr/lib/modules/5.4.0-74-generic/kernel/drivers/net/ethernet/intel/e1000/e1000.ko

    Auf Debian 10.9:

    Load netmap & NIC modules
    insmod /usr/lib/modules/4.19.0-16-amd64/extra/netmap.ko
    insmod /usr/lib/modules/4.19.0-16-amd64/extra/virtio_net-netmap.ko
    insmod /usr/lib/modules/4.19.0-16-amd64/kernel/drivers/net/ethernet/intel/e1000/e1000.ko
  3. Mit dem Befehl lsmod können Sie bestätigen, dass Module geladen sind:

    Listing loaded modules
    lsmod
    Sample lsmod output
    Module Size Used by
    virtio_net 45056 0
    netmap 204800 1 virtio_net
  4. Aktivieren Sie die Netzwerkschnittstelle(n), indem Sie sie hochfahren, zum Beispiel:

    (ersetzen Sie ens18 durch den Namen Ihrer Schnittstelle)

    Turn NIC UP
    ifconfig ens18 up

    Oder

    Turn NIC UP
    ifup ens18

Testen von Netmap und erwartete Leistungsergebnisse

Sie können Tests für das Netmap mit der bereitgestellten pkt-gen-Anwendung auf Ihrem Linux durchführen.

info

pkt-gen ist ein Rohdaten-Paket-Sender/Empfänger, der die volle Geschwindigkeit auf einer 10G-Schnittstelle erreichen kann. Es hat eine große Anzahl von Optionen, aber die einfachste Form ist:

(ersetzen Sie ens18 durch den Namen Ihrer Schnittstelle)

Testing netmap with pht-gen

pkt-gen -i ens18 -f tx -l 60 # send a stream of 60-byte packets

In diesem Fall wurde der Test an einer Maschine mit den folgenden Spezifikationen durchgeführt:

  • Ethernet-Controller: Intel Corporation 82540EM Gigabit Ethernet Controller

  • Ethernet-Controller: Red Hat, Inc. Virtio-Netzwerkgerät

  • CPU: 6 x Intel(R) Xeon(R) CPU X5675 @ 3,07GHz (1 Socket)

  • CPU: Intel Common KVM 1 Kern

  • RAM: 8GB, 1600MHz

  • 5.4.0-74-generic #83-Ubuntu SMP Sa 8. Mai 02:35:39 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

Der Test ergab die folgenden Ergebnisse:

Sending on netmap:ens18: 2 queues, 1 threads and 1 cpus.

10.0.0.1 -> 10.1.0.1 (00:00:00:00:00:00 -> ff:ff:ff:ff:ff:ff)

Sent 10600783 packets 636046980 bytes 71799 events 60 bytes each in 7.55 seconds.

Speed: 1.404 Mpps Bandwidth: 673.963 Mbps (raw 673.963 Mbps). Average batch: 147.65 pkts
info

Netmap kann Pakete mit sehr hohen Raten senden, und bei einfacher Paketübertragung und -empfang wird die Geschwindigkeit im Allgemeinen durch Faktoren außerhalb der CPU begrenzt. (bus, NIC hw limitations or link speed).

Für eine physische Verbindung können Sie die maximale Anzahl der Pakete pro Sekunde mit der Formel berechnen:

pps = line_rate / (672 + 8 * pkt_size)

line_rate : die nominale Übertragungsrate (z.B. 10 Gbit/s)

pkt_size : die tatsächliche Paketgröße einschließlich MAC-Header und CRC.

Die folgende Tabelle fasst einige der Studienergebnisse (in Mpps) zusammen:

pkt_size100M1G10G40G
64.14881.48814.8859.52
128.05890.5895.8923.58
256.03670.3673.6714.70
512.02090.2092.098.38
1024.01130.1131.134.51
1518.00780.0780.783.12

Tabelle 1. Erzielte Leitungsraten auf verschiedenen NICs für unterschiedliche Paketgrößen

warnung

Nachdem Sie netmap erfolgreich installiert und getestet haben, vergessen Sie nicht, die Netmap-Module so zu konfigurieren, dass sie beim Booten automatisch auf Ihrem System geladen werden.