说实话,我现在工作都是用的Ubuntu Linux(只有家里的组装PC机装了WIN7,用来玩游戏。。。),不过,公司内部用了恶心的263,用wine跑不起来……只好装了VirtualBox,跑了个Win7系统(系统还没破解,这一两天一直弹出激活提示,呃……)。
以前用Windows工作的时候也跑过虚拟机,习惯用host-only+网络共享的方式让虚拟机访问外网,而且主机和虚拟机间可以相互通信。在Ubuntu里一直找不到这种配置方法,所以用了好长一段时间NAT方式共享外网,还好一直没用到需要主机虚拟机相互通信的情况。
今日心血来潮,一定要搞定host-only方式!费了一上午查资料测试,终于搞定,总结记录如下:
1.vbox全局设置
新建host-only网络。一般网络名会是vboxnet0,默认IP地址为192.168.56.1,子网掩码:255.255.255.0。
为了方便之后相互通信,需要虚拟机使用静态IP,因此将DHCP服务器禁用。
2.虚拟机设置
打开虚拟机之前先修改下虚拟机的网络设置,修改网卡1的连接方式为仅主机(Host-only)适配器,界面名称选择前面新建的vboxnet0,保存
启动虚拟机,修改虚拟机Win7系统网络连接:
IP为192.168.56.2(可修改为2-254之前任意值),子网掩码为255.255.255.0,默认网关为192.168.56.1。DNS设置与主机网络相同即可,这里也用的阿里的DNS服务。
至此,双机应可相互ping通。可能你在Ubuntu中无法ping通虚拟机中的Win7,是因为Win7的防火墙禁止ping,关闭防火墙应该就可以了。
3.开启Ubuntu的网络转发
网上有很多使用iptables实现host-only访问外网的教程,但是大都把这一步省了。但恰恰是这一步的缺失导致了我之前一直无法让host-only的虚拟机访问外网!
开启的方式如下:
编辑/etc/sysctl.conf
sudo vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sudo sysctl -p
cat /proc/sys/net/ipv4/ip_forward
4.配置网络转发规则
sudo iptables -t nat -A POSTROUTING -o eth0 -s 192.168.56.0/24 -j MASQUERADE
至此虚拟机应可访问外网了。如果还不能访问外网,请检查你的网络连接设备是否是eth0(使用ifconfig命令),如果不是,请将上述命令中eth0改成你有效的连接设备名,比如使用无线连接,设备名应该是wlan0。
为了每次开机后,转发规则都能生效,把这条命令加入/etc/rc.local
sudo vim /etc/rc.local
#enable vboxnet0 nat over eth0 iptables -t nat -A POSTROUTING -o eth0 -s 192.168.56.0/24 -j MASQUERADE同样请保证你使用你当前有效的网络连接设备名。
Ubuntu 14.04/Virtualbox 4.3.10测试通过