文章目录
一、背景二、virtualbox四种网络模式三、使用virtualbox虚拟技术遇到的问题1、解决虚拟机不共用宿主机网关实现互联网功能2、解决宿主机设置Internet共享网络提示异常3、解决局域网不同机器访问虚拟机4、解决虚拟机不能访问互联网问题5、解决同宿主机的局域网机器访问虚拟机问题6、解决局域网其他机器访问虚拟机
一、背景
安装virtualbox在宿主机创建linux虚拟机,linux网络一般会与共用网关且同一ip段<网桥模式>,
这样会造成公司网络ip数量不够用的情况;故而需要指定其他ip地址供虚拟机使用,
且需要解决因为切换不同办公环境<家、公司、公共网络>,虚拟机一般设置静态ip,如果使用了不同网关,
会导致在其他环境下ip使用失效:例如在192.168.2段下办公的虚拟环境,
切换到192.168.1段的ip网络情况下就不能正常使用了;所以需要使虚拟环境ip地址固定下来。
二、virtualbox四种网络模式
virtualbox默认自带virtualbox host-only ***的仅主机网络
a. NAT 网络地址转换模式(Network Address Translation)
NAT是VirtualBox为新建虚拟机默认设置的网卡环境
还与端口映射配置:将虚拟机的端口映射到主机供外部机器访问虚拟机提供服务 b. Bridged Adapter 桥接模式
以主机网络环境为桥,直接连入到网络中。它使得虚拟机分配到独立的IP,所有网络环境完全和宿主机一致;即设置网桥模式的虚拟机网络情况由主机所在的网络环境决定。 c. Internal 内部网络模式
各个虚拟机利用VirtualBox内置的DHCP服务器得到ip,数据包传递不经过主机所在网络,因此安全性高,防止外部抓包 d. Host-only Adapter 主机模式
通过VirtualBox Host-Only Network网卡进行通信,虚拟机以此ip作为网关,因此模拟了一个本机与各个虚拟机的局域网;但是不能上网,本文也将尝试使用宿主机共享此适配器作为虚拟机的网关实现上网功能。
三、使用virtualbox虚拟技术遇到的问题
1、解决虚拟机不共用宿主机网关实现互联网功能
办法一:设置宿主机的网卡–Internet共享–选择虚拟机网卡,进入虚拟机设置网卡的网关与virtualbox host-only网络适配器的ip地址一致<即宿主机虚拟网卡的ip地址是虚拟机网卡的网关>
virtualbox host-only network适配器默认网关是:192.168.56.1
再更改虚拟机网络为host-only模式可能会发生改变;此时VirtualBox虚拟网卡的IP会被改变为192.168.137.1,虚拟网卡再修改回来:192.168.56.1;
设置虚拟机的网关必须于virtualbox host-only网卡保持一致。
办法二:先是添加过时硬件<网络适配器:network adapter>,设置固定ip,宿主机网卡再设置Internet共享该添加的网络适配器
可能有些会说需要设置宿主机网卡的固定ip才去Internet共享!不必要!!!
第一步:我的电脑-管理,选择网络适配器,选择-添加过时硬件;
第二步:一直下一步到选择:安装我手动从列表选择的硬件
第三步:下拉选择网络适配器,选择microsoft--microsoft 回环适配器<loopback adapter>
第四步:安装完成之后,重命名该新增适配器,并设置固定ip
第五步:回到办法二标题,设置宿主机适配器共享该新增适配器网络
通过virtualbox设置网络模式,选择那个被宿主机Internet共享的网络适配器即可实现互联网功能这里留下一个问题:需要解决互联网功能的同时,虚拟机之间的通信也应该保障,故而应该选择何种网络模式?抛弃网桥!!!
2、解决宿主机设置Internet共享网络提示异常
选择宿主机网络适配器–属性–共享–选择新增或者指定的适配器
提示:internet连接共享访问被启用时出现了一个错误听语音;
解决办法:
cmd输入:services.msc 选择windows firewal设置启用即可
3、解决局域网不同机器访问虚拟机
VBoxManage modifyvm "WINXP" --natpf1 "rule_name,tcp,,8081,,8080"
需要进入virtualbox安装目录下执行,WINXP为虚拟机名称,第一个端口是宿主机的,第二个才是虚拟机的。意思是将虚拟机的端口映射到宿主机供其他机器通过访问宿主机的ip加端口访问到虚拟机的服务。两个逗号之间是宿主机和虚拟机的ip地址。
不用试了,反正我是没成功!!!继续往下看,会有解决办法的!!!
4、解决虚拟机不能访问互联网问题
首先确认虚拟机选择的网络模式是否支持互联网不支持互联网的是否需要手动设置还是选择支持互联网的网络模式
virtualbox虚拟机默认两个网卡:
网卡一:默认网络地址转换(NAT),ip为10.0.2.15
如果是启动多个虚拟机则需要静态设置ip:
BOOTPROTO=STATIC
NOBOOT=yes
IPADDR=10.0.2.x # 网上说:x>3即可
NETMASK=255.255.255.0
GATEWAY=10.0.2.2 #不是10.0.2.1,为什么是这个,VBox设定的
# 非必须设置dns
#DNS1=8.8.8.8
#DNS2=114.114.114.114
然后重启network:service network start
网卡二:根据当前虚拟机与宿主机的关系,或者说是虚拟机想要使用的网络环境决定模式。
5、解决同宿主机的局域网机器访问虚拟机问题
在局域网创建的虚拟机,哪怕只是开发环境,也是需要其他用户也能访问到虚拟机。
关于防火墙,在试验中,打开与否都不应影响局域网内其他机器访问虚拟机的服务唯有在设置宿主机网络共享虚拟机准备的网卡,进入服务列表设置系统防火墙
services.msc ,选择windows firewall开机自启 关于静态ip,避免浪费局域网ip资源,一般不选择网桥模式<与局域网一致获取到独立ip>设置虚拟机的第一块网卡,默认网关10.0.2.2而非10.0.2.1第二块网卡可以是网桥或者host-only模式,避免局域网ip资源浪费,同时需要支持互联网
需要设置宿主机互联网共享虚拟机的网卡或者为其添加的过时网卡
优先共享虚拟机的网卡,省去操作系统添加过时硬件网卡 NAT配合端口映射使得其他局域网机器访问虚拟机服务
需要注意的是防火墙入网规则,需要开放访问的端口
6、解决局域网其他机器访问虚拟机
不要重复了问题:这里的意思,局域网内可以通过ip访问,那么其他机器能直接访问虚拟机的ip吗?
尽管按之前的解决办法,虚拟机的网络模式与宿主机实现Internet共享,其他机器能通过访问宿主机的ip来访问虚拟机暴露的端口提供的服务;但是,要怎样才能让其他人访问虚拟机的服务像远程访问一样,或者说不用直接访问宿主机的ip那么low呢?
解决办法:一般情况我们都会用到nginx!
如此我们便设置域名访问虚拟机,现在代理服务器配置好域名;
再回到宿主机,设置hosts文件,将域名映射到虚拟机ip地址,实现域名访问虚拟机。
一则解释在linux的/etc/hosts下修改
虚拟机ip nginx配置域名
然后能在其他机器访问域名到虚拟机吗?
不能,只能在本机使用该域名访问虚拟机!
不信?可以ping一下配置的域名,看解析的ip地址是否是虚拟机ip地址即可。
二则,直接修改访问虚拟机的主机hosts即可
修改hosts路径:C:\Windows\System32\drivers\etc
格式:虚拟机ip地址 虚拟机nginx配置的域名地址
测试:ping 域名,解析的ip是虚拟机ip地址,再访问,响应正确即代表成功。
收集明天的囬忆
认证博客专家
自动化/DevOps
Linux/CentOS
运维开发
从业软件测试岗8+年,管理岗4+年,现任职某互联网公司高级测试工程师,有丰富的过程改进经验,专注于测试管理、自动化及CI/CD等领域,涉及政府/电信、银行/互金、教育等行业,精通Python、Shell、Java等语言。