Virtualbox network setup with no public IP

之前一直用 VMware Server 1.x,后来 VS1 没有了,又换了平台,只能改 VirtualBox 了。VirtualBox 好不好用不说,目前是我唯一可选的虚拟化方案。

 

一般虚拟化方案(VMware / Vbox)都有几种网络配置:Bridge 桥接;NAT 地址转换;Host-only。

 

桥接实际上是将虚拟机的网卡直接绑定在某个指定的主机网络设备上。这在 VMware / Vbox 里都是一样的。对于有多个网络设备的主机,虚拟机可以选择绑定在某一个网卡上,如绑定在 eth0 或 wlan 上。这个时候,虚拟机的所有数据都是从这个指定的网络接口流出的。虚拟机网卡分配到的地址跟主机这个端口的地址是平级的(即位于同一网段),而且如果主机通过 dhcp 分配 IP 地址,虚拟机也会同样进来分配一个 IP 地址。虚拟机得到这个地址之后,访问外网、局域网资源都和主机是同等的,主机也可以 SSH 或其它方式连接虚拟机,最方便的一个方案。问题是——自家是没问题,公司环境下,如果公司没有做 MAC 地址限制而真给你分配了地址了,IP 冲突的隐患就埋下了。

 

另一个情况是,当主机对应的端口没有连接网络(如绑定到 wlan 而主机只有网线连接)时,虚拟机无法直接联网,必须手工更改绑定的端口。

 

那怎么办?NAT 其实是更好的方案。VMware / Vbox 都自带了一个针对虚拟机的 DHCP server 及 NAT 网关。接在对应 Virtual router 上的虚拟机网络可以由 VMware / Vbox 分配一个私有的网络地址;虚拟机通过这个地址访问外网的时后,由这个 virtual router 转为主机 IP 地址(与家用路由器行为完全一致)。由于它们的 IP 地址仅由 VMware / VBox 分配管理,外界并无法直接访问,所以不会在 LAN 内造成冲突。

 

VMware 中 NAT 挂载的所有网卡接入的是同一个 virtual router,所以之后的所有虚拟机可以互相连接,主机也可以任意连接到其中的每个虚拟机,所以这样实际是最好的方案。

 

标准 NAT 实现方式

(标准 NAT 实现方式,图片来自 http://akutz.wordpress.com/2009/08/20/building-a-better-os-x-firewall-or-how-i-solved-the-nat-problem-for-virtualbox/)

 

而 VirtualBox 的实现方式是为每个虚拟机动态启一个独立的 virtual router。好坏不说,这样的结果是导致主机无法为自己在每个独立的 NAT router 上分配一个地址,主机将无法直接从 NAT 端口连接到虚拟机

VirtualBox NAT

(VirtualBox NAT 实现,图片来自 http://akutz.wordpress.com/2009/08/20/building-a-better-os-x-firewall-or-how-i-solved-the-nat-problem-for-virtualbox/)

 

很多情况下,我的需求是,我要能够 ssh 连接到虚拟机里工作,而在必须的情况下,虚拟机需要能够连接外网(譬如进行 apt-get 等)。在 VMware 方案下 NAT 是足够的,在 VirtualBox 下,ssh 则是不通的。最后的解决方案如下:

 

每个虚拟机分配两个端口,Host-only 端口负责由主机到虚拟机的连接,NAT 负责由虚拟机到外界的连接。这样同时满足了

1、虚拟机不占用主机网络 IP

2、主机切换网络情况下虚拟机不受影响

 

应该是目前 Vbox 环境下可以接受的解决方案了。

 

参考资料

Building a Better OS X Firewall (or How I solved the NAT problem for VirtualBox)  by akutz at http://akutz.wordpress.com/2009/08/20/building-a-better-os-x-firewall-or-how-i-solved-the-nat-problem-for-virtualbox/ 

这里有更多细致的分析和更好的方案,强烈推荐。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值