Comment créer une interface Ethernet virtuelle sur une machine sans adaptateur physique?

68

J'ai un ultrabook Dell XPS 13 qui possède un NIC Wi-Fi, mais aucun NIC Ethernet (wlan0, mais aucun eth0). J'ai besoin de créer un adaptateur virtuel pour utiliser Vagrant avec NFS, mais je constate que l' ifup eth0:1...échec est typique ignoring unknown interface eth0:1=eth0:1. J'ai également essayé de créer une interface virtuelle wlan0, mais j'ai obtenu le même résultat.

Comment créer une interface virtuelle sur cette machine sans interface physique?

STW
la source
Tout d’abord, assurez-vous que votre pilote utilisé par wlan0 prend en charge les alias. C'est l'autre nom par lequel les interfaces virtuelles passent. Voyez comment via mon A vers ce Q: unix.stackexchange.com/questions/108396/… . En passant, vous ne pouvez pas créer d'alias contre eth0 si vous ne possédez pas ce périphérique physique.
slm
Vous pouvez également ajouter des adresses IP supplémentaires à l'aide de la ipcommande également: xmodulo.com/2013/02/…
slm

Réponses:

103

Mise en place d'une interface fictive

Si vous souhaitez créer des interfaces réseau, mais qu'il vous manque une carte réseau physique pour la sauvegarder, vous pouvez utiliser le type de lien factice. Vous pouvez en savoir plus à leur sujet ici: page Wikipedia iproute2 .

Créer eth10

Pour créer cette interface, vous devez d’abord vérifier que le module factice du noyau est chargé. Vous pouvez faire ça comme ça:

$ sudo lsmod | grep dummy
$ sudo modprobe dummy
$ sudo lsmod | grep dummy
dummy                  12960  0 

Avec le pilote maintenant chargé, vous pouvez créer toutes les interfaces réseau fictives que vous aimez:

$ sudo ip link set name eth10 dev dummy0

Et confirme le:

$ ip link show eth10
6: eth10: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default 
    link/ether c6:ad:af:42:80:45 brd ff:ff:ff:ff:ff:ff

Changer le MAC

Vous pouvez ensuite changer l'adresse MAC si vous aimez:

$ sudo ifconfig eth10 hw ether 00:22:22:ff:ff:ff
$ ip link show eth10
6: eth10: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default 
    link/ether 00:22:22:ff:ff:ff brd ff:ff:ff:ff:ff:ff

Créer un alias

Vous pouvez ensuite créer des alias sur eth10.

$ sudo ip addr add 192.168.100.199/24 brd + dev eth10 label eth10:0

Et confirmez-les comme suit:

$ ifconfig -a eth10
eth10: flags=130<BROADCAST,NOARP>  mtu 1500
        ether 00:22:22:ff:ff:ff  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

$ ifconfig -a eth10:0
eth10:0: flags=130<BROADCAST,NOARP>  mtu 1500
        inet 192.168.100.199  netmask 255.255.255.0  broadcast 192.168.100.255
        ether 00:22:22:ff:ff:ff  txqueuelen 0  (Ethernet)

Ou en utilisant ip:

$ ip a | grep -w inet
    inet 127.0.0.1/8 scope host lo
    inet 192.168.1.20/24 brd 192.168.1.255 scope global wlp3s0
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
    inet 192.168.100.199/24 brd 192.168.100.255 scope global eth10:0

Enlever tout ça?

Si vous voulez décompresser tout cela, vous pouvez exécuter ces commandes pour le faire:

$ sudo ip addr del 192.168.100.199/24 brd + dev eth10 label eth10:0
$ sudo ip link delete eth10 type dummy
$ sudo rmmod dummy

Références

slm
la source
4
Cette commande ne fonctionne pas pour moi: sudo ip link set name eth10 dev dummy0. J'ai utilisé ip link add dummy0 type dummyet utilisé l'interface factice0 dans les commandes suivantes. Les autres commandes ont bien fonctionné. Merci!
Ikrom
1
génial, c'est exactement ce dont j'avais besoin pour un vieux lmgrd qui n'était pas capable de lire l'adresse MAC à partir des nouveaux noms de périphériques RHEL 7 (emX au lieu de ethX)
Thesane
26

Vous pouvez créer des interfaces virtuelles à l'aide de la boîte à outils iproute2 .

ip link add veth0 type veth peer name veth1

Cela va créer 2 interfaces, veth0et veth1. Pensez à eux comme 2 extrémités d'un tuyau. Tout le trafic envoyé dans veth0va sortir veth1et vice versa.

Si vous voulez que le trafic soit routé, vous pouvez faire:

sysctl -w net.ipv4.conf.veth0.forwarding=1

Cela indiquera au noyau de transférer le trafic provenant de veth0(utilisez donc veth1pour le noeud final utilisé).

Une autre option consiste à configurer un pont avec veth0une autre interface. Ensuite, tout trafic venant de l’interface virtuelle sera acheminé vers le réseau comme si votre machine agissait simplement comme un commutateur.

Il y a beaucoup d'autres choses que vous pouvez faire avec ce trafic (le masquer, le rediriger, le DNAT, etc.), mais cela dépend de ce que vous essayez d'accomplir.

Pour le démolir:

ip link del veth0
Patrick
la source
Des trucs sympas, mais pas tout à fait ce dont j'avais besoin dans ce cas (j'avais vraiment besoin d'une interface virtuelle pour qu'une machine virtuelle puisse monter un partage NFS plutôt que d'utiliser des partages de fichiers VBox)
STW
Comment définir l'adresse IP veth0 dans l'exemple?
MURATSPLAT