Windows宿主机 与 VMWare centos虚拟机 之间的通信访问
kvm 虚拟机并配置静态ip 虚拟机怎么配置静态ip :
kvm 虚拟机并配置静态ip 虚拟机怎么配置静态ip_mob64ca14106f2f的技术博客_51CTO博客
当VMware 安装时,就会 默认生成了 VMnet1 和 VMnet8 两个虚拟网卡,通过 ipconfig 可以看到:
C:\Windows\system32>ipconfigWindows IP ConfigurationEthernet adapter 以太网:Media State . . . . . . . . . . . : Media disconnectedConnection-specific DNS Suffix . :Wireless LAN adapter 本地连接* 1:Media State . . . . . . . . . . . : Media disconnectedConnection-specific DNS Suffix . :Wireless LAN adapter 本地连接* 10:Media State . . . . . . . . . . . : Media disconnectedConnection-specific DNS Suffix . :Ethernet adapter VMware Network Adapter VMnet1:Connection-specific DNS Suffix . :Link-local IPv6 Address . . . . . : fe80::5512:8645:8e0:4d0%11IPv4 Address. . . . . . . . . . . : 192.168.42.1Subnet Mask . . . . . . . . . . . : 255.255.255.0Default Gateway . . . . . . . . . :Ethernet adapter VMware Network Adapter VMnet8:Connection-specific DNS Suffix . :Link-local IPv6 Address . . . . . : fe80::b5c7:ae5:6759:c4b1%16IPv4 Address. . . . . . . . . . . : 192.168.159.1Subnet Mask . . . . . . . . . . . : 255.255.255.0Default Gateway . . . . . . . . . :Wireless LAN adapter WLAN:Connection-specific DNS Suffix . :IPv6 Address. . . . . . . . . . . : 2409:893d:510e:8776:a963:8e7c:c6f9:1e4cTemporary IPv6 Address. . . . . . : 2409:893d:510e:8776:e5db:ce4a:10c:2dc2Link-local IPv6 Address . . . . . : fe80::a963:8e7c:c6f9:1e4c%15IPv4 Address. . . . . . . . . . . : 192.168.43.241Subnet Mask . . . . . . . . . . . : 255.255.255.0Default Gateway . . . . . . . . . : fe80::9828:10ff:fea4:45cc%15192.168.43.1Ethernet adapter 蓝牙网络连接:Media State . . . . . . . . . . . : Media disconnectedConnection-specific DNS Suffix . :
其中,这两个网卡对应两种网络连接模式,Host only 和 NAT:
虚拟网卡名称 | 默认模式 | 子网 | 用途 |
---|---|---|---|
VMnet1 | Host-only | 比如 192.168.198.0/24 | 仅虚拟机与宿主机通信,不可上网 |
VMnet8 | NAT | 比如 192.168.159.0/24 | 虚拟机可以访问外网,通过 NAT 转发 |
但这还不够,需要非常注意一件事:NAT不只存在于宿主机,虚拟机上也运行这一个NAT:
即, VMware 的 NAT 转发器(vmnat.exe 管理),同样作为一个网关进行 转发!而这个网关与宿主机的网关 对于 虚拟机的请求 有着 不一样的 处理方式!
在配置虚拟机静态IP的时候,请一定注意,GATWAY=虚拟机的NAT网关!接下来会说为什么
一般都会选择 NAT,重点说一下这个模式吧:
VMWare安装好后,宿主机会 跑一个 NAT 转发器,让 选择了NAT模式 的 虚拟机 能访问外网。
总结一下,宿主机访问虚拟机,虚拟机访问宿主机,虚拟机访问宿主机vmnet8网关 ,虚拟机访问外网,都是什么流程:
为了方便,举例说明:
IP | 所在设备 | 用途 |
---|---|---|
192.168.43.241 | 宿主机真实无线网卡 | 宿主机访问外网 |
192.168.159.1 | 宿主机上的 VMnet8 虚拟网卡 | 宿主机和虚拟机之间同子网通信 |
192.168.159.2 | VMware NAT 网关(软件实现) | 虚拟机访问外网时的默认网关 |
192.168.159.128 | 虚拟机 IP |
1. 宿主机访问虚拟机:
总结的说,在 NAT 模式 下:
-
宿主机和虚拟机处在同一子网内(通常是
192.168.159.0/24
),但是虚拟机通过宿主机的 NAT 网关(192.168.159.2) 访问外网。 -
宿主机访问虚拟机 时,虚拟机和宿主机通过 宿主机的 VMnet8 网卡(192.168.159.1) 进行通信。
具体流程:
-
宿主机发起请求:
-
宿主机发起请求(比如 ping 或 SSH),目标是虚拟机的 IP(如
192.168.159.128
)。 -
虚拟机的 IP 属于 NAT 网络 内,因此宿主机能直接通过该 IP 访问虚拟机。
-
-
虚拟机接收请求:
-
虚拟机的网络接口(例如
ens33
)接收到宿主机的请求。 -
如果虚拟机防火墙没有阻止这种请求,虚拟机会正常响应宿主机。
-
-
网络路由(通过 VMnet8 网卡):
-
由于虚拟机和宿主机在同一子网内,不需要经过默认网关。宿主机直接通过 192.168.159.1(VMnet8 网卡)与虚拟机通信。
-
在宿主机和虚拟机之间,流量是直接通过虚拟网卡(192.168.159.1)转发,不经过 NAT 转发器。
-
2. 虚拟机访问宿主机 ping 192.168.43.241 时:
-
虚拟机要 ping 一个**不在同子网(192.168.159.0/24)**的 IP
-
根据路由表:目标不在本地子网 → 把包交给默认网关(192.168.159.2)
-
NAT 转发器(192.168.159.2)接到包后,看目标是 192.168.43.241(宿主机真实网卡 IP)
-
NAT 转发器就把包发到宿主机外网接口(192.168.43.241),宿主机收到 ping 包
-
宿主机再决定要不要回包 → 一般能回包,因为是本机接收到
所以这个 ping 最终能通,是通过 NAT 转发实现的,包经过 192.168.159.2,然后到宿主机的真实网卡(192.168.43.241)。
总结:
在 NAT 模式 下,宿主机 和 虚拟机 之间的通信 不需要走 NAT 网关(
192.168.159.2
)。只要宿主机和虚拟机在同一个子网,通信就是直通的,通过 宿主机的 VMnet8 网卡(
192.168.159.1
)。
3. 虚拟机访问宿主机vmnet8网关 ping 192.168.159.1 时:
-
192.168.159.1 与虚拟机 在同一个子网(192.168.159.0/24)
-
根据路由表:目标在本地子网 → 直接二层发 ARP 找到宿主机的 VMnet8 网卡
-
不经过虚拟机VMWare的 NAT网关(192.168.159.2)
-
流量直接发到宿主机的 VMnet8 接口,看宿主机的防火墙是否允许 ICMP Echo Reply
如果宿主机防火墙禁掉了 VMnet8 接口的 ping 回复,就 ping 不通。(我就是这个情况,但是没继续尝试 关防火墙,毕竟是宿主机,不太方便关防火墙,,)
4. 虚拟机访问外网 ping www.baidu.com
-
ping 命令需要先解析域名:ping www.baidu.com → 得到 IP,比如 180.101.49.11
(这个要用 DNS,DNS 请求也是 UDP 包,也要走 NAT,后面我说)
最终目标是外网 IP:180.101.49.11 -
虚拟机判断:目标 IP(180.101.49.11)不在本地子网(192.168.159.0/24)
-
根据路由表:需要把包发给默认网关 → 192.168.159.2
-
虚拟机判断:目标 IP(180.101.49.11)不在本地子网(192.168.159.0/24)
-
根据路由表:需要把包发给默认网关 → 192.168.159.2
-
虚拟机构造一个 ICMP Echo Request(ping 包)
-
二层包:目标 MAC 是网关 192.168.159.2 的 MAC
-
最终:包从虚拟机的虚拟网卡,送给了 192.168.159.2(VMware NAT 网关)
NAT 转发器接收并转发:
-
VMware 的 NAT 转发器(vmnat.exe)收到包
-
它干两件事:
① 替换包的源地址:原本是 192.168.159.128 → 改成宿主机外网 IP(192.168.43.241)
② 把包发到宿主机的真实网卡(WLAN,即 192.168.43.241),发往互联网
-
互联网(运营商路由器)看到包的源 IP 是 192.168.43.241(宿主机真实 IP)
-
回复一个 ICMP Echo Reply(回包)给 192.168.43.241
宿主机收到回包:
-
宿主机收到 ping 回包(目标 IP 是 192.168.43.241)
-
vmnat.exe(NAT 转发器)识别到:
-
这个回包是之前替虚拟机发出的请求的回包
-
-
NAT 转发器根据内部的 NAT 表,把目标 IP 改回:
-
把包重新转发给虚拟机(目标 IP 改回 192.168.159.128)
-
终于,虚拟机收到回包 :
虚拟机收到 ping 回包,显示:
Reply from 180.101.49.11: bytes=32 time=xxms TTL=...
总结一下就是:
虚拟机 ping 外网:
-
目标不在本地子网 → 包发给默认网关(192.168.159.2)
-
NAT 转发器替换源地址 → 宿主机外网 IP
-
回包回来 → NAT 转发器替换回虚拟机 IP