¿Cómo puedo crear una interfaz virtual de Ethernet en una máquina sin un adaptador físico?

68

Tengo un ultrabook Dell XPS 13 que tiene un wifi wifi, pero no un ethernet físico (wlan0, pero no eth0). Necesito crear un adaptador virtual para usar Vagrant con NFS, pero descubro que lo típico ifup eth0:1...falla ignoring unknown interface eth0:1=eth0:1. También intenté crear una interfaz virtual en contra wlan0, pero recibí el mismo resultado.

¿Cómo puedo crear una interfaz virtual en esta máquina sin interfaz física?

STW
fuente
En primer lugar, asegúrese de que su controlador que está siendo utilizado por wlan0 sea compatible con alias. Ese es el otro nombre que usan las interfaces virtuales. Vea cómo a través de mi A a esta Q: unix.stackexchange.com/questions/108396/… . Por cierto, no puede hacer un alias contra eth0 si no tiene ese dispositivo físico.
slm
También puede agregar direcciones IP adicionales con el ipcomando también: xmodulo.com/2013/02/…
slm

Respuestas:

103

Configurar una interfaz ficticia

Si desea crear interfaces de red, pero carece de una NIC física para respaldarla, puede usar el tipo de enlace ficticio. Puede leer más sobre ellos aquí: iproute2 página de Wikipedia .

Creando eth10

Para hacer esta interfaz, primero debe asegurarse de que tiene cargado el módulo de kernel ficticio. Puedes hacer esto así:

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

Con el controlador ahora cargado, puede crear las interfaces de red ficticias que desee:

$ sudo ip link set name eth10 dev dummy0

Y confírmalo:

$ 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

Cambiar el MAC

Luego puede cambiar la dirección MAC si lo desea:

$ 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

Crear un alias

Luego puede crear alias encima de eth10.

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

Y confírmalos así:

$ 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)

O usando 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

¿Quitando todo esto?

Si desea desenrollar todo esto, puede ejecutar estos comandos para hacerlo:

$ 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

Referencias

slm
fuente
44
Este comando no funcionó para mí: sudo ip link set name eth10 dev dummy0. He usado ip link add dummy0 type dummyy usado la interfaz dummy0 en los siguientes comandos. Otros comandos funcionaron bien. ¡Gracias!
Ikrom
1
increíble, esto es exactamente lo que necesitaba para un viejo lmgrd que no podía leer la dirección MAC de los nuevos nombres de dispositivos RHEL 7 (emX en lugar de ethX)
Thesane
26

Puede crear interfaces virtuales utilizando el kit de herramientas iproute2 .

ip link add veth0 type veth peer name veth1

Esto creará 2 interfaces veth0y veth1. Piense en ellos como 2 extremos de una tubería. Cualquier tráfico enviado veth0saldrá veth1y viceversa.

Si desea enrutar el tráfico, puede hacer lo siguiente:

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

Esto le indicará al kernel que reenvíe el tráfico proveniente veth0(así que úselo veth1para el punto final usado).

Otra opción es configurar un puente con veth0y otra interfaz. Luego, todo el tráfico que ingrese a través de la interfaz virtual se enrutará a la red como si su máquina simplemente estuviera actuando como un interruptor.

Hay muchas otras cosas que puede hacer con este tráfico (enmascararlo, redirigirlo, DNAT, etc.), pero eso depende de lo que esté tratando de lograr.

Para derribarlo:

ip link del veth0
Patricio
fuente
Cosas geniales, pero no exactamente lo que necesitaba en este caso (realmente solo necesitaba una interfaz virtual para que una VM pudiera montar un recurso compartido NFS en lugar de usar recursos compartidos de archivos VBox)
STW
¿Cómo configurar la dirección IP veth0 en el ejemplo?
MURATSPLAT