前言

虽然日常办公使用 Mac 已经非常便利,但偶尔还是需要使用 Linux 环境进行一些开发工作。为了方便使用,本文使用 VirtualBox 搭建了一个简单的 CentOS 开发环境,同时配置了 Host-OnlyNat 两种网络连接方式,保证了虚拟机中的 Linux 服务器,能够同时连接本机和互联网。

准备工作

搭建 CentOS 开发环境之前,需要先完成以下准备工作:

  • 安装 VirtualBox 6.1
  • 下载 CentOS-7-x86_64-Minimal-1708.iso 镜像(官网下载地址)。

创建虚拟机

首先,打开 VirtualBox,然后选择 新建,创建虚拟机,然后填入名称 centos7,并选择虚拟机的类型 Linux 和版本 Red Hat (64-bit)

然后设置虚拟机的内存大小,该设置按照实际使用场景进行调整即可。

下一步,选择虚拟硬盘的文件类型,因为不需要在其他虚拟化软件中使用,所以我们选择默认的 VDI 文件类型。然后分配文件的大小,我们暂时分配 20 GB

选择创建,这时候我们就得到了一个 centos7 虚拟机。不过在安装之前,我们还要进行一些设置,来保证虚拟机能够正常启动和运行。

设置虚拟机

首先,我们要对虚拟机的系统启动顺序进行设置。选中列表中的虚拟机,然后选择 设置-系统,并将 软驱 移动到启动顺序的最后。

然后再选择 存储-控制器-没有盘片,点击右侧的光盘图标,分配光驱,选择前面下载的 CentOS-7-x86_64-Minimal-1708.iso 镜像文件。

设置虚拟网卡

在设置虚拟网卡前,先来了解下 VirtualBox 支持的网络模式。VirtualBox 可选的网络模式有七种,分别是 Not attachedNetwork Address Translation (NAT)NAT NetworkBridged networkingInternal networkingHost-only networkingGeneric networking

  • Not attached 模式相当于没插网线,因此网络是断开的,无法连接主机和外网;
  • Network Address Translation (NAT) 模式支持访问主机和外网,但是主机和外网及其他虚拟机都不能直接访问该虚拟机,NAT 网络模式是 VirtualBox 默认的网络模式;
  • NAT Network 模式和 Network Address Translation (NAT) 模式类似,唯一的区别是该模式下,虚拟机之间可以相互访问;
  • Bridged networking 模式下,虚拟机相当于内网的一台机器,因此可以访问内网中的其他机器以及外网,内网中的其他机器也可以直接访问它,在该模式下,虚拟机之间也可以相互访问;
  • Internal networking 模式下,只有虚拟机之间可以相互访问;
  • Host-only networking 模式下,只有虚拟机和主机、虚拟机和虚拟机之间可以相互访问;
  • Generic networking 模式很少使用,本文暂时忽略;

虚拟机可以同时设置多张网卡,例如设置两张网卡,一张网卡使用 NAT 模式,支持访问外网,另一张网卡选择 Host-only networking 模式,虚拟机、主机以及其他虚拟机可以相互访问。

在不同的网络模式下,虚拟机、主机、局域网/外网之间的可访问规则,可以参考如下的表格。

ModeVM→HostVM←HostVM1↔VM2VM→Net/LANVM←Net/LAN
Host-only+++
Internal+
Bridged+++++
NAT+Port forward+Port forward
NATservice+Port forward++Port forward

在了解了 VirtualBox 支持的网络模式后,我们来进行虚拟网卡的设置,本文采用 Host-OnlyNat 组合的配置方式。

选择 菜单-管理-主机网络管理器,然后创建如下的虚拟网卡。

然后配置 centos7 虚拟机的网卡,网卡 1 配置为 Host-Only,网卡 2 配置为 Nat

启动虚拟机

完成虚拟机配置后,点击 启动 按钮,启动虚拟机。启动过程中,需要设置 root 用户的密码,以及创建新用户。

启动安装完成之后,点击 reboot 进行重启。

然后使用 root 用户重新登录,并查看 IP 信息,发现获取不到 IP 信息。

虚拟机 IP 设置

重启虚拟机之后,发现获取不到 IP 信息,还需要配合网卡设置虚拟机 IP。首先,进入 /etc/sysconfig/network-scripts/ 目录下,查看该目录下的网卡文件,存在两个网卡 enp0s3enp0s8

修改 enp0s3enp0s8 网卡配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# Host-Only网卡,设置成静态ip,用于与主机器通信
# vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.56.101
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=5d50000d-2081-4e44-8806-a4c1024b0d51
DEVICE=enp0s3
ONBOOT=yes

# Nat网卡,设置成动态获取ip,用于连接互联网
# vim /etc/sysconfig/network-scripts/ifcfg-enp0s8
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s8
UUID=27155750-2243-48d2-895d-8b79b0fd0d64
DEVICE=enp0s8
ONBOOT=yes

然后使用如下命令重启网络,发现并没有生效。

1
service network restart

查阅资料后,发现需要关闭网络管理器 NetwokManager,才能够使静态 IP 生效。

1
2
systemctl stop NetworkManager
systemctl disable NetworkManager

关闭 NetwokManager 之后,再次修改网卡配置,并重启网络服务,发现 IP 已经配置完成。

最后,使用 Mac 命令行连接虚拟机进行测试,输入 ssh root@192.168.56.101,终于成功登录上服务器。

现在,可以享受在 Linux 环境开发的乐趣了。