如何在没有物理适配器的机器上创建虚拟以太网接口?


68

我有一台具有WiFi NIC的Dell XPS 13超级本,但没有物理以太网NIC(wlan0,但没有eth0)。我需要创建一个虚拟适配器,以将Vagrant与NFS配合使用,但是发现典型的ifup eth0:1...失败ignoring unknown interface eth0:1=eth0:1。我还尝试针对创建虚拟接口wlan0,但收到了相同的结果。

如何在没有物理接口的计算机上创建虚拟接口?


首先,请确保wlan0使用的驱动程序支持别名。这是虚拟接口所使用的另一个名称。请参阅如何通过我的A到达此问题:unix.stackexchange.com/questions/108396/…。顺便说一句,如果您没有该物理设备,则无法使用eth0作为别名。
slm

您也可以使用以下ip命令添加其他IP :xmodulo.com/2013/02/…–
slm

Answers:


103

设置虚拟界面

如果要创建网络接口,但缺少支持它的物理NIC,则可以使用虚拟链接类型。您可以在这里阅读有关它们的更多信息:iproute2 Wikipedia page

创建eth10

要创建此接口,您首先需要确保已加载虚拟内核模块。您可以这样做:

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

现在加载驱动程序,您可以创建自己喜欢的虚拟网络接口:

$ sudo ip link set name eth10 dev dummy0

并确认:

$ 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

更改MAC

然后,您可以根据需要更改MAC地址:

$ 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

创建一个别名

然后,您可以在eth10之上创建别名。

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

并像这样确认它们:

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

或使用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

删除所有这一切?

如果要放松所有这些,可以运行以下命令:

$ 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

参考文献


4
该命令对我不起作用:sudo ip link set name eth10 dev dummy0。我ip link add dummy0 type dummy在以下命令中使用并使用了dummy0接口。其他命令运行良好。谢谢!
Ikrom

1
太棒了,这正是我无法从新的RHEL 7设备名称(emX而非ethX)读取MAC地址的旧lmgrd所需要的
Thesane

26

您可以使用iproute2工具箱创建虚拟接口。

ip link add veth0 type veth peer name veth1

这将创建2个接口,veth0veth1。可以将它们视为管道的两个末端。发送的所有流量veth0都会出来veth1,反之亦然。

如果要路由流量,可以执行以下操作:

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

这将告诉内核转发来自的流量veth0(因此veth1用于已使用的端点)。

另一个选择是使用veth0和另一个接口建立网桥。然后,通过虚拟接口的任何流量都将被路由到网络,就像您的计算机只是充当交换机一样。

您可以使用此流量执行许多其他操作(伪装,重定向,DNAT等等),但这取决于您要完成的工作。

拆除:

ip link del veth0

很酷的东西,但不是我需要的(我真的只需要一个虚拟接口,以便VM可以挂载NFS共享而不是使用VBox文件共享)
STW

veth0 示例中如何设置IP地址 ?
MURATSPLAT
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.