【问题】为啥WMWare Workstation里面虚拟机的网关默认是NAT网关
今天做KickStart自动化安装实验,无意中发现一个奇怪现象。
先描述下我的实验环境:笔记本Win10,安装了WMWare Workstation,在WMWare Workstation上面安装了CentOS7,CentOS7被规划在VMNet 8网段,使用NAT方式连接网络。
最小化安装完毕CentOS7虚拟机后,查看DNS配置,意外发现DNS的IP竟然是:
[root@localhost ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.80.2
我印象中的DNS应该是8.8.8.8 或者 114.114.114.114这种众所周知的DNS。虽然从未想过虚拟机的DNS该填什么,但是192.168.80.2这个IP也着实让我有了不小的震撼。后来发现一篇文章,茅塞顿开。记录下来做个纪念。
https://www.vmware.com/support/ws3/doc/ws32_network21.html
CentOS7能够上外网完全是VMware NAT Service的功劳,VMware NAT Service给我们虚拟出了一个NAT device设备,这个设备的IP就是192.168.80.2。NAT原本就是网络地址转换,用于私有网络与共有网络、非以太网与以太网之间的转换。正常来说NAT功能也就这样了,但实际上VMware NAT Service所做的工作并不仅仅是网络地址转换这么简单,还有DNS、DHCP等功能。想想我们自己的PC机,那上边配置的IPv4 DNS是啥?替换掉虚拟机CentOS7的DNS会有什么反应?
下面停用VMware NAT Service


此时ping百度,VMware NAT Service禁用前可以ping通,禁用后不可以。
[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (61.135.169.121) () bytes of data.
bytes from 61.135.169.121: icmp_seq= ttl= time=71.7 ms
bytes from 61.135.169.121: icmp_seq= ttl= time=55.7 ms
^C
--- www.a.shifen.com ping statistics ---
packets transmitted, received, % packet loss, time 3618ms
rtt min/avg/max/mdev = 55.765/63.754/71.743/7.989 ms
[root@localhost ~]# ping www.baidu.com
ping: unknown host www.baidu.com
猜想:VMware NAT Service这个服务虚拟出的NAT device设备,这个设备的IP是192.168.80.2。禁用这个服务相当于把192.168.80.2这个设备短路了,所以ping 192.168.80.2当然不同。虚拟机使用NAT上网会在宿主机(此处位我的笔记本)上虚拟出VMware Network Adapter VMnet8网卡(使用host-only模式也有)。我禁用VMware NAT Service相当于关机192.168.80.2这个设备。但是对192.168.80.1应该没有影响啊。ping 192.168.80.1,发现并没有提示通不通,几十分钟都卡在ping的界面。这又是怎么回事呢?
[root@localhost ~]# ping 192.168.80.2
PING 192.168.80.2 (192.168.80.2) () bytes of data.
From 192.168.80.132 icmp_seq= Destination Host Unreachable
From 192.168.80.132 icmp_seq= Destination Host Unreachable
From 192.168.80.132 icmp_seq= Destination Host Unreachable
From 192.168.80.132 icmp_seq= Destination Host Unreachable
^C
--- 192.168.80.2 ping statistics ---
packets transmitted, received, + errors, % packet loss, time 3000ms
pipe
[root@localhost ~]# ping 192.168.80.1
PING 192.168.80.1 (192.168.80.1) () bytes of data.

关闭VMware NAT Service服务,192.168.80.2这个设备相当于短路,和一条电线没区别。连接192.168.80.1这条链路应该可以通,此时不通的原因最后解释。那我ping192.168.80.114这台机器呢?可以ping通,因为在一个网段,都连在交换机VMNet8上面,这个在预料之中。
再次猜想:192.168.80.132这台虚拟机上DNS默认是192.168.8.2。现在VMware NAT Service服务关闭了,我改成其他的DNS可以吗?
改成8.8.8.8,发现不通。会不会是因为是谷歌的,国内访问慢?? 我看卡笔记本上的DNS,发现是172.20.10.1,我改成这个DNS再试还是不行。哎呀,为了上外网我只想到了域名解析问题了,别忘了我这是虚拟机,使用的是192开头的私有网络,私有网络到公有网络,还要考虑到NAT转换,但是我刚刚把NAT干掉,当然用什么DNS都不行了。
下面启用VMware NAT Service服务,然后再ping 192.168.80.2和百度
[root@localhost ~]# ping 192.168.80.2
PING 192.168.80.2 (192.168.80.2) () bytes of data.
bytes from 192.168.80.2: icmp_seq= ttl= time=0.108 ms
^C
--- 192.168.80.2 ping statistics ---
packets transmitted, received, % packet loss, time 0ms
rtt min/avg/max/mdev = 0.108/0.108/0.108/0.000 ms
[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (61.135.169.125) () bytes of data.
bytes from 61.135.169.125: icmp_seq= ttl= time=55.6 ms
^C
--- www.a.shifen.com ping statistics ---
packets transmitted, received, % packet loss, time 0ms
rtt min/avg/max/mdev = 55.606/55.606/55.606/0.000 ms
[root@localhost ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
#nameserver 192.168.80.2
nameserver 172.20.10.1
发现可以ping通。我比较担心改过需要重启才能生效,所以我重启了计算机(感觉重启网络就行),发现还是通的。再次查看DNS配置文件,神奇的事发生了,他把我原来修改的DNS配置文件替换了
[root@localhost ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.80.2
为啥会这样,还是VMware NAT Service搞得鬼,他还内置个DHCP功能,这个功能可以给NAT网络下边所有虚拟机下发配置信息,告诉他们“嗨!哥们你们的DNS是192.168.80.2”,虽然192.168.80.2这个NAS device也是个傀儡,但还是打肿脸装胖子说自己是DNS server。实际上他是向主机(此处位我的笔记本)上的DNS服务器求助来解决域名解析工作。
最后一个问题。前面折腾那么久,无论是VMware NAT Service禁用前后,我在ping 192.68.80.1时,既没有报错也没有提示不通,就一直卡在ping界面,这是神马鬼???
原来是主机(也就是笔记本)防火墙的原因,关闭防火墙,可以ping通。

虚拟机里面的应用程序想要访问网络资源,借助NAT可以轻松实现。宿主机的网络到网络资源之间的链路、网络可以是任何类型。只要他们支持TCP/IP就行。对于如下情况,都应该考虑NAT:
1、IP 数量有限
2、虚拟机连接到非以太网适配器
NAT可以将虚拟机私有地址转换成宿主机的IP。虚拟机NAT服务使用宿主机的网络资源连接外部网络,代替虚拟机请求外部资源。因此,只要宿主机以外的网络支持TCP/IP,虚拟机就可以访问到他们。
为了使网络配置更简单,在你安装VMware Workstation的时候,DHCP server被自动安装了。DHCP server在NAT网络,以及host-only网络下都有工作。在NAT网络下,虚拟机发送DHCP request请求分配IP,DHCP server会把<net>.128 到 <net>.254的地址分配给虚拟机。而<net>.3 到 <net>.127往往设置成静态IP地址。IP address <net>.1 is reserved for the host adapter; <net>.2 is reserved for the NAT device。在NAT网络中,DHCP server除了告诉虚拟机IP地址,还会发送额外配置信息,包括网关,DNS server地址。DNS server告诉这些虚拟机,网关于DNS server都是NAT device的地址,即<net>.2。于是虚拟机所有对外网的通信都会找<net>.2。当然这里的DNS server是默认的配置,你也可以改成外网的某个DNS,最简单的做法就是看你宿主机的DNS,改成和他一样的。
【问题】为啥WMWare Workstation里面虚拟机的网关默认是NAT网关的更多相关文章
- NAT网关之SNAT进阶使用(一)SNAT POOL
		
摘要: NAT网关是云上VPC ECS访问Internet的出入口.SNAT可实现指定的VPC ECS使用指定的公网IP访问互联网.阿里云NAT网关控制台创建SNAT条目时,默认是为指定的交换机配置1 ...
 - VMware Workstation虚拟机中的Linux通过NAT模式共享上网配置教程
		
VMware Workstation虚拟机中的Linux通过NAT模式共享上网配置教程 在VMware Workstation虚拟机下面,Linux虚机要上网,一般是桥接模式,但我自己的电脑上网的环境 ...
 - Wmware桥接网络虚拟机无法上网的问题
		
之前装好的一个虚拟机,安装到本地的Wmware workstation的时候,发现无法上网. 虚拟机使用的是桥接模式:一开始怀疑IP被占用,修改后发现不起作用. 排查所有的网络配置,发现都没有问 ...
 - 使用WMware新建linux虚拟机
		
使用WMware安装linux虚拟机的时候很多人搞不清楚使用什么适配器. 平时也看到很多误人子弟的观点,这里用事实说话. VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络 ...
 - VMware workstation创建虚拟机console
		
1. 使用VMware workstation创建虚拟机硬件2. 安装操作系统3. 操作系统安装过程 1. 使用VMware workstation创建虚拟机硬件 使用VMware workstati ...
 - windows10用WMware安装Linux虚拟机详细步骤
		
windows10用WMware安装Linux虚拟机详细步骤 一.安装环境 windows10操作系统物理机VMware Workstation 软件(可以在网上下载)CentOS6.9镜像文件( ...
 - 向 wmware workstation pro 的 MS-DOS 操作系统中导入文件(masm debug edit)(详细图解)
		
一般MS-DOS中不包含masm.debug和edit这三个程序. 我们想要把这几个文件导入到wmware workstation pro中的DOS虚拟机中怎么做呢? [尝试] 1.我试过用共享文件夹 ...
 - WMware Workstation——时间和时区问题
		
对于学习Linux的人来说,最常见的做法就是在WMware Workstation下安装Linux系统.在WMware Workstation可能会有几处导致时间.时区问题. UTC时间导致时间不一致 ...
 - 【VMware Workstation】虚拟机静态IP NAT连接外部网络(局域网以及广域网)
		
使用虚拟机时,为了减少后期的网络维护工作,配置网络IP时使用了NAT连接.静态IP的方式.这里把我的配置步骤顺序罗列出来. 一.配置虚拟网络编辑器 1.在VMware 的编辑菜单选择虚拟网络编辑器 2 ...
 
随机推荐
- iOS-UIView的layoutSubviews和drawRect方法何时调用(转)
			
转自:http://jianyu996.blog.163.com/blog/static/112114555201305113018814/ 首先两个方法都是异步执行.layoutSubviews方便 ...
 - Spark学习笔记0——简单了解和技术架构
			
目录 Spark学习笔记0--简单了解和技术架构 什么是Spark 技术架构和软件栈 Spark Core Spark SQL Spark Streaming MLlib GraphX 集群管理器 受 ...
 - wxPython之BoxSizer
			
1 函数原型 sizer = wx.BoxSizer( integer orient ) 其中的方向(orient)可以是 wx.VERTICAL(垂直) 或 wx.HORIZONTAL(水平). 将 ...
 - CTO(技术总监  张王岩  17805272076)之 SSH(安全外壳协议)
			
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH 是较可靠,专为远程登录会话和 ...
 - Servlet技术之——概述、实现、细节、获取资源、ServletConfig、ServletContext
			
Servlet概述.实现.细节.获取资源.ServletConfig.ServletContext (一) Setvlet基本概述 (1) 什么是Servlet ? Servlet(Server Ap ...
 - wireguard使用方法
			
1.翻墙访问网页:https://cryptostorm.is/wireguard.cgi 并下载客户端 2. 选者第二个并打开 3.复制publickey 4.黏贴在第二行并addkey: 5.将获 ...
 - python将url转变成二维码图片
			
将url数据转变成二维码数据,再将二维码图片转成base64格式返回 import qrcode import io def url_image(self,url): img = qrcode.mak ...
 - pandas之分组计算笔记
			
分组计算三部曲:拆分-->应用-->合并 分组:就是按照行或列把相同索引的部分分到一起 分组的关键词为groupby,分组后我们就可以对每组数据进行同一操作,返回的是每组数据分别计算后的结 ...
 - TZOJ1294吃糖果
			
#include<stdio.h> int main() { ],mi,i,max,s; scanf("%d",&t); while(t--) { scanf( ...
 - php 获取某个月的周一
			
今天有个朋友问了一个问题,最后解决了下,先整理记下来,后面用到了再说 function getMonday($month = ''){ if(empty($month)){ $month = date ...