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

54

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

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

    
por STW 27.08.2014 / 04:38

2 respostas

86

Configurando uma interface fictícia

Se você deseja criar interfaces de rede, mas não possui um NIC físico para suportá-lo, é possível usar o tipo de link fictício. Você pode ler mais sobre eles aqui: página da Wikipédia iproute2 .

Criando eth10

Para criar essa interface, primeiro você precisa ter certeza de que o módulo do kernel fictício está carregado. Você pode fazer isso assim:

$ 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ê 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 quiser:

$ 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 a eth10.

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

Confirme-os da seguinte forma:

$ 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 descomprimir tudo isso, pode executar esses comandos para fazer isso:

$ 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

por 27.08.2014 / 05:51
24

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

ip link add veth0 type veth peer name veth1

Isso criará duas interfaces, veth0 e veth1 . Pense neles como 2 extremidades de um tubo. Qualquer tráfego enviado para veth0 sairá em veth1 e vice-versa.

Se você deseja que o tráfego seja roteado, faça o seguinte:

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

Isto irá dizer ao kernel para encaminhar o tráfego vindo de veth0 (então use veth1 para o endpoint usado).

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

Existem 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
    
por 27.08.2014 / 06:10