图解vmware nat模式原理及其 VMnet8报文流探究 (虚机nat上网)

文章目录

    • 总体报文流
    • 虚机发起访问。
      • 虚机访问物理主机协议栈
      • 虚机访问外部物理网络
    • 物理主机进程 访问虚机
    • win10的nat网络模型
    • wsl的网络模型
    • vmware host-only 网络模型
    • 疑问解答
      • VMnet8虚拟网卡的作用?其是否关联nat功能?
      • host-only模型中,为何虚机无法访问主机?主机却可以访问虚机?
      • 是否可以禁用VMnet8?
      • nat存在的意义?
      • nat的作用
    • 参考

vmware的虚拟网络有三种模式:桥接模式、nat模式、host模式。本文探究 nat模式下,虚机相关的报文流。涉及vmware的两个服务:VMnet8接口 和 vmware nat service(服务进程)。

总体报文流

图解vmware nat模式原理及其 VMnet8报文流探究 (虚机nat上网)_第1张图片

虚机发起访问。

虚机访问物理主机协议栈

触发命令ping 192.168.1.3
该报文流 途径:

  1. vm1发出icmp request报文(假设已有arp记录),目的mac是gateway 192.168.86.2的mac地址。
  2. 报文经过交换转发到192.168.86.2接口,该接口被 vmware nat service服务进程 监听。
  3. vmware nat service服务进程 收到icmp报文,进行路由查找
  4. 路由结果命中本机,则直接 发给内核协议栈。

虚机访问外部物理网络

虚机访问公网ip(此处IP为物理主机所在网络的网关192.168.1.1),触发命令ping 192.168.1.1

  1. 同上1
  2. 同上2
  3. 同上3
  4. 路由结果为出接口为物理接口,此时将报文source ip SNAT为出接口的IP(192.168.1.3),然后由物理接口发出。
    回程报文流会额外 在nat service进程中 进行连接状态查找。

物理主机进程 访问虚机

物理主机的进程 访问虚机吗。触发命令ping 192.168.86.100,这里的进程是ping。

  1. 主机进程构造icmp报文,路由查找,出接口为VMnet8,直接以VMnet8的mac/ip(192.168.86.1)构造报文头。

win10的nat网络模型

win10 的nat配置 只跟子网相关,不与接口直接关联。因此一般是与 虚拟交换机的三层口 处于同一子网。执行win10 NAT创建命令New-NetNat时,你只要指定要nat的内网子网,此处不用指定nat后的ip,snat 后的ip由 路由的出接口IP决定,类似linux中的masquerade。类比linux协议栈的话,snat都是在route后的postroute链nat表中 进行的。

# win10 nat 创建流程
# 创建虚拟交换机
New-VMSwitch -SwitchName "NAT" -SwitchType Internal
# 获取虚拟交换机的ifindex,并赋值到变量中
$ifindex = Get-NetAdapter -Name "vEthernet (NAT)" | Select-Object -ExpandProperty 'ifIndex'
# 在虚拟交换机上设置固定IP,用于网关IP
New-NetIPAddress -IPAddress 192.168.56.254 -PrefixLength 24 -InterfaceIndex $ifindex
# 创建nat网络。nat网络只跟子网关联,不与具体接口直接关联
New-NetNat -Name NAT -InternalIPInterfaceAddressPrefix 192.168.56.0/24

图解vmware nat模式原理及其 VMnet8报文流探究 (虚机nat上网)_第2张图片

参考
win setup nat net
在win10 hype-v创建nat虚拟交换机,管理nat网络,管理nat虚拟交换机

wsl的网络模型

wsl的网络是一个nat网络。wsl中的网络访问其他网络接口时,src ip 都会nat成 出接口ip。
图解vmware nat模式原理及其 VMnet8报文流探究 (虚机nat上网)_第3张图片

vmware host-only 网络模型

在此网络模型下,主机可以ping通虚机,但是虚机无法ping通主机。虚机vm1从vmnet1发起的连接 会被win内核协议栈block(但没找到显式的block规则)。

疑问解答

VMnet8虚拟网卡的作用?其是否关联nat功能?

vmware nat service 的nat服务是单向发起连接的,只能虚机访问主机,没有实现主机访问虚机。 VMnet8 为 主机访问虚机 提供出接口及其路由规则,没有关联nat功能。

host-only模型中,为何虚机无法访问主机?主机却可以访问虚机?

从host-only概念分析,该网络仅提供 虚机间互相访问的网络功能,因此 虚机无法访问主机 是符合概念模型的。
从实现上分析,VMnet1提供了 主机访问虚机的路径,host-only没有nat模式的nat-service来提供虚机访问主机的功能。而且 VMnet1中 虚机访问主机的报文 会被block。

是否可以禁用VMnet8?

可以的。这种情况下,虚机 依旧可访问 主机及其外网。但是主机无法虚机,因这依赖VMnet8。

nat存在的意义?

nat的作用

snat确保数据包转发到外网,并能够从外网返回。

  • 避免主机内部tcp/udp端口冲突。避免 主机内部虚拟网络 影响本机协议栈。比如二者共用ip的情况下,二者端口可能冲突,使用nat可以规避冲突。*
  • 避免物理局域网ip冲突。如果 不共享本机物理IP,而直接暴露 内部虚拟网络的私网IP,可能会与 物理局域网的其他暴露私网IP 冲突。

参考

  • Wireshark分析完整的Web请求过程(虚拟机NAT上网)
  • VMware虚拟机网络配置-NAT篇

你可能感兴趣的:(虚拟网络,网络,服务器,linux)