现在的 Virtualbox 支持无界面启动了,这时我们一般是在主机上直接用 ssh 访问虚拟机。但是如果主机经常使用不同的网络,IP 地址无法固定(比如主机是笔记本,经常往返于办公室和卧室),最终导致虚拟机的 IP 地址也经常变动,那无疑为我们用 ssh 访问虚拟机添加了许多麻烦。本文介绍如何使 Virtualbox 虚拟机的 IP 地址相对于主机固定的方法。

本文的主机为 Windows 11 系统,虚拟机软件为 VirtualBox 7.0,虚拟机系统为 Debian 13。正常情况下应该适用于所以操作系统。

网络连接种类

Virtualbox 网络连接方式有很多种选择,但是我们常用的是这是三个:

  1. 网络地址转换(NAT);
  2. 桥接网卡;
  3. 仅主机(Host-Only)网络。
Virtualbox 网络连接方式

每种网络连接有着自己的特点,下面列举下主要特点

模式名称 特点
网络地址转换(NAT) 连接这个网络可以访问外部网络,但是外部网络不可访问虚拟机
桥接网卡 这个网络完全可以共享主机网络,主机网络发生变化时,也跟随变化,IP 也随之变动
仅主机(Host-Only)网络 这个网络也可以用来主机访问虚拟机以及虚拟机上 Web 服务,但是虚拟机不可访问外网

选择网络连接方式

从上面的介绍来看有多种网络连接可以选择

最简单的就是选择桥接网卡,直接共享主机网络,主机、虚拟机之间访问都没有问题

但是我们家用或者公司使用,都不会固定 IP 的,主机随时变化,那么虚拟机的 IP 也随时变化,很不方便,我们希望虚拟机的 IP 是固定的,方便我们连接和访问服务使用

所以最终的选择是:网络地址转换(NAT) + 仅主机(Host-Only)网络的组合。

操作步骤

新增 仅主机(Host-Only)网络

在 Virtualbox 中依次选择:管理 => 工具 => 网络管理器

Virtualbox 网络管理器

点创建,仅主机(Host-Only)网络,在下面的网卡设置中选择手动配置网卡,填上你喜欢的 IP 地址和正确的子网掩码(本文选择的地址是192.168.56.1,子网掩码为255.255.255.0),最后点击应用。DHCP 服务器选择不启用。

然后就会在 Windows 主机的设置 => 网络和 Internet => 高级网络设置这里看到对应的网络:Virtualbox Host-Only Ethernet Adapter。

Virtualbox Host-Only Ethernet Adapter

这样主机(Host-Only)网络的 IP 就配置好了。

配置虚拟机网络

点击安装好的 Debian 虚拟机:设置 => 网络。

网卡1:启用网络连接,连接方式为网络地址转换(NAT)

网卡 1 配置

网卡2 启用网络连接,连接方式为仅主机(Host-Only)

网卡 2 配置

网络这里的网卡顺序也是有意义的,会对应虚拟机对两张网卡识别的顺序。

虚拟机内部设置

启动 Debian

执行

1
ip address

会看到类似于如下输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:6e:2d:62 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
valid_lft 77591sec preferred_lft 77591sec
inet6 fe80::a00:27ff:fe6e:2d62/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:ad:06:3c brd ff:ff:ff:ff:ff:ff

可以看到网卡 1 被识别为 enp0s3,并且自动获取了 IP 地址,(这一般是安装系统时自动设置的,如果你没有自动设置,那还需要手动设置)。网卡 2 被识别为 enp0s8,当前没有 IP 地址。

我们需要手动编辑网络配置文件。网络配置文件一般为:/etc/network/interface。可以用你自己喜欢的编辑器来编辑这个文件。

可以按照下面的示例来编辑网络配置文件,要注意网卡 2(enp0s8)需要设置为 static,并且地址需要设置为上文主机(Host-Only)网络的同一个网段的 IP,且不能于主机(Host-Only)网络的地址相同。比如上文我们将主机(Host-Only)网络的 IP 设置为 192.168.56.1,那么此处我们可以将 address 设置为 192.168.56.2。并且需要注意,不要为网卡 2 设置网关gateway,否则虚拟机将不能联网。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface 网卡 1 的配置
allow-hotplug enp0s3
iface enp0s3 inet dhcp

# The second network interface 网卡 2 的配置
allow-hotplug enp0s8
iface enp0s8 inet static
address 192.168.56.2
netmask 255.255.255.0

修改完毕之后,需要重新启动网路

1
systemctl restart network

到这里就可以执行 ip address 查看网卡情况,网卡 2(enp0s8)已经设置成固定 IP 了,同时 ping http://www.baidu.com也是可以联网的。

至此虚拟机设置完成,我们可以愉快的使用 ssh 管理我们的虚拟机了。