Virtualbox network setup with no public IP
2011-03-05 09:22
429 查看
之前一直用 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 实现方式,图片来自 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 实现,图片来自 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/
这里有更多细致的分析和更好的方案,强烈推荐。
一般虚拟化方案(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 实现方式,图片来自 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 实现,图片来自 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/
这里有更多细致的分析和更好的方案,强烈推荐。
相关文章推荐
- VirtualBox network / study environment setup for RHEL
- Create Virtual Network with Virtualbox
- VirtualBox network / study environment setup for RHEL
- VirtualBox Network with Host Windows 7
- Create Virtual Network with VirtualBox on Mint 14
- Putty connects Ubuntu12.04 in Virtualbox with error "network error software caused connection abort"
- Putty connects Ubuntu12.04 in Virtualbox with error "network error software caused connection abort"
- How to install OS X Mavericks in Virtualbox with Niresh
- Setup VSFTPD Server with Virtual Users On CentOS, RHEL, Scientific Linux 6.5/6.4/6.3
- win7创建 VirtualBox COM 对象失败。 应用程序现在将终止。 Callee RC: E_NOINTERFACE (0x80004002)
- VirtualBox "/sbin/mount.vboxsf: mounting failed with the error: Invalid argument"解决办法
- VirtualBox network issue - HostInterfaceNetworking-VirtualBox Host-Only Ethernet Adapter
- CentOS 7 with VirtualBox
- oracle RAC下修改IP(public ip、private ip、virtual ip)
- 3G拨号获取不到IP--No network protocols running
- 解决: 运行qemu 提示"warning: could not open /dev/net/tun: no virtual network emulation"
- caffe setup on ubuntu 15.04 with CPU and NO GPU and NO Python
- virtualbox centos虚拟机 配置静态IP
- VirtualBox "/sbin/mount.vboxsf: mounting failed with the error: Invalid argument"解决办法
- Eventbus注册异常:its super classes have no public methods with the @Subscribe annotation