我在桌面上使用Linux(目前是Ubuntu),但偶尔需要使用Windows进行网络研讨会、特定于操作系统的测试等。我大约六个月前开始使用VirtualBox进行虚拟化,并且相当满意;Windows启动很快,一切都“正常工作”。也就是说,直到昨天。
我得到了一个运行Web服务器的LinuxVM映像和一些我需要审查的应用程序。最重要的是,我需要通过WebEx这样做,这样我就可以与其他人共享我的屏幕。这意味着我需要以下内容才能工作:
- 我的WindowsVM的Internet访问权限
- 从我的WindowsVM访问我的linuxVM
- 理想情况下,从我的linux主机访问两个来宾VM
- 理想情况下,我的linux主机可以访问互联网
因为在此之前我一次只使用过一个VM映像,所以我从来没有遇到过任何问题;我可以在VirtualBox中使用NAT网络,并在我的主机和来宾之间进行通信,以及两者都可以访问互联网。但是NAT访问不允许虚拟机相互通信——事实上,两者都从我的主机接收到完全相同的IP地址,这意味着我可以从两者访问互联网,两者都可以ping主机,但主机无法访问任何一台机器,并且两者都无法访问对方。
我做了一些研究,并开始阅读有关使用网桥的内容,我曾尝试过一次但没有成功。幸运的是,这次我开始阅读的第一篇文献指出了我之前失败的原因:无线适配器上的网桥不起作用,而我正在使用我的wifi。我曾短暂地考虑过使用有线连接,但意识到这不是一种选择:有时当我无法使用有线连接时,我可能需要这种设置。
然后我找到了一篇文章,详细介绍了如何使用VirtualBox设置主机接口网络。主机接口网络是在2.1.x系列的VirtualBox中添加的,基本上允许您将主机用作来宾机器的网络网关。Ubuntu中可用的VirtualBox二进制文件是2.0.x……所以我不得不卸载它们并从VirtualBox站点下载官方二进制文件。
设置主机接口网络仅适用于案例2;不知何故,当它处于活动状态时,我的路由完全受阻。所以,我做了更多的研究。接下来我发现我需要设置一个或多个虚拟网络设备(TAP),这将允许每个虚拟机拥有自己的IP地址,并通过同一网络进行通信,同时使用主机中的wifi适配器作为网关互联网。
我找到的所有说明都为每个虚拟机设置了一个单独的TAP接口。我很快发现了两件事:首先,我必须在我的主机的iptables规则中设置IP伪装,以便虚拟机可以访问互联网,其次,虽然这可以解决案例2-4,但虚拟机仍然无法与每个其他。最后,我发现我需要设置一个TAP接口,并让所有VM都使用它作为它们的主机接口——然后一切正常。几乎。我发现的另一个技巧是TAPaddress应该位于您还不是其成员的专用网络上—包括您的路由器可能使用的专用网络空间。Ifollowed的指令在10.0.1.X网络中设置网络,但这与分配了10.0.0.X地址的myDSL调制解调器冲突,这意味着来宾机器无法访问外部世界;切换到192.168.168.X解决了所有问题。
以下是分步说明(Linux主机):
- 在主机上:
- 确保安装了uml-utilities
- 在基于Debian的系统上,
sudoaptitudeinstalluml-utilities
- 在基于Debian的系统上,
- 创建虚拟网络接口
sudotunctl-ttap0-u$USER
(其中$USER
是启动VirtualBox会话的用户- 确保用户在vboxusers组中:
- 编辑
/etc/group
,查找vboxusers
条目,并确保$USER
被列为该组的成员。
- 编辑
- Make确保vboxusers组有权调整设备:
sudochgrpvboxusers/dev/net/tun
sudochmod660/dev/net/tun
- 确保用户在vboxusers组中:
- 启用网络接口并为其分配一个IP地址
- li>确保IP不在您网络中其他地方使用的网络掩码上;我使用192.168.168.1,它没有与任何冲突。
sudoifconfigtap0192.168.168.1
- 确保安装了uml-utilities
- 设置NAT转发:
sudoiptables-tnat-APOSTROUTING-owlan0-jMASQUERADE
- 根据您在计算机上使用的内容替换适当的网络接口。
sudosysctl-wnet.ipv4。ip_forward=1
- 设置TCP/IPnetworking在您为主机上的虚拟适配器定义的网络中使用静态IP地址。例如,如果您在主机上使用192.168.168.1:
Address: 192.168.168.[UNIQUE] Netmask: 255.255.255.0 Gateway: 192.168.168.1
/etc/resolv.conf
。现在,请注意:当您重新启动主机盒时,您的TAP设备将会消失。为了解决这个问题,我在/etc/rc.local
中添加了以下几行:
echo -n "Setting up tap0 interface..." tunctl -t tap0 -u matthew ifconfig tap0 192.168.168.1 iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE sysctl -w net.ipv4.ip_forward=1 echo "DONE!"
这可确保设置TAP设备,并确保在启动时启用IP伪装。
我写这篇文章主要是为了我自己,但也希望它能为其他人节省我为找到写入设置组合而必须经历的许多小时的实验。