Build virtualized environment with Virtual-Box


虚拟化环境

环境

软件:VirtualBox 7.1.4

镜像:CentOS-7-x86_64-DVD-2009.iso

网络环境:Host-only mode + NAT 双网卡

关于虚拟机网络

Vitrual Box 用户手册中提到不同网络模式支持的功能:

Vitrual Box 和宿主机使用 Host-only 模式时,只支持虚拟机和宿主机、虚拟机和虚拟机之间的双向通信,并不支持访问外部网络,如果需要虚拟机连接网络,可以另外配置一块 NAT 网卡,双网卡(Host-Only + NAT)可以支持所有功能;

在 Vitrual Box 工具 -> 网络模块下配置双网卡

Host-Only 网络

点击新建创建网卡,选择手动配置网卡(根据需要也可以选择自动分配):

网卡 ip:192.168.200.100,掩码:255.255.0.0

启用 DHCP 功能:

DHCP 地址:192.168.200.1

设置各虚拟机自动分配 ip 地址范围:192.168.200.100 - 192.168.200.200

NAT 网络

创建一个 NAT 网卡即可,无需额外配置,如果要实现宿主机同网络内的其他机器需要访问宿主机内的虚拟机,则可以选择配置端口转发。

虚拟机配置

安装系统

新建虚拟机,挂载系统光驱,修改网络配置,网卡 1 选择刚刚配置的 Host-Only 网络,网卡 2 选择刚刚配置的 NAT 网络,移除无用的硬件配置,比如 usb,为虚拟机分配系统资源,如内存、CPU 核、硬盘资源,最后启动虚拟机进入安装页面安装光驱对应的系统,按照步骤安装即可;

(Note:安装 CentOS7 系统时,可以选择安装特定模板安装系统及相关依赖,这里选择使用最小安装,后面需要什么工具再装什么工具)

安装系统时会配置 root 用户密码,也可以选择创建新的用户,这里启动系统后使用 root 账户登录:

# 输入命令查看网卡
ip addr

可以看到 lo、enp0s3、enp0s8 (或其他标识符,不一定是 s3、s8)三块网卡,分别对应本地回环网络、Host-Only、NAT。

配置网络

现在网络功能还是不可用的,根据需要可以选择使用 DHCP 自动分配网址,也可以静态配置,因为前面我们使用的是手动配置的 Host-Only 网络,这里也选择配置静态 ip,方便后续使用 ssh 工具连接虚拟机;

根据系统类型找到网络配置文件,以 CentOS7 为例:

# 进入网卡文件目录
cd /etc/systemconfig/network-scripts/
# 编辑相关网卡
vi ifcfg-enp0s3
vi ifcfg-enp0s8

enp0s3 配置如下:

# 修改部分配置,新增 ip 配置
# 由 dhcp 切换为 static
BOOTPROTO=static
# 系统启动时自动启用网络服务
ONBOOT=yes

# 新增 ip 配置,记得和 virtual box 的host-only 网络手动配置的网段一致
IPADDR=192.168.200.101
# 掩码使用 18 位, 方便同网段虚拟机通信
NETMASK=255.255.255.0 

如果没有发现其他网卡文件,比如 enp0s8,则可以创建一个文件,使用 nmcli 命令管理网络:

# 生成新的网卡文件, 名字要和我们在 ip addr 中看到的网卡名一致, 比如这里应该写 enp0s8
nmcli connection add type ethernet ifname enp0s8 con-name enp0s8

# 查看所有网络
nmcli connection show

# 修改新的网卡配置, 由于我们的 enp0s8 对应 NAT 网络, 所以改为 dhcp 就行
vim ifcfg-enp0s8

# 修改内容
BOOTPROTO=dhcp

# 最后重启网络服务
systemctl restart network
# 查看网络状态
systemctl status network

测试虚拟机和宿主机能否双向通信,虚拟机能否连接互联网。

# 使用 ping 命令测试
# 虚拟机中
ping ${宿主机 id: 例如 windows 中使用 ipconfig 看 ip}

如果无法实现虚拟机、宿主机双向通信,则可以先关机,检查 Virtual Box 中目标虚拟机的网络配置中是否使用了双网卡,比如网卡 1 使用 Host-Only 网络,网卡 2 使用 NAT 网络,相关的网络名称和 Virtual Box 网络配置下的一致。

下载软件

默认的 yum 的 repo 使用的是官网的,可能会无法解析域名或无法访问,可以选择使用国内的镜像:

# 进入 yum 配置目录
cd /etc/yum.repos.d

# 备份默认的配置, 下载阿里云提供的配置文件
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 清除 yum 缓存
yum clean all
yum makecache

下载软件,比如 vim,net-tools

yum install -y vim
yum install -y net-tools

SSH 连接

在宿主机上可以使用相关工具通过 ssh 连接虚拟机,比如使用 Tabby;

虚拟机中需开启 ssh 配置:

# 查看系统是否安装有 ssh 服务
systemctl status sshd

# 如果没有可以下载
yum install openssh-server
systemctl start sshd

# 如果已经安装了,则进入配置目录
cd /etc/ssh/
# 备份原始配置文件,修改相关配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
vim /etc/ssh/sshd_config
# 打开注释, 允许 root 用户登录
PermitRootLogin yes

# ssh 默认占用端口 22, 如果要改可以加配置
Port 22

如果宿主机使用 ssh 连接虚拟机非常慢,则可以禁用 ssh 服务的特定功能,修改 sshd_config 配置文件:

# 禁用反向解析宿主机主机名
UseDNS no
# 不禁用 dns 的话可以配置国内常用的 dns, 比如阿里云的
vim /etc/resolv.conf
# 注释掉其中两个, 换成
nameserver 223.5.5.5
nameserver 223.6.6.6

# 禁用 GSSAPI 认证
GSSAPIAuthentication no

最后注意:之前配置网卡时没有配 DNS 地址,可以考虑在 /etc/resolve.conf 中加入常用的 DNS 服务器地址,根据需要调整 SELinux 配置。ssh 连接也可以使用密钥认证。如果需要暴露端口可以通过防火墙命令处理。


Author: NaiveKyo
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source NaiveKyo !
  TOC