在VirtualBox中,如何设置可以访问Internet的仅主机虚拟机?

在使用VirtualBox设置虚拟机时,我经常需要以下特性

  • vm有一个静态IP
  • 主机可以访问vm而无需端口转发
  • vm可以访问互联网
  • 我可以将我的笔记本电脑从网络移动到网络(例如从家到办公室到咖啡店),而不用担心保护或重新配置虚拟机

VirtualBox网络连接方法都不能满足这些要求。

  • NAT
    如果要从主机连接到vm,则需要端口转发。

  • 仅主机
    除非主机是路由器,否则vm无法访问互联网。

  • 桥接
    将vm暴露给网络; 不便携。

我可以通过在vm上设置两个适配器来获得我想要的设置。

VirtualBox 4.2.12
Ubuntu 12.04客人

在VirtualBox>首选项>网络中,设置仅主机网络。

我叫做vboxnet0,手动配置:
ip 192.168.56.1
网络掩码255.255.255.0
没有dhcp

VirtualBox网络配置VirtualBox网络配置

然后,在虚拟机的网络设置中,设置两个适配器:

适配器1
仅限主机,vboxnet0

适配器2
NAT

引导虚拟机并通过VirtualBox提供的控制台登录。

运行此命令以查看适配器:

ls /sys/class/net 

在我的例子中,适配器被命名为eth1和eth2(和lo,loopback接口)。

然后,编辑您的网络配置。

 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及更高版本的更新版本。

我可以用Christian Long解决方案来解决我的问题。 我添加了2个适配器:

适配器1 – NAT

适配器2 – 仅限主机,vboxnet0

唯一不同之处在于VM的interfaces文件:

 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。

VM重启后一切正常。

还有另一种简单的方法,我们不需要创建新的NAT适配器

  1. 在主机上,请添加以下iptables规则。 这会将数据包通过主机转发到Internet:

     sudo iptables -A FORWARD -o eth0 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT sudo iptables -A POSTROUTING -t nat -j MASQUERADE 
  2. 您还需要通过发出以下命令在主机上启用IP转发:

     sudo sysctl -w net.ipv4.ip_forward=1 

Ubuntu 17.10.1中的网络配置已更改。 您现在使用netplan配置。

我在这里遵循了这个指南

作为克里斯蒂安答案的迁移,请执行以下操作:

在/ 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 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 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 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 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 

我刚添加了2个适配器:

仅限适配器1主机,vboxnet0

Adapter2 NAT

它工作得很完美,我可以从主机访问虚拟机,我在虚拟机上有互联网。

是的,我有这个问题,这是一个彻底的痛苦! 但我通过在我的物理PC上安装Squid缓存代理服务器解决了这个问题,这样 – 我的主机互联网虚拟盒PC可以连接到互联网!

我在这里做了一个快速的3分钟指南 – 对于任何想要它如何工作的人! http://b0zmeister.wordpress.com/allowing-host-only-virtualbox-guest-to-connect-to-the-internet/