Virtualbox network setup with no public IP
来源:互联网 发布:php workman 编辑:程序博客网 时间:2024/06/05 15:16
之前一直用 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/
这里有更多细致的分析和更好的方案,强烈推荐。
- Virtualbox network setup with no public IP
- VirtualBox network / study environment setup for RHEL
- VirtualBox Network with Host Windows 7
- EventBus 注册错误no public methods with the @Subscribe annotation
- [PPTP] PPTP Server On Ubuntu With Double Public IP
- VirtualBox shared folder setup
- caffe setup on ubuntu 15.04 with CPU and NO GPU and NO Python
- embedded system network setup
- setup network and route
- chromium network proxy setup
- 3G拨号获取不到IP--No network protocols running
- Guide to IP Layer Network Administration with Linux
- (virt-install)ERROR Network not found: no network with matching name 'default'
- Putty connects Ubuntu12.04 in Virtualbox with error "network error software caused connection abort"
- virtualbox linux development environment setup
- setup cluster -- ssh to each other with no key ssh免密钥登陆配置
- 异常 EventBusException:its super classes have no public methods with the @Subscribe annotation
- EventBusException: Subscriber class *** and its super classes have no public methods with the @Subsc
- layoutopt用法
- spring scope="prototype" 和scope="singleton"区分
- 如何动态 设置 屏幕标题
- Linus Torvalds: A Very Brief and Completely Unauthorized Biography
- 在1~500这500个整数中,找出连续相加等于500的数?
- Virtualbox network setup with no public IP
- .net Winform 控制子窗体在父窗体出现一次
- 如何刷新 ALV 数据
- 关于C++类库KYLib: 用C语言实现平衡二叉树(AVL tree)的源码
- Struts-bean标签库
- Gmail邮件客户端pop3和smtp服务器配置
- labview
- uva 216
- uva 639