前言

今天搞实验把工作环境搬来搬去的过程中,把带着VM环境的移动硬盘弄掉了好几次,VMWare里面的虚拟机终于不堪折磨宕机掉了,磁盘文件损坏。还好之前留了快照可以恢复(所以定期备份快照很重要,特别是重要,配置了很多东西的虚拟机,不是说重装就重装的)。

然后切换工作环境,网络环境变更啥的,搞得脑子晕了,一时上不了网就直接把虚拟机网络编辑里面的东西全重置了。重置就重置吧,重新配置呗。问题就是以前配过的东西全忘光了。果然工作不总结的话就会出现重复工作,一个问题没记住解决方案就会导致一直是问题。。

借此机会把虚拟机的网络配置这块好好总结一下。结合看的多篇写得较好的中文博客,把网络配置问题形成自己的理解。

VMWare网络配置

VMware网络配置就是设置虚拟机网络虚拟化的方式,目的是将虚拟机连接到网络上,实现虚拟机的联网或者主机与虚拟机的连接或者虚拟机局域网之间的互联。

在VMWare中有三种模式,分别是桥接模式、NAT模式和主机模式。

物理机网络IP示例:

无线局域网适配器 WLAN:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::61d3:e211:e09:c336%15
   IPv4 地址 . . . . . . . . . . . . : 10.44.11.54
   子网掩码  . . . . . . . . . . . . : 255.255.0.0
   默认网关. . . . . . . . . . . . . : 10.44.255.254
   
以太网适配器 VMware Network Adapter VMnet1:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::852:80cf:9d6b:f9dc%6
   自动配置 IPv4 地址  . . . . . . . : 169.254.249.220
   子网掩码  . . . . . . . . . . . . : 255.255.0.0
   默认网关. . . . . . . . . . . . . :

以太网适配器 VMware Network Adapter VMnet8:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::1c9b:6567:f003:9d42%4
   IPv4 地址 . . . . . . . . . . . . : 192.168.1.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . :

桥接模式

桥接模式解释

桥接模式的理解:

桥接模式就是将主机网卡与虚拟的网卡利用虚拟网桥进行通信。类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干扰。在桥接模式下,虚拟机IP地址需要与主机在同一网段,如果需要联网,则网关与DNS需要与主机网卡一致。

img

这里的虚拟机和物理主机就是平等的地位,相当于网络中间的一台新主机(通过物理主机这个交换机接入网络)。所以虚拟机中上网的方式与物理主机相同。物理主机怎么上网,虚拟机就怎么上网。比如物理主机使用WIFI无线连接,DHCP自动分配IP。那虚拟机联网也一样,向WIFI的路由器请求DHCP分配IP和DNS,完成后即可上网。如果物理主机使用有线网连接,那虚拟机内也要配置相应的IP地址(这个IP一般就是组织内分配的静态IP)。

这里的核心问题就是,虚拟机能否像物理机一样请求到同样的资源。比如DHCP分配的IP可能有限,有线网的静态IP可能对于个人也是唯一的。比如个人在校园网内使用,无线网可能可以多终端登录,有线网则必然不行。于是这就是桥接模式的特点:

  • 可以将虚拟机看做一台新电脑,接入了宿主机所在的网络
  • 虚拟机允许访问宿主机所在网络的其他电脑
  • 虚拟机允许访问Internet互联网(当然宿主机必须可以访问互联网才行)。
  • 主机和虚拟机通过单位局域网,互联互通。

第二第四点特点决定了,当我们想将多台虚拟机(部署在一台或多台电脑上)连成一个局域网时,桥接模式就是首选。这种方法配置起来和使用起来也是较为方便,是VMware的默认配置。

结合一个具体例子:比如物理主机(宿主机)的IP地址为10.44.11.54,那虚拟机连接后自动分配的IP可能为:10.44.11.128。因为获取方式与物理主机相同,所以网段也一致。

桥接模式下的所有虚拟机都是和主机是在同一网段的,可以把它们看成是"平等"的关系,这就会带来一些麻烦,比如192.168.1段下只有254个主机地址,所以桥接模式下虚拟机和物理的总数不能超过这个数字!

