如果我们在虚拟机内搭建好服务器后,希望可以在局域网内的设备上都能访问到这个虚拟服务器,就可以参照以下步骤来操作。其中包括了很多遇到的坑。先说说我的环境是
宿主机:windows 8.1
虚拟机:vmware+linux centos6.5
服务器:nginx
1.搭建局域网
我是利用笔记本wifi热点搭建的局域网。win7及以下版本应该有搭建临时无线网络的功能可以直接用这个功能,而win8开始这个功能就被隐藏了,可以在命令行输入netsh wlan set hostednetwork mode=allow ssid=热点名称 key=密码(8位及以上) 然后netsh wlan start hostednetwork 开启。
或者直接用connectify。我用上面这个方式不知道为什么手机连热点的时候获取不到ip地址,用connectify就可以。
无论用哪个方法都会多出一个这样的托管网络虚拟适配器的本地连接
如果不打算连接互联网在connectify的设置>NAT选项把无Internet时暂停连接的选项取消选中就好。
2.虚拟机设置
虚拟机的网络连接方式大致是三种,(1)桥接模式,在这种模式下,虚拟机相当于与所在物理机同一IP段的独立计算机,与局域网内的其他计算机是没有区别的;(2)NAT模式,这种模式下,虚拟机与所在的物理机单独组成了一个新的局域网,他们共享接入物理机的IP段;(3)host—only模式,在这种模式下物理机下所属的所有虚拟机共同组成一个局域网,他们与物理机之间是断开的,也就是说物理机和虚拟机之间是无法访问的。
如果局域网想要访问虚拟机的服务怎么办呢?这时候基本上有两种思路,一种是将虚拟机的网络连接设置成桥接模式,因为这时候虚拟机相当于所在物理机同一IP段的独立计算机,这时候其他的局域网内的计算机当然可以访问虚拟机内的服务,一般在虚拟机的设置里面找到网络设置,将其设置为桥接模式,借助虚拟机的IP就可以实现访问,但是这么做访问速度会非常慢。另外一种比较好的方式就是将虚拟机的网络连接设置成NAT模式,注意,直接这么设置局域网内的其他计算机是无法访问虚拟机中的服务的,因为局域网内的其他计算机相对于虚拟机和物理机新组的局域网来说属于外网,这时候还需要在物理机中对其进行端口映射,这个与局域网中利用路由器对其中某个IP端口进行映射的原理是一样的,通过这种也可以实现局域网访问虚拟机内的服务。(来源http://blog.csdn.net/jiangdianqin/article/details/50365988)
我们这里选用的是NAT模式。
①我们发现宿主机网络连接里有一个VMnet8
查看它的IP(直接在属性里查看或者ipconfig都行)
这个ip就是在宿主机在以后新建出来的虚拟机与宿主机之间的局域网里的ip地址。记住这个ip地址。
②打开虚拟机>编辑>虚拟网络编辑器
选择VMnet8那个选项,最下面子网ip改成和刚刚那个ip处于同一网段内。
比如我这里是192.168.139.1 就把虚拟机的改成192.168.139.0
DHCP设置里还可以设置分配给虚拟机的开始和结束ip
③点击 NAT设置
网关ip设为①里看的那个ip地址
④确定 然后回到虚拟机系统里查看虚拟机的ip地址(记得联网 我用的是linux的centos6.5 网络连接里只有eth0我就连了这个)
linux可以输入ifconfig查看ip地址
我这里就是192.168.139.128
确定在虚拟机里服务器可以访问,确定端口(我的是nginx服务器直接设在80端口)
⑤关闭虚拟机防火墙!!
我之前各种配置都设置好了也可以ping的通然而在宿主机里就是访问不了虚拟机的服务器,最后发现就是防火墙的锅。
centos6.5
防火墙(Iptables)重启系统生效
开启: chkconfig iptables on
关闭: chkconfig iptables off
防火墙(Iptables) 即时生效,重启后失效
开启: service iptables start
关闭: service iptables stop
windows可以添加出入站规则什么的,可以自己去百度。
⑥添加端口转发
这是为了可以让局域网里的其他设备访问的到虚拟机
编辑>虚拟网络编辑器>vmnet8>nat设置>端口转发 添加
主机端口填的是你希望在宿主机访问哪个端口就可以访问到虚拟机
这里是8080 我在宿主机输入 localhost:8080 或者http://192.168.139.1:8080/都可以访问到虚拟机
虚拟机ip地址和端口就是上上一步看的那个
这样就可以在宿主机器访问虚拟机服务器了
在宿主机器里输入虚拟机的ip地址也可以访问。
3.宿主机配置
现在宿主机可以访问虚拟机服务器了,但局域网里其他设备还不可以。
①共享VMnet8
打开那个托管网络虚拟适配器的本地连接的属性
勾选这两个选项,家庭网络连接里选择虚拟机VMnet8那个网络连接
如果这里没有选项可以选择,可以先连接互联网。然后点开这个连接的属性里的共享标签,勾选两个选项之后选择VMNET8.
然后再去看托管网络虚拟适配器的本地连接的属性的共享里就会出现VMNET8了
②其他设备连接上局域网,查看本机在局域网里的ip
如果是用connectify开出来的热点可以在软件里看到连接的设备在局域网里的ip
查看宿主机在这个宿主机-其他设备的局域网里的ip可以用类似第2步的方法,查看托管网络虚拟适配器的本地连接的属性,或者ipconfig。
我这里就是192.168.141.1
③设置宿主机防火墙入站规则!!!
这也是我遇到的坑
局域网里的设备可以ping通宿主机的ip但是就是访问不了服务器。
我们在 控制面板>(系统安全)>windows防火墙>左边入站规则>右边新建规则
选择端口
特定本地端口里输入3.6里你设置的那个端口,我这里是8080
设置好之后就可以访问了,在其他设备输入宿主机在宿主机-其他设备局域网的地址:端口
我这里是192.168.141.1:8080
就可以了