Wie können wir unter Linux mehrere Dummy-Schnittstellen erstellen?

11

So erstellen Sie eine gefälschte Ethernet-Dummy-Schnittstelle Unter Linux initialisieren wir zuerst den Dummy-Schnittstellentreiber mit dem folgenden Befehl: / sbin / modprobe Dummy .
Dann weisen wir dem oben initialisierten Dummy-Treiber einen Alias ​​für die Ethernet-Schnittstelle zu.

Es wird jedoch der folgende schwerwiegende Fehler angezeigt: FATAL: Modul-Dummy nicht gefunden.

Unter dem Pfad cd / sys / device / virtual / net # können wir außerdem sehen, dass virtuelle Schnittstellen mit den folgenden Namen vorhanden sind:
dummy0 / lo / sit0 / tunl0 /

ifconfig -a

dummy0:   Link encap:Ethernet  HWaddr aa:3a:a6:cd:91:2b    
          BROADCAST NOARP  MTU:1500  Metric:1  
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0   
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo:     Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0  
          inet6 addr: ::1/128 Scope:Host  
          UP LOOPBACK RUNNING  MTU:16436  Metric:1  
          RX packets:111 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:111 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0   
          RX bytes:8303 (8.1 KiB)  TX bytes:8303 (8.1 KiB)

sit0:      Link encap:UNSPEC  HWaddr 00-00-00-00-FF-00-00-00-00-00-00-00-00-00-00-00    
          NOARP  MTU:1480  Metric:1  
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0   
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

tunl0:  Link encap:IPIP Tunnel  HWaddr   
          NOARP  MTU:1480  Metric:1  
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0   
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)  

Daher kann der Befehl modprobe das Kernelmodul nicht laden.
Wie können wir ein Kernelmodul mit modprobe oder insmod laden, um einen Dummy-Schnittstellentreiber zu initialisieren?
Können wir mehrere Dummy-Schnittstellen auf einem einzelnen geladenen Modul erstellen?

Kushal
quelle
Wenn Sie über die virtuelle Ethernet-Schnittstelle gesprochen haben. Sie mussten kein Dummy-Modul laden. Sie können es mit dem Befehl ifconfig wie eth0: 1, eth0: 2 usw.
erstellen
Mit dem Befehl ifconfig können Sie unterschiedliche IP-Adressen, Subnetze und Gateways auf der virtuellen Ethernet-Schnittstelle festlegen. Fügen Sie es einfach auf rc.local hinzu und laden Sie es auf den Boot. Sie mussten keine Konfigurationsdateien für die virtuelle Ethernet-Schnittstelle erstellen.
Supriady
1
@supriady Ich frage nicht nach virtuellen Schnittstellen. Ich weiß, dass wir einer Schnittstelle mit ifconfig wie eth0: 1 usw. virtuelle IP-Adressen zuweisen können, aber hier ist die Mac-H / W-Adresse für jede erstellte virtuelle Schnittstelle gleich. Meine Frage ist, wie man mehrere Dummy-Schnittstellen wie den oben gezeigten Dummy0 mit einer anderen H / W-Mac-Adresse als die realen Schnittstellen erstellt.
Kushal
Nur um sicherzugehen, dass diese Schnittstellen von außerhalb der Maschine nicht sichtbar sind, oder?
Julie Pelletier
Bitte fügen Sie der Frage die vollständige Ausgabe des modprobeFehlers und die Ausgabe vonuname -r
Rui F Ribeiro

Antworten:

13

Die übliche Methode zum Hinzufügen mehrerer Dummy-Schnittstellen ist die Verwendung von iproute2 :

# ip link add dummy0 type dummy
# ip link add dummy1 type dummy
# ip link list
...
5: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 22:4e:84:26:c5:98 brd ff:ff:ff:ff:ff:ff
6: dummy1: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 9e:3e:48:b5:d5:1d brd ff:ff:ff:ff:ff:ff

Die Fehlermeldung FATAL: Modul-Dummy nicht gefunden zeigt jedoch an, dass Sie möglicherweise einen Kernel haben, in dem das Dummy-Schnittstellenmodul nicht aktiviert ist. Überprüfen Sie daher unbedingt Ihre Kernelkonfiguration und kompilieren Sie den Kernel gegebenenfalls neu.

dirkt
quelle
"Die Fehlermeldung FATAL: Modul-Dummy nicht gefunden zeigt an, dass Sie möglicherweise einen Kernel haben, in dem das Dummy-Schnittstellenmodul nicht aktiviert ist." => Nein, dies kann bedeuten, dass der Dummy-Treiber nicht als Modul erstellt, sondern direkt zum Kernel hinzugefügt wurde . Anscheinend dummy0ist auf dem OP-Computer eine Schnittstelle vorhanden. Ansonsten ist Ihre Antwort in Ordnung.
Xhienne
1
@xhienne hängt von Ihrer Version von modprobe ab, aber aktuelle Versionen von kmodzumindest kennen sich mit Builtins aus. Versuch es. ZB modprobe unixund modprobe -r unix.
Sourcejedi
7

Um beim Booten Dummy-Schnittstellen zu erstellen, empfehle ich das Hinzufügen zu /etc/modules

dummy

Beachten Sie, dass das Modul dummystandardmäßig nur zwei Dummy-Schnittstellen vor Kernel 4.4.x zulässt (korrekte Version muss überprüft werden).

Wenn Sie mehr benötigen, müssen Sie entweder einen Parameter erstellen /etc/modprobe.d/localoder /etc/modprobe.d/dummy.confden Parameter numdummiesmit der Anzahl der gewünschten Dummy-Schnittstellen definieren:

options dummy numdummies=4 

Gemäß den Kommentaren von @Feuermurmel fügen Sie in neueren Kerneln neben den beiden standardmäßig mit dem folgenden Befehl weitere Dummy-Schnittstellen hinzu:

sudo ip link add dummyX type dummy
Rui F Ribeiro
quelle
Zumindest mit dem Kernel 4.4.0 können zusätzliche Dummy-Schnittstellen hinzugefügt werden ip link add dumdum type dummy.
Feuermurmel
@Feuermurmel Hast du eine Idee, wenn es funktioniert, mehr als 2 hinzuzufügen?
Rui F Ribeiro
Das tut es definitiv. Testen Sie selbst:for i in {0..100}; do ip link add blubb-$i type dummy; done
Feuermurmel
@Feuermurmel Gute Nachrichten, danke für den Tipp. Vielleicht möchten Sie es als zusätzliche Antwort hinzufügen. IMO sind beide relevant, da es immer noch viele iOT-Geräte gibt, die in Versionen mit niedrigerem Kernel stecken bleiben.
Rui F Ribeiro
Aus Neugier: Sind diese Geräte nach ihrer Erstellung über Neustarts hinweg beständig oder müssen Sie sie nach jedem Systemstart neu erstellen?
Robidu