Como podemos criar várias interfaces fictícias no Linux?

11

Para criar uma interface falsa de Ethernet falsa No Linux, primeiro inicializamos o driver da interface falsa usando o comando abaixo: / sbin / modprobe dummy .
Em seguida, atribuímos o alias da interface Ethernet ao driver fictício que acabamos de inicializar acima.

Mas fornece o seguinte erro fatal dizendo: FATAL: manequim do módulo não encontrado.

Além disso, no caminho cd / sys / devices / virtual / net # , podemos ver que há interfaces virtuais presentes pelos seguintes nomes:
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)  

Portanto, o comando modprobe não pode carregar o módulo do kernel.
Como podemos carregar um módulo do kernel usando modprobe ou insmod para inicializar um driver de interface fictício?
Podemos criar várias interfaces fictícias em um único módulo carregado?

Kushal
fonte
Quando você falou sobre a interface virtual Ethernet, não foi necessário carregar nenhum módulo fictício. Você pode criá-lo usando o comando ifconfig como eth0: 1, eth0: 2, etc.
supriady
Você pode definir diferentes endereços IP, sub-redes e gateway na interface virtual Ethernet usando o comando ifconfig. Basta adicioná-lo no rc.local e carregado no boot. Você não precisava criar nenhum arquivo de configuração da interface virtual Ethernet.
Supriady
1
@supriady Não estou perguntando sobre interfaces virtuais. Eu sei que podemos atribuir ips virtuais a uma interface usando ifconfig como eth0: 1 e assim por diante, mas aqui o endereço h / w do Mac será o mesmo para cada interface virtual criada. Minha pergunta é como criar várias interfaces fictícias, como dummy0, mostradas acima, com um endereço Mac H / w diferente das interfaces reais.
Kushal
Só para ter certeza, você percebe que essas interfaces não serão visíveis de fora da máquina, certo?
Julie Pelletier
Por favor, adicione à pergunta a saída CHEIA do modprobeerro e a saída deuname -r
Rui F Ribeiro

Respostas:

13

A maneira usual de adicionar várias interfaces fictícias é usar o 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

Mas a mensagem de erro FATAL: Dummy do módulo não encontrado indica que você pode ter um kernel em que o módulo da interface dummy não está ativado, portanto, verifique a configuração do kernel e recompile o kernel, se necessário.

dirkt
fonte
"a mensagem de erro FATAL: Dummy do módulo não encontrado indica que você pode ter um kernel onde o módulo da interface dummy não está ativado" => Não, isso pode significar que o driver dummy não foi construído como um módulo, mas foi adicionado diretamente ao kernel . Aparentemente dummy0, existe uma interface na máquina do OP. Fora isso, sua resposta está OK.
xhienne
1
O @xhienne depende da sua versão do modprobe, mas as versões recentes de kmod, pelo menos, saberão sobre os componentes internos. Tente. Por exemplo, modprobe unixe modprobe -r unix.
sourcejedi
7

Para criar interfaces fictícias na inicialização, recomendo adicionar ao /etc/modules

dummy

Cuidado: o módulo dummypermite apenas duas interfaces fictícias por padrão antes do kernel 4.4.x (a versão correta deve ser verificada).

Se precisar de mais, também é necessário criar um /etc/modprobe.d/localou /etc/modprobe.d/dummy.confdefinir o parâmetro numdummiescom o número de interfaces fictícias que você deseja:

options dummy numdummies=4 

Conforme comentários do @Feuermurmel, nos kernels mais novos, você adiciona mais interfaces fictícias, além das duas criadas por padrão, usando o comando:

sudo ip link add dummyX type dummy
Rui F Ribeiro
fonte
Pelo menos com o kernel 4.4.0, interfaces fictícias adicionais podem ser adicionadas ip link add dumdum type dummy.
Feuermurmel
@Feuermurmel Você tem uma ideia se ela adicionar mais de 2?
Rui F Ribeiro
Definitivamente sim. Teste por si mesmo:for i in {0..100}; do ip link add blubb-$i type dummy; done
Feuermurmel
@Feuermurmel Boas notícias, obrigado pela dica. Você pode querer adicioná-lo como uma resposta adicional. A IMO é pertinente, pois ainda existem muitos dispositivos iOT bloqueados nas versões mais baixas do kernel.
Rui F Ribeiro
Por curiosidade: esses dispositivos, uma vez criados, são persistentes durante as reinicializações ou você precisa recriá-los após o início de cada sistema?
Robidu 15/09/19