Как мы можем создать несколько фиктивных интерфейсов в Linux?

11

Чтобы создать фиктивный интерфейс фиктивного Ethernet В Linux мы сначала инициализируем драйвер фиктивного интерфейса, используя следующую команду: / sbin / modprobe dummy .
Затем мы назначаем псевдоним интерфейса Ethernet фиктивному драйверу, который мы только что инициализировали.

Но это приводит к следующей фатальной ошибке, говорящей: FATAL: Макет модуля не найден.

Кроме того, по пути cd / sys / devices / virtual / net # мы видим, что существуют виртуальные интерфейсы с именами:
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)  

Таким образом, команда modprobe не может загрузить модуль ядра.
Как мы можем загрузить модуль ядра, используя modprobe или insmod для инициализации фиктивного драйвера интерфейса?
Можем ли мы создать несколько фиктивных интерфейсов на одном загруженном модуле?

Kushal
источник
Когда вы говорили о виртуальном интерфейсе Ethernet. Вам не нужно было загружать фиктивный модуль. Вы можете создать его, используя команду ifconfig, например eth0: 1, eth0: 2 и т. Д.
supriady
Вы можете установить другой IP-адрес, подсеть и шлюз на виртуальном интерфейсе Ethernet с помощью команды ifconfig. Просто добавьте его на rc.local и загрузите при загрузке. Вам не нужно создавать какие-либо файлы конфигурации виртуального интерфейса Ethernet.
Вечер
1
@supriady Я не спрашиваю о виртуальных интерфейсах. Я знаю, что мы можем назначить виртуальные ip-ы интерфейсу, используя ifconfig, например eth0: 1 и т. Д., Но здесь адрес ч / б Mac будет одинаковым для каждого созданного виртуального интерфейса. Мой вопрос заключается в том, как создать несколько фиктивных интерфейсов, таких как dummy0, показанных выше, имеющих другой H / W Mac-адрес, чем реальные интерфейсы.
Kushal
Просто чтобы быть уверенным, вы понимаете, что эти интерфейсы не будут видны снаружи машины, верно?
Джули Пеллетье
Пожалуйста, добавьте к вопросу ПОЛНЫЙ вывод modprobeошибки и выводuname -r
Rui F Ribeiro

Ответы:

13

Обычный способ добавить несколько фиктивных интерфейсов - использовать 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

Но сообщение об ошибке FATAL: модуль dummy not found указывает, что у вас может быть ядро, в котором модуль dummy интерфейса не включен, поэтому обязательно проверьте конфигурацию вашего ядра и при необходимости перекомпилируйте ядро.

dirkt
источник
«сообщение об ошибке FATAL: модуль-заглушка не найден» означает, что у вас может быть ядро, в котором модуль-заглушка не включен «=> Нет, это может означать, что заглушка не была собрана как модуль, а вместо этого добавлена ​​непосредственно в ядро , По-видимому, dummy0на машине ОП существует интерфейс. Кроме этого, ваш ответ в порядке.
Ксиэнн
1
@xhienne зависит от вашей версии modprobe, но последние версии kmod, по крайней мере, будут знать о встроенных функциях. Попытайся. Например modprobe unixи modprobe -r unix.
sourcejedi
7

Чтобы создать фиктивные интерфейсы при загрузке, советую добавить в /etc/modules

dummy

Остерегайтесь, модуль dummyразрешает только два фиктивных интерфейса по умолчанию перед ядром 4.4.x (правильная версия должна быть проверена).

Если вам нужно больше, вам также нужно создать параметр a /etc/modprobe.d/localили /etc/modprobe.d/dummy.confопределить его numdummiesс количеством фиктивных интерфейсов, которые вы хотите:

options dummy numdummies=4 

Согласно комментариям @Feuermurmel, в более новых ядрах вы добавляете больше фиктивных интерфейсов, кроме двух, созданных по умолчанию, с помощью команды:

sudo ip link add dummyX type dummy
Руи Ф Рибейро
источник
По крайней мере, в ядре 4.4.0 можно добавить дополнительные фиктивные интерфейсы ip link add dumdum type dummy.
Feuermurmel
@Feuermurmel У вас есть идея, если она работает, чтобы добавить более 2?
Руи Ф Рибейру
Это определенно так. Проверьте сами:for i in {0..100}; do ip link add blubb-$i type dummy; done
Feuermurmel
@Feuermurmel Хорошие новости, спасибо за совет. Вы можете добавить его в качестве дополнительного ответа. ИМО уместны, поскольку все еще много устройств iOT, которые застряли в более низких версиях ядра.
Руи Ф Рибейру
Из любопытства: эти устройства, когда-то созданные, сохраняются при перезагрузке, или вам приходится воссоздавать их после каждого запуска системы?
Робиду