我有一台运行两台虚拟机的 Linux Mint 19.0 主机 - 一台是 Ubuntu 服务器(仅控制台),另一台是带有 GUI 的 Linux Mint 19.3。我计划在服务器实例中运行 Kubernetes 并使用 GUI 对其进行控制kubectl
。为此,我首先要在两台虚拟机之间建立一条网络路径,这样我就可以从另一台虚拟机 ping 通另一台虚拟机。
在我使用的几种资源中本指南了解如何执行此操作。该部分的本质是,可以使用“内部网络”VirtualBox 网络类型(作为默认网络之上的辅助网络)连接两个或多个虚拟机,唯一需要注意的是,对于所有需要加入网络的虚拟机来说,网络都是相同的。
但是,我尝试了,但并没有成功。我原本以为两个虚拟机中都会出现一个新的(虚拟)网络设备。使用ifconfig
,服务器中没有显示任何内容,尽管 GUI VM 显示了适配器,但连接却屡屡失败。
我发现另一个文档资源,我需要一个“桥接适配器”。我将两个虚拟机都换成了这个,这里需要选择一个主机适配器,所以我把它设置在两个虚拟机的唯一主机适配器上。这让我更接近了——网络在 GUI VM 中自动检测并成功连接。然而,在我的服务器 VM 中没有类似的运气——ifconfig
没有给我带来任何新的东西。
我已确保两个虚拟机上都安装了 Guest Additions。
最后,我发现了一些手动配置静态 IP 的建议,因此我在服务器虚拟机中尝试了这个:,
# /etc/network/interfaces
iface enp0s8 inet static
address 192.168.43.188
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.43.255
gateway 192.168.43.1
dns-nameservers 192.168.43.1
但是我不太确定这不是遗留文件,而且更改也没有什么不同。我可能正处于尝试随机事物的阶段,这没有什么成效。接下来我可以尝试什么来配置它?我觉得这个任务应该非常简单。
观察
所以问题只是在控制台 VM 中 - 我认为完整 GUI VM 没问题。我注意到一件奇怪的事情,那就是如果我ifconfig
在服务器 VM 中执行 ,我会获得enp0s3
和的配置lo
。但是,如果我执行ifquery --list
,我只会获得 的设备lo
。
这表明这些if
命令没有被使用(事实上我必须ifconfig
手动安装)。我会尝试看看是否还有其他命令可用于启动或关闭网络设备。
更新
根据评论建议,我尝试创建 VirtualBox 网络设备,因此:
- 姓名:
vboxnet0
- 适配器选项卡:“自动配置适配器”(勾选)
- DHCP 服务器选项卡:“启用服务器”(勾选)
我单击“应用”并出现一个对话框,其中显示NS_ERROR_NOT_IMPLEMENTED
。
我将尝试其他网络类型。
答案1
@Zina 的一系列有用评论帮助我深入了解了这个问题。
首先我确认有两个网络适配器可用,即使它们没有启动:
sudo cat /proc/net/dev
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
enp0s3: 2360 4 0 0 0 0 0 0 2170 14 0 0 0 0 0 0
enp0s8: 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0
lo: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
然后我添加了这个简单的命令/etc/network/interfaces
来使用 DHCP 启动一切:
auto lo
auto enp0s3
iface enp0s3 inet dhcp
auto enp0s8
iface enp0s8 inet dhcp
现在我们取得了一些进展ifconfig
:
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255
inet6 fe80::a00:27ff:fe00:6ca9 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:00:6c:a9 txqueuelen 1000 (Ethernet)
RX packets 4 bytes 2360 (2.3 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16 bytes 2310 (2.3 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.43.105 netmask 255.255.255.0 broadcast 192.168.43.255
inet6 fe80::a00:27ff:fe9e:4ec0 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:9e:4e:c0 txqueuelen 1000 (Ethernet)
RX packets 14 bytes 1427 (1.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 13 bytes 1550 (1.5 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
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
来找到每个虚拟机的 IP,以便可以从一个虚拟机 ping 另一个虚拟机。
我不知道为什么第一个网络适配器会自动启动,并且interfaces
文件为空,而第二个却不会。此外,我的 GUI VM 仅引用文件中的环回适配器interfaces
,但似乎会自动启动两个网络设备。