我们如何在 Linux 上创建多个虚拟接口?

Kus*_*hal 13 linux networking modprobe network-interface virtual-interface

要在 Linux 上创建假以太网虚拟接口,我们首先使用以下命令初始化虚拟接口驱动程序: /sbin/modprobe dummy。
然后我们将以太网接口别名分配给我们刚刚初始化的虚拟驱动程序。

但它给出了以下致命错误说: 致命:未找到模块虚拟。

此外,在路径 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)  
Run Code Online (Sandbox Code Playgroud)

因此, modprobe 命令无法加载内核模块。
我们如何使用modprobe或 insmod加载内核模块来初始化虚拟接口驱动程序?
我们可以在单个加载的模块上创建多个虚拟接口吗?

dir*_*rkt 14

添加多个虚拟接口的常用方法是使用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
Run Code Online (Sandbox Code Playgroud)

但是错误信息FATAL: Module dummy not found表明您的内核可能没有启用虚拟接口模块,因此请务必检查您的内核配置,并在必要时重新编译内核。


Rui*_*iro 8

要在启动时创建虚拟接口,我建议添加到 /etc/modules

dummy
Run Code Online (Sandbox Code Playgroud)

请注意,dummy在内核 4.4.x(正确版本有待验证)之前,该模块默认只允许两个虚拟接口。

如果您需要更多,您还必须使用您想要的虚拟接口数量创建/etc/modprobe.d/local或/etc/modprobe.d/dummy.conf定义参数numdummies:

options dummy numdummies=4 
Run Code Online (Sandbox Code Playgroud)

根据@Feuermurmel 的评论,在较新的内核中,除了默认创建的两个接口之外,您还可以使用以下命令添加更多虚拟接口:

sudo ip link add dummyX type dummy
Run Code Online (Sandbox Code Playgroud)