问题描述
在使用VirtualBox设置虚拟机时,我经常需要以下特征
-
VM有一个静态IP
-
主机无需端口转发即可访问vm
-
vm可以访问互联网
-
我可以将我的笔记本电脑从网络移动到网络(例如从家到办公室到咖啡店),而无需担心保护或重新配置虚拟机
没有一种VirtualBox网络连接方法可以自行满足这些要求。
-
NAT如果要从主机连接到vm,则需要端口转发。
-
Host-only除非主机是路由器,否则vm不能访问互联网。
-
桥接将vm公开给网络;不便携式。
最佳解决思路
我可以通过在虚拟机上设置两个适配器来获得所需的设置。
VirtualBox 4.2.12 Ubuntu 12.04 guest
在VirtualBox>首选项>网络,建立一个host-only网络。
我的名字叫vboxnet0,它是手动配置的:ip 192.168.56.1 netmask 255.255.255.0 no dhcp
然后,在虚拟机的网络设置中,设置两个适配器:
仅适配器1主机,vboxnet0
Adapter2 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获得一个默认网关。
次佳解决思路
我可以用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检查。
虚拟机重启后,一切正常。
第三种解决思路
还有另一种简单的方法,我们不需要创建一个新的NAT适配器
-
在主机上,请添加以下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
-
您还需要通过发出以下命令在主机上启用IP转发:
sudo sysctl -w net.ipv4.ip_forward=1
第四种思路
是的,我有这个问题,这是一个彻底的痛苦!但我通过在物理PC上安装Squid缓存代理服务器来解决这个问题,这样 – 我的host-only互联网虚拟PC可以连接到互联网!
我在这里做了一个快速的3分钟指导 – 对于任何想要如何工作的人来说! http://b0zmeister.wordpress.com/allowing-host-only-virtualbox-guest-to-connect-to-the-internet/
第五种思路
我刚刚添加了2个适配器:
仅适配器1主机,vboxnet0
Adapter2 NAT
它的工作原理非常完美,我可以从主机访问虚拟机,并且可以在虚拟机上使用互联网。