前言
虚拟机使用了一些日子,但是有时候有些坑问题,分享出来希望有用
关于虚拟机网络
虚拟机联网的话网上教程还是比较丰富的,图文并茂,我搜索到两篇
vmware虚拟机三种网络模式详解
VMWare虚拟机网络连接设置
我自己也是不断去尝试,然而发现即使我的网络设置的一模一样,还是宿主机连不上虚拟机,而且情况是配置的时候是可以,但是以后重启过机器的时候不行。
我后面发现是windows重启之后不会生效,需要重启网卡,在网络和共享中心中找到连接虚拟机使用的网卡,右键 禁用,再启用,两张网卡都试试。然后发现NAT的配置有用了,Host-Only模式下面也有用了
这个事情我郁闷了很多年
虚拟机网络的本质探索
NAT和Host有啥不一样,这个我分享一个技巧,我们可以用一个Wireshark的工具进行抓包,然后观察我们网卡的请求
我们要明白,不管我们的虚拟机怎么变,最终都是要通过我们的物理网卡,走我们的网线把信号发出去。
为了探索这里面的奥秘,我在虚拟机里面做了一个下着比较大的文件的操作,就是下载ubuntu镜像
wget https://mirrors.zju.edu.cn/ubuntu-releases/20.04.1/ubuntu-20.04.1-desktop-amd64.iso
我对host-only的方式进行请求捕获,我发现发出去的请求是我主机本身的地址 192.168.1.7
而且可以看到,这个请求是vmnat.exe这个程序发出去的
我们可以判断,我们在虚拟机里面使用host-only的方式请求是vmnat.exe 进程
我们换成NAT,NAT的方式其实就是IP地址可以和外面机器不一样,我们在linux中和windows中分别进行抓包:
tcpdump -i ens33 -v -e host 210.32.158.231
localhost.localdomain.41818 > 210.32.158.231.https: Flags [R], cksum 0xce98 (correct), seq 3255327477, win 0, length 0
23:00:50.563995 00:50:56:e4:df:37 (oui Unknown) > 00:0c:29:79:88:04 (oui Unknown), ethertype IPv4 (0x0800), length 1514: (tos 0x0, ttl 128, id 44647, offset 0, flags [none], proto TCP (6), length 1500)
210.32.158.231.https > localhost.localdomain.41818: Flags [.], cksum 0x8d05 (correct), seq 41913622:41915082, ack 645, win 64239, length 1460
23:00:50.564000 00:0c:29:79:88:04 (oui Unknown) > 00:50:56:e4:df:37 (oui Unknown), ethertype IPv4 (0x0800), length 54: (tos 0x0, ttl 64, id 45307, offset 0, flags [DF], proto TCP (6), length 40)
localhost.localdomain.41818 > 210.32.158.231.https: Flags [R], cksum 0xce98 (correct), seq 3255327477, win 0, length
我们其实可以看到,在包头的部分,我们的MAC地址修改了,其实我有理由相信,虚拟机的包在进出的时候会被我们的虚拟机软件直接修改包头的方式进行转换,最后从物理网卡转发出去,所以不管怎样设置我们其实只要保证转换是正确的。
镜像的制作
有个好点的方法是直接把已经安装好的虚拟机进行克隆,那样子我们不需要重头安装一遍了,但是我们需要把镜像转移的时候呢,有个导出的操作
导出的时候可以选择OVF或者ova都行,这个包可以任意转移,使用的时候直接双击就可以建立一个新的虚拟机了