在使用 VirtualBox 设置虚拟机时,我经常需要以下特性
- VM 具有静态 IP
- 主机无需端口转发即可访问虚拟机
- VM 可以访问互联网
- 我可以将笔记本电脑从一个网络移动到另一个网络(例如从家里到办公室再到咖啡店),而不必担心虚拟机的安全或重新配置
VirtualBox 网络连接方法均无法单独满足这些要求。
NAT
如果您想从主机连接到虚拟机,则需要端口转发。仅主机
除非主机是路由器,否则虚拟机无法访问互联网。桥接
将虚拟机暴露于网络;不可移植。
答案1
我可以通过在虚拟机上设置两个适配器来获得我想要的设置。
VirtualBox 4.2.12
Ubuntu 12.04 客户机
在 VirtualBox > 首选项 > 网络中,设置仅主机网络。
我的叫vboxnet0,是手动配置的:
ip 192.168.56.1
netmask 255.255.255.0
no dhcp
然后,在虚拟机的网络设置中,设置两个适配器:
适配器 1
仅限主机,vboxnet0
适配器2
NAT
启动虚拟机并通过 VirtualBox 提供的控制台登录。
运行此命令来查看您的适配器:
ls /sys/class/net
在我的例子中,适配器被命名为 eth1 和 eth2(以及 lo,环回接口)。
然后,编辑您的网络配置。
sudoedit /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
# Host-only interface
auto eth1
iface eth1 inet static
address 192.168.56.20
netmask 255.255.255.0
network 192.168.56.0
broadcast 192.168.56.255
# NAT interface
auto eth2
iface eth2 inet dhcp
请注意,eth1
没有指定默认网关。eth2
将从 dhcp 获取默认网关。
2018 年 3 月更新
看这个答案从@Hugo14453获得适用于 Ubuntu 17.10 及更新版本的更新版本。
答案2
Ubuntu 17.10.1 中的网络配置已更改。您现在使用 netplan 配置。
我遵循了本指南这里
作为 Christian 答案的迁移,请执行以下操作:
在 /etc/netplan 中创建一个新的配置文件来保存仅主机适配器配置。
例如sudo nano /etc/netplan/02-netcfg.yaml
输入以下内容配置静态 IP 192.168.56.12,其中enp0s3
是您的仅主机适配器的名称。
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
addresses:
- 192.168.56.12/24
dhcp4: no
然后运行以下两个命令:
sudo netplan generate
sudo netplan apply
NAT 无需配置即可工作,运行ifconfig
即可查看结果:
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.56.12 netmask 255.255.255.0 broadcast 192.168.56.255
inet6 fe80::a00:27ff:fe06:6cdd prefixlen 64 scopeid 0x20<link>
ether 08:00:27:06:6c:dd txqueuelen 1000 (Ethernet)
RX packets 252 bytes 23076 (23.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 208 bytes 30015 (30.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.3.15 netmask 255.255.255.0 broadcast 10.0.3.255
inet6 fe80::a00:27ff:fe4d:a6b8 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:4d:a6:b8 txqueuelen 1000 (Ethernet)
RX packets 95 bytes 94894 (94.8 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 85 bytes 7436 (7.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
答案3
我可以使用 Christian Long 解决方案来解决我的问题。我添加了 2 个适配器:
适配器 1 - NAT
适配器 2 - 仅主机,vboxnet0
唯一的区别是在 VM 的接口文件中:
sudoedit /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
# NAT
auto eth0
iface eth0 inet dhcp
# Host only
auto eth1
iface eth1 inet dhcp
在 VirtualBox 网络配置中我保留 DHCP 勾选状态。
虚拟机重启后一切正常。
答案4
我刚刚添加了 2 个适配器:
适配器 1 仅限主机,vboxnet0
适配器2 NAT
而且它运行完美,我可以从主机访问虚拟机,并且虚拟机上有互联网。