VirtualBox 虚拟机设置固定 IP(2025)
示例基于 VirtualBox 7.x + CentOS/Ubuntu。现代开发可选择 Parallels、VMware、UTM、Hyper-V 或云端环境(Codespaces、Cloud IDE)。当需要在本地模拟集群、离线环境或高校实验时,VirtualBox 仍然常见。本文保留 Host-Only + NAT 的经典方案,并补充 Apple Silicon、WSL2 的注意点。
网络接入模式回顾
模式 | 特点 | 适用场景 |
---|---|---|
NAT | 由宿主机代理访问外网;虚拟机可访问外网和宿主机,宿主机无法主动访问虚拟机 | 快速联网、端口转发 |
Bridged | 虚拟机使用与宿主机同网段 IP;可相互访问 | 企业内网、测试真实网络 |
Host-only | 仅与宿主机和同网段虚拟机通信 | 内部集群、离线环境 |
Internal | 仅虚拟机之间通信,不能访问宿主和外网 | 独立网络实验 |
目标
- 虚拟机能访问互联网(通过 NAT)
- 虚拟机之间互通并使用固定 IP(Host-only)
- 宿主机可访问虚拟机(便于 SSH/SCP)
配置步骤
1. 创建双网卡
- VirtualBox 管理界面 → 选中虚拟机 → 设置 → 网络。
- 网卡 1:启用 → 连接方式选择“网络地址转换(NAT)”。
- 网卡 2:启用 → 连接方式选择“仅主机(Host-only)适配器”,选择事先创建的 Host-only 网卡(如
vboxnet0
)。
如果未创建 Host-only 网卡,可在 VirtualBox → 首选项 → 网络 → Host-only 网络 中添加,并设置 IP 段(默认 192.168.56.1)。
2. 虚拟机内配置静态 IP
以 CentOS/RedHat 系为例:
cd /etc/sysconfig/network-scripts
sudo vi ifcfg-enp0s8 # 对应 Host-only 网卡
bash
设置内容:
BOOTPROTO=static
IPADDR=192.168.56.104
NETMASK=255.255.255.0
GATEWAY=192.168.56.1
DNS1=8.8.8.8
ONBOOT=yes
text
Apple Silicon/Ubuntu 22.04 以后网卡命名可能为
enp0s3
、ens33
、enp0s8
,可通过ip addr
查看。
重启网络:
sudo systemctl restart NetworkManager
# 或 ifdown/ifup 基于发行版
bash
3. 验证网络
- 虚拟机访问外网:
ping -c 3 8.8.8.8
- 宿主机访问虚拟机:
ping 192.168.56.104
,ssh vagrant@192.168.56.104
- 虚拟机之间互通(多台时互 ping)
WSL2 / 云环境补充
- WSL2:默认使用虚拟网络,IP 每次启动可能变化。建议通过
wsl.exe --shutdown
后在 Windows 防火墙中配置端口转发,或使用wsl-host
工具固定。 - 云服务器:购买 2C4G+40G(含 swap)的按量实例,开启安全组端口,结合 Terraform/Ansible 实现一致化部署。
常见问题
问题 | 原因 | 解决方案 |
---|---|---|
宿主机无法访问虚拟机 | 防火墙阻挡或未启用 Host-only 网卡 | 检查 firewalld / ufw ,确保 Host-only IP 段允许通信 |
虚拟机断网 | NAT 配置异常或 DHCP 未启用 | 重启 NAT 网络,在 VirtualBox 全局设置中确认 DHCP 服务器启用 |
IP 冲突 | 多台虚拟机使用相同静态 IP | 为每台虚拟机分配唯一地址,或启用 DHCP 并绑定 MAC |
Apple Silicon 不支持 | VirtualBox 对 ARM 支持有限 | 使用 UTM、Parallels 或 Docker Desktop + VM 替代 |
建议
- 使用 Vagrant/Ansible/Cloud-Init 自动化配置虚拟机,保持网络与软件一致。
- 将 Hosts 文件或内网 DNS 配置为域名访问虚拟机,便于多环境切换。
- 对于 K8s、分布式系统,推荐使用 Kind、k3d、Minikube 等容器化方案,降低网络配置复杂度。
固定 IP 网络方案适用于数据库主从、Redis 集群、Hadoop/Spark 练习等场景。若团队已迁移到云原生,可优先使用 Docker Compose、Kubernetes、Dev Container 直接模拟生产环境。
↑