Como posso criar uma interface Ethernet virtual em uma máquina sem um adaptador físico?

68

Eu tenho um ultrabook Dell XPS 13 que tem um nic de wifi, mas nenhum nic de ethernet físico (wlan0, mas não eth0). Preciso criar um adaptador virtual para usar o Vagrant com NFS, mas estou descobrindo que o típico ifup eth0:1...falha com ignoring unknown interface eth0:1=eth0:1. Também tentei criar uma interface virtual wlan0, mas recebi o mesmo resultado.

Como posso criar uma interface virtual nesta máquina sem interface física?

STW
fonte
Primeiro, verifique se o driver que está sendo usado pelo wlan0 suporta alias. Esse é o outro nome pelo qual as interfaces virtuais passam. Veja como, através do meu A, para este Q: unix.stackexchange.com/questions/108396/… . BTW, você não pode fazer um alias contra eth0 se você não tiver esse dispositivo físico.
slm
Você também pode adicionar IPs adicionais usando o ipcomando: xmodulo.com/2013/02/…
slm

Respostas:

103

Configurando uma Interface Fictícia

Se você deseja criar interfaces de rede, mas não possui uma NIC física para apoiá-la, pode usar o tipo de link fictício. Você pode ler mais sobre eles aqui: página da Wikipedia iproute2 .

Criando eth10

Para fazer essa interface, primeiro você precisa ter certeza de que o módulo do kernel está carregado. Você pode fazer o seguinte:

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

Com o driver carregado agora, você pode criar as interfaces de rede que você mais gosta:

$ sudo ip link set name eth10 dev dummy0

E confirme:

$ 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

Alterando o MAC

Você pode alterar o endereço MAC, se desejar:

$ 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

Criando um Alias

Você pode criar aliases sobre eth10.

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

E confirme-os assim:

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

Removendo tudo isso?

Se você quiser relaxar tudo isso, execute estes comandos para fazê-lo:

$ 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

Referências

slm
fonte
4
Este comando não funcionou para mim: sudo ip link set name eth10 dev dummy0. Eu usei ip link add dummy0 type dummye usei a interface dummy0 nos seguintes comandos. Outros comandos funcionaram bem. Obrigado!
Ikrom
11
incrível, isso é exatamente o que eu precisava para uma lmgrd antigo, que não foi capaz de ler o endereço MAC de novas RHEL 7 nomes de dispositivos (EMX vez de ethX)
Thesane
26

Você pode criar interfaces virtuais usando o kit de ferramentas iproute2 .

ip link add veth0 type veth peer name veth1

Isso criará 2 interfaces veth0e veth1. Pense nelas como 2 pontas de um cano. Qualquer tráfego enviado veth0sairá veth1e vice-versa.

Se você deseja que o tráfego seja roteado, você pode:

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

Isso instruirá o kernel a encaminhar o tráfego proveniente veth0(então use veth1para o endpoint usado).

Outra opção é configurar uma ponte com veth0e outra interface. Então, qualquer tráfego proveniente da interface virtual será roteado para a rede como se sua máquina estivesse simplesmente agindo como um comutador.

Há muitas outras coisas que você pode fazer com esse tráfego (mascará-lo, redirecioná-lo, DNAT etc.), mas isso depende do que você está tentando realizar.

Para derrubá-lo:

ip link del veth0
Patrick
fonte
Coisas legais, mas não é bem o que eu precisava neste caso (eu realmente só precisava de uma interface virtual para que a VM poderia montar um NFS compartilhar em vez de usar compartilhamentos de arquivos VBox)
STW
Como definir o endereço IP veth0 no exemplo?
MURATSPLAT