VMware虚拟机共享主机VPN连接方法原理

VMware虚拟机共享主机VPN连接方法原理

很久之前就想了解一下,正好有位师傅提起过了这个事,顺势摸索一下吧,文章部分图片取于网络, 与文章主题相关的内容主要摘取于kevinkangkang的知乎笔记

image-20230220204725177

NAT(Network Address Translation)网络地址转换,允许一个整体机构以一个公用IP地址出现在Internet上,即把内部私有网络地址翻译成合法网络IP地址的技术。家用路由器一般都是NAT模式。

让虚拟系统借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网,实现在虚拟系统里访问互联网。如果想利用VMWare安装一个新的虚拟系统,在虚拟系统中不用进行任何手工配置就能直接访问互联网,建议采用NAT模式。

image-20230220205507461

桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接的作用下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干扰。在桥接模式下,虚拟机ip地址需要与主机在同一个网段,如果需要联网,则网关与DNS需要与主机网卡一致。这样,我们可以手工配置它的TCP/IP信息,以实现通过局域网的网关或路由器访问互联网。桥接更加适合于虚拟机对外提供服务,因为它是可以被外部访问到的,和一个正常的局域网用户没有什么区别。

image-20230220205917117

某些特殊的网络调试环境中,要求将真实环境和虚拟环境隔离开,这时可以采用主机模式,所有的虚拟系统可以相互通信,但虚拟系统和真实网络是隔离开的;虚拟系统的TCP/IP配置信息都是由虚拟网络中的DHCP服务器动态分配;虚拟系统和真实网络可以相互通信,相当于两台机器通过双绞线互连;虚拟网络是一个全封闭的网络,唯一能够访问的就是主机,不同于NAT的地方就是主机模式没有NAT服务,故虚拟网络不能连接到Internet。

由于桥接模式与NAT模式类似,只不过桥接模式是与主机共享一个网段,NAT则是有个虚拟子网。因此以下直接通过NAT模式介绍原理。NAT模式是通过VMnet8直接与主机网卡相连,虚拟机通过VMnet8连接主机网卡后进行上网,而主机和虚拟机的通信则是通过VMnet8完成。其网络结构如下图所示。(实际原理更复杂,VMnet8还可看作一个虚拟NAT设备和虚拟DHCP服务器,这里直接简化为VMnet8在起作用。)

image-20230220210619082

当登录VPN时,则主机的部分(也可能是所有)数据会先走VPN再出主机网卡。其网络结构如下图所示。可知,虚拟机的数据始终不会通过VPN。

image-20230220210736911

通过共享VPN虚拟网卡给VMnet8,则虚拟机便可使用VPN与目的网络进行通信。其网络结果如下图所示。

image-20230220210805368

不止是VMnet8,采用“仅主机模式”,原理也同样适用。

配置VMnet1虚拟网卡勾选“将主机虚拟适配器连接到此网络”,DHCP可勾选也可不勾选,子网IP则随机配一个即可(要注意的是不要配置192.168.137.0)

image-20230220211322334

设置虚拟机的网卡为”VMnet1“,如下图所示。

image-20230220211525225

打开网络连接,选择需要共享的VPN网卡共享给VMnet1,如下图所示。

image-20230220212114339

前面说到不能配置192.168.137.1的原因是因为windows共享网卡会默认自动将获取共享的网卡的IP配置为192.168.137.1,如果需要更改IP则需要在共享之后重新配置该网卡的IP,这里直接采用默认的网卡IP为192.168.137.1。

配置Linux的IP为静态IP,如下图所示。

img

配置完后重启网络服务,即可ping通目的网络。

P.S. 倘若不行,可尝试重启VMnet1、以及VPN网卡,并重新共享VPN网卡给VMnet1。

之前一直都是用法一为虚拟机共享VPN网卡使用VPN的,但是有次在工作中遇到了Cisco 的VPN,使用的是Cisco AnyConnect客户端,就无法共享VPN。

Cisco的VPN比较特殊,当开启了Cisco VPN时,所有虚拟网卡都会失灵,似乎会限制所有流量必须经过VPN才能出去。当主机访问虚拟机时,先经过VPN,则会导致路由出错,导致无法访问虚拟机。

在网上研究了一番,发现它不支持网卡共享,在安装Cisco AnyConnect的时候还需要关闭网卡共享才可以安装成功,而且网上有些人说如果想顺利使用Cisco VPN到达目的网络,还需要禁用ICS。

img

偶然发现了一个大佬的神奇方法,可以使得虚拟机使用Cisco VPN。

来源:https://qastack.cn/superuser/842489/vm-share-hosts-vpn-connection

img

大致原理就是将VPN当作网关,供虚拟机使用。其网络结构如下图所示。

img

配置方法介绍环境: 虚拟机OS:Linux 主机OS:Windows VMware网络模式:NAT

连接VPN,查看VPN的IP地址。假设IP为172.40.140.10,子网掩码为255.255.255.0

img

将VMnet8的子网IP设置为VPN的子网IP。即子网IP为172.40.140.0,子网掩码为255.255.255.0

需要注意的是子网IP需要进行计算得到。根据连接VPN分配的IP以及子网掩码可计算得到。具体方法可参考https://blog.csdn.net/qq_43576028/article/details/103783435

img

将VMnet8的网关IP设置为主机VPN的IP。即为172.40.140.10

img

将虚拟机网络模式设置为VMnet8。

img

由于虚拟机需要配置VPN IP为网关IP,会自动寻找VPN,因此主机Windows不需要像共享VPN网卡那样配置。配置VMnet8的IP如下即可。即IP为172.40.140.1,子网掩码为255.255.255.0。

网关IP可配可不可配(VMware中已经配置了,无需再配置)

img

配置虚拟机IP为172.40.140.20(可设置个空闲的IP),子网掩码为255.255.255.0,即与VPN在同一网段。

重启network服务,便可ping通目的网络。

P.S. 要注意主机是仍然无法和虚拟机通信的,如果需要通信则必须关闭VPN。即主机与虚拟机通信和虚拟机使用VPN是不能同时进行的。

给出的这两种方法还是比较麻烦的,文章进行到一半的时候,charmersix师傅便提供了另一种更为简便的方法,所以本文的第二种方法是直接拉取了知乎上kevinkangkang师傅的原文。具体charmersix给出的方法在VMware虚拟机中的Kali Linux通过物理机代理实现科学上网这篇文章