桥接模式配置

  • 进入VMware->Workstation->编辑->虚拟网络编辑器。
    在这里插入图片描述

  • 需要管理员权限或者点击右下角更改设置。

    image-20220409213016621

  • 在网络列表中选择“VMnet0”,如果没有,可以点击“添加网络”按钮增加,VMnet0是VMWare默认设置,当然是用其他网卡也是可以的。

    image-20220409213045451

  • 选择宿主机访问外部网络的物理网卡。连有线网时就选择有线网,连无线网时选择有线网。网卡名称可在右下角右键网络状态显示图。

    image-20220409213110034

    image-20220409213121362

  • 然后修改虚拟机网络适配器为桥接模式。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZsqJZKXv-1649516637812)(https://raw.githubusercontent.com/Olimiya/PicBed/main/image-20220409220612184.png)]

    关于这里复制物理网络连接状态的选项:

    如果在笔记本电脑或其他移动设备上使用虚拟机,请选择复制物理网络连接状态

    当您在有线或无线网络之间进行移动时,该设置会导致 IP 地址续订。

    续订IP是指网卡从路由器的DHCP服务器获得IP地址的过程。
    网卡通过DHCP对IP都有租定时间,等到了一定的时间,你的电脑会自动续订IP,以方便继续使用。
    不选择复制物理网络连接状态选项:

    如果采用DHCP的方式来分配IP地址,当电脑网络从有线或无线网络之间进行移动时,DHCP会重新分配ip地址,即虚拟机IP地址会发生变化。
    选择复制物理网络连接状态选项:

    复制网络连接状态仅用于笔记本电脑在有线网络与无线网络之间切换时进行IP地址续订,虚拟机IP地址不变

​ 一般就不用勾了。

  • 确定保存之后,重启(开启)虚拟机即可使用桥接模式。
  • 虚拟机内部。如果是使用无线联网,那一般系统会默认选择DHCP自动分配IP,无需自行配置。若是有线联网,则需自行配置IP和DNS等。配置方式根据自己虚拟机系统和版本,以及连接方式,自行搜索即可。如:ubuntu18.04:https://blog.csdn.net/u014454538/article/details/88646689

桥接模式的选择

  • 默认选择,配置较少,如果处于网络信任度较高、网络较自由(自己家),不用考虑如何登录上网这些问题时,可首选使用。
  • 如果有登录问题,就不要用了。信任度不高的也是,外部网络可以直接访问该虚拟机。
  • 第二点也意味着,如果想把虚拟机暴露给外界。比如远程登录虚拟机,就需要使用桥接模式(或者NAT+内网穿透)。再比如暴露虚拟机中的web服务等。

NAT模式

NAT模式解释

NAT(网络地址转换),是一种在IP数据包通过路由器防火墙时重写来源IP地址或目的IP地址的技术(wiki)。

比如192.168.0.123这个地址要访问internet,它的数据包就要通过一个网关或者路由器,而网关或者路由器拥有一个能访问internet的ip地址,这样的网关和路由器就要在收发数据包时,对数据包的IP协议层数据进行更改(即 NAT),以使私有网段的主机能够顺利访问internet。

也是网络管理中常用的方式了。优点在于NAT内部局域网与外界隔离,较为安全。内部地址空间也是独立进行维护,与公网IP分离,有效降低IP地址空间不足的问题。缺点是数据包都要经过NAT设备(路由器或网关)更改源和目的IP,重新查询NAT地址转换表,降低了通信效率。

在VMWare中也一样。

img

在NAT模式中,主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,这样就实现了虚拟机联网。VMware Network Adapter VMnet8网卡是为了实现主机与虚拟机之间的通信。

可见NAT模式下主机更像是虚拟机们的"路由器"。所以虚拟机和主机不再同一网段下,可以理解为主机是虚拟机的"上级"。

同样举个例子,比如物理主机的IP是10.44.11.54,虚拟机分配到的IP可能是192.168.1.128(具体网段是什么是自己设置的),但可以看到网段是不一致的。

关于NAT模式,可以看到主机内有一个Adapter VMnet8网卡,这个网卡是为了实现主机和虚拟机之间的通信。有了这个网卡,主机和虚拟机之间就可以通信。主机可以ping通虚拟机的IP,虚拟机可以ping通主机的IP。比如上面的例子,主机可以ping通192.168.1.128,虚拟机可以ping通10.44.11.54,也可以ping通192.168.1.1(虚拟网卡VMnet8的IP)。如果禁掉这个网卡。则192.168.1.1和192.168.1.128之间无法通信。但虚拟机仍可连接外网,同时也能ping通10.44.11.54,原因是虚拟机是通过Vmnet8交换机与主机网卡(10.44.11.54)连接,只要主机可以联网(10.44.11.54能用),虚拟机自然也可以使用。

(这里有个比较疑惑的地方:按道理禁掉Vmnet8,主机应该是无法访问虚拟机的,但个人测试的情况是主机能够ping通192.168.1.128,参考下面的测试结果)

这里要区分,虚拟网卡的概念,虚拟网卡是一个系统内部的设备,即使它不是物理上存在的,只是逻辑上的资源。看上图的含义就是,Adapter VMnet8和VMnet8交换机,是分别处于两个框内,属于不同系统的资源。前者属于Windows,后者属于VMWare的HyperVisor。这也是使用桥接模式时,主机内看不到VMnet0的原因。因为主机和虚拟机在网络上就是平等的地位,无需在主机内部构建一个虚拟网卡资源来进行通信。

另外,NAT内部网络之间都属于同一个网段,也是可以相互访问和通信的。

测试样例:

主机:
以太网适配器 VMware Network Adapter VMnet1:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::852:80cf:9d6b:f9dc%6
   自动配置 IPv4 地址  . . . . . . . : 169.254.249.220
   子网掩码  . . . . . . . . . . . . : 255.255.0.0
   默认网关. . . . . . . . . . . . . :

以太网适配器 VMware Network Adapter VMnet8:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::1c9b:6567:f003:9d42%4
   IPv4 地址 . . . . . . . . . . . . : 192.168.1.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . :

以太网适配器 以太网 3:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

无线局域网适配器 WLAN:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::61d3:e211:e09:c336%15
   IPv4 地址 . . . . . . . . . . . . : 10.44.11.54
   子网掩码  . . . . . . . . . . . . : 255.255.0.0
   默认网关. . . . . . . . . . . . . : 10.44.255.254

$ ping 192.168.1.128

正在 Ping 192.168.1.128 具有 32 字节的数据:
来自 192.168.1.128 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.128 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.128 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.128 的回复: 字节=32 时间<1ms TTL=64

虚拟机:
$ ip addr         
...
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:e3:1c:15 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.128/24 brd 192.168.1.255 scope global dynamic noprefixroute ens33
..
~ ⌚ 22:46:44
$ ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=128 time=0.256 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=128 time=0.330 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=128 time=0.416 ms
^C



主机:VMnet8关闭
以太网适配器 VMware Network Adapter VMnet1:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::852:80cf:9d6b:f9dc%6
   自动配置 IPv4 地址  . . . . . . . : 169.254.249.220
   子网掩码  . . . . . . . . . . . . : 255.255.0.0
   默认网关. . . . . . . . . . . . . :

无线局域网适配器 WLAN:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::61d3:e211:e09:c336%15
   IPv4 地址 . . . . . . . . . . . . : 10.44.11.54
   子网掩码  . . . . . . . . . . . . : 255.255.0.0
   默认网关. . . . . . . . . . . . . : 10.44.255.254
   
$ ping 192.168.1.128

正在 Ping 192.168.1.128 具有 32 字节的数据:
来自 192.168.1.128 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.128 的回复: 字节=32 时间<1ms TTL=64
   
虚拟机:
$ ip addr         
...
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:e3:1c:15 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.128/24 brd 192.168.1.255 scope global dynamic noprefixroute ens33
..

~ ⌚ 21:59:22
$ ping 10.44.11.54
PING 10.44.11.54 (10.44.11.54) 56(84) bytes of data.
64 bytes from 10.44.11.54: icmp_seq=1 ttl=128 time=0.684 ms
64 bytes from 10.44.11.54: icmp_seq=2 ttl=128 time=0.644 ms
64 bytes from 10.44.11.54: icmp_seq=3 ttl=128 time=0.589 ms
^C
--- 10.44.11.54 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2037ms
rtt min/avg/max/mdev = 0.589/0.639/0.684/0.038 ms

~ ⌚ 21:59:28
$ ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
^C
--- 192.168.1.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1010ms

NAT模式配置

  • 进入VMware->Workstation->编辑->虚拟网络编辑器。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-inIOAWU5-1649516637813)(https://raw.githubusercontent.com/Olimiya/PicBed/main/image-20220409213016621.png)]

  • 在网络列表中选择“VMnet8”,如果没有,可以点击“添加网络”按钮增加,为什么是VMnet8呢,这个应该是VMWare默认设置,当然是用其他网卡也是可以的。

  • 选择“NAT模式”,确定选中“将主机虚拟适配器连接到此网络”和“是用本地DHCP服务将IP地址分配给虚拟机”选项

    • 子网IP:192.168.1.0,子网掩码:255.255.255.0,为了与“仅主机模式”区分,我习惯将“NAT模式”的子网网段配置为“192.168.1.0”,这个可以根据自己的喜好来设置。(比如NAT设置20网段、仅主机设置30网段,根据自己网段习惯来即可)

    image-20220409220612184

  • 修改虚拟机设置,将网络适配器修改为“NAT模式”

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4itn9ldJ-1649516637816)(https://raw.githubusercontent.com/Olimiya/PicBed/main/image-20220409222825677.png)]

  • 看上图可以看到,NAT有一个虚拟的DHCP服务器。所以默认就是通过DHCP动态分配IP的,所以虚拟机内部一般无需配置。检查一下是否选择的是默认的DHCP分配即可。

NAT模式的选择

NAT模式的特点:

  • 虚拟机和宿主机组成小局域网,做到互联互通。
  • 虚拟机通过宿主机访问外部网络(此时宿主机起到路由器作用),但外部网络不能访问虚拟机
  • 虚拟机允许访问Internet互联网(当然宿主机必须可以访问互联网才行)

第一点的实现,对于虚拟机来说,都处于NAT内网,自然就是一个局域网内,然后宿主机是通过Adapter VMnet8加入到这个局域网中。

第二点外部网络不能访问,就是NAT的特性,既是优点也是缺点。需要解决这个缺点可以考虑使用内网穿透。
那什么时候选择NAT呢:

  • 不能选择桥接模式时。
  • 虚拟机内不能获取宿主机一样的上网条件。
  • IP地址紧张。
  • 选择自动分配IP,懒得为静态IP做配置。

NAT模式端口转发

当我们必须使用NAT模式,又需要暴露虚拟机内部的服务,又不想使用内网穿透时,可以考虑配置NAT端口转发。配置路径在:VMware->Workstation->编辑->虚拟网络编辑器,选择VMne8,NAT设置,端口转发添加规则。

image-20220409222825677

仅主机模式

主机模式用的较少。仅主机模式可有看成是NAT模式去除了虚拟NAT设备,然后使用VMware Network Adapter VMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机通信的,Host-Only模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯。

img

将上图与NAT模式的图对比,主要区别就在于去除了虚拟NAT设备,使用Vmnet1将主机网卡和虚拟机隔离开来。仅主机模式是指只有虚拟机和主机之间互相通信,但虚拟机也可以访问外界网络,只是不能收到外界网路的访问。所以该模式最大特点就是安全吧。

同样有DHCP服务器,所以虚拟机IP也是自动配置。

配置方式:

  • 进入VmWare->主菜单->虚拟网络编辑器

image

  • 在网络列表中选择“VMnet1”,如果没有,可以点击“添加网络”按钮增加,为什么是VMnet1呢,这个应该是VMWare默认设置,当然是用其他网卡也是可以的。
  • 选择“仅主机模式”
  • 并选择“将主机虚拟适配器连接到此网络”和“是用本地DHCP服务将IP地址分配给虚拟机”选项
  • 子网IP:10.10.10.0,子网掩码:255.255.255.0,我习惯将“仅主机模式”的子网网段配置为“10.10.10.0”,这个可以根据自己的喜好来设置。

image

  • 然后修改虚拟机设置,将网络适配器修改为“仅主机模式”

image

小结

一些错误的说法:

  • 桥接模式:如果物理网卡可以上网,那么桥接的软网卡也没有问题了,这就是桥接上网的原理了。 (物理网卡能上网不代表虚拟机也能用同样方式上网)
  • NAT模式:主机更像是虚拟机们的"路由器",通过VMnet8虚拟网卡为虚拟机分发地址。(虚拟机分发地址不是通过VMnet8,是虚拟DHCP服务器)
  • NAT模式:所以虚拟机能ping到主机的IP,但是主机ping不到虚拟机的IP。(虚拟机和主机可以相互ping)
  • 仅主机模式:提供的是主机和虚拟机之间的网络互访。只想让虚拟机和主机之间有数据交换,而不想让虚拟机访问Internet,就要采用这个设置了。(仅主机模式同样可以上网)

关于ping(即主机与虚拟机的连接情况):

  • 桥接模式下,主机与虚拟机随便ping,毕竟就是一个网络内不同主机。如果ping不通,就是被主机主动拦截了,检查防火墙的情况,选择关闭或设置允许进入的网段。
  • NAT模式下,主机和虚拟机也可以通过VMnet8互相ping通。

区别
1、这三种模式都可以访问外网,只是访问方式不同
2、这三种模式都可以自动获取ip,手动填写的ip需要注意,

桥接模式,虚拟机当成主机旁,同一网段下的主机配置即可。

NAT模式,配置的虚拟DHCP网段,ip、网关、DHCP网段在同一网段下。禁用VMnet8网卡后,可连外网、不可连主机。

仅主机模式,配置的虚拟DHCP网段,ip、网关、DHCP网段在同一网段下。禁用VMnet1网卡后什么都连不上了。

选哪个
1、最省事的,选桥接模式,直接选择就可以用
2、NAT模式自动获取IP也很方便,需要注意开启VMnet8网卡
3、仅主机模式一般很少用,但是它安全,需要注意开启VMnet1网卡

其他情况

如前言中提到,我是使用使用着重置了网络配置重新设置。并不是从零开始安装。因此碰到了更多一些情况。

  1. NAT模式无法使用。NAT根据上述配置完成后仍无法使用。WIN+R,services.msc,检查一下VM开头的服务,发现没有VMWare NAT Service服务(这个应该就是NAT模式中那个虚拟的NAT设备吧),类似地那个VMWare DHCP Service可能也是。搜索了一下。解决方案:**在虚拟网络编辑器中还原默认设置,然后重启电脑。**即可恢复。如果还不行,再来一遍。(个人在这里卡了很久,因为我一开始就是还原默认设置之后开始配置NAT的,结果就是没有NAT服务。不太相信,结果还是重启试试解决的)。

  2. 类似第一点,VM这几个服务似乎会常驻后台。在不需要的情况下可自行关闭。不建议设置为手动,手动开启。个人试了一段时间,每次开VMvare前都忘记开一次,太麻烦了。关闭的脚本:

    net stop VMAuthdService
    net stop VMnetDHCP
    net stop "VMware NAT Service"
    net stop VMUSBArbService
    echo VM所有服务已关闭
    

WSL的网络配置

WSL2默认使用的是NAT模式。因此也存在上述NAT模式的一些问题。使用、配置和解释,先挖个坑在这里。

总结

本文总结过程参考了多篇博客,有许多优秀的大佬总结得已经非常出色。重新写一遍主要是因为一个是形成自己的理解,另外是每篇博客都集中在某一个方面,个人在阅读、理解和测试之后汇总、总结了一遍。

在文章中引用了许多大佬的文章,大部分都标注了引用。如有侵权,请联系我删除。

完整的引用:

配置参考:https://segmentfault.com/a/1190000024580532

原理参考:

https://blog.csdn.net/qq_39192827/article/details/85872025

https://blog.csdn.net/zlfing/article/details/76943895

https://blog.csdn.net/a__int__/article/details/111208626

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