浅谈多个虚拟机(WSL和VMWare)的网络配置

在开发很多项目的时候,经常遇到虚拟机无法访问电脑的实体接口的问题,WSL解决了一部分问题,但是对于物理接口的访问配置过程会很复杂。而VMWare则是提供了虚拟机管理软件,大大减少了配置难度。但是对于WSL和VMWare同时存在并且能够同时访问互联网和使用ssh与主机(PC电脑)进行通信,可能需要对网络连接进行布局。

(PS.笔者就是在学习ROS的时候接触到的WSL并且被荼毒一年之久,WSL在文件传输方面确实非常方便,但是因为没有虚拟机管理软件,导致WSL在进行网络或者其他配置的时候需要手动修改配置文件,这可能会带来很多其他的问题,因此建议新手不要入坑WSL,以及下载docker-desktop,真的非常坑,找不到问题出在哪里。并且由于WSL的磁盘难以管理,有的时候这两个软件会相互纠缠导致WSL无法打开,这个时候就需要重新下载磁盘驱动程序,可能会打乱电脑的配置,因此小白慎入,大佬随意。)

首先简单介绍一下几种网络设置:

1.NAT:创建一个私有网络,虚拟机位于该网络内部,而虚拟机通过主机作为网关访问外部网络,所以从外界看虚拟机看到的是主机IP而不是虚拟机自己有一个IP(这非常重要,涉及到SSH等网络协议连接的时候,要连接的是主机IP而不是虚拟机内部获得的IP,并且因为使用的是主机IP所以需要对虚拟机和PC电脑做一个端口映射,将虚拟机的22号端口映射到主机的某个端口作为外部访问内部网络的通道)

2.Bridged:虚拟机直接连接到外部网络,和主机获得同一网段下的独立的IP地址,在网络中是独立的设备,也就是从外界看有两个设备一个是主机一个是虚拟机。SSH等网络协议连接方便,直接用IP就行。

3.Host-only:创建一个隔离的网络,只有主机和虚拟机可以互相通信,但是虚拟机无法访问外部网络,好处是虚拟机绝对安全,并且二者的通信速度快。坏处是无法上网。

4.Internal Network:虚拟机的内部网络,主机无法访问,只有虚拟机之间可以通信,完全隔离网络环境,最高的安全等级。

WSL设置

其中需要知道的是WSL主要默认使用NAT作为网络并且自动配置端口转发,所以主机通过localhost访问WSL服务即可。如果想要配置桥接模式,就需要配置.wslconfig文件,这个文件通常位于主机(PC)的用户目录下(C:\Users\你的用户名\):

将这个文件配置为(没有这个文件手动添加就行,但是要确保文件名字为.wslconfig(注意前面的点):

bash 复制代码
[wsl2]
networkingMode=bridged
vmSwitch=WSL
ipv6=true

就可以让WSL获得独立的IP地址,外界可以直接访问,而不需要麻烦的端口映射。

接下来就是网络适配器的设置:

首先查看当前的网络适配器,在管理员模式下的powershell中运行:

bash 复制代码
Get-NetAdapter
  • 记下物理网络适配器的名称(例如"以太网"或"Wi-Fi")

接下来是创建外部虚拟交换机:

bash 复制代码
New-VMSwitch -Name "WSL" -AllowManagementOS $True -NetAdapterName "以太网"
  • 其中"以太网"替换为实际的网络适配器名称
  • "WSL"是为新建虚拟交换机指定的名称

配置好后重启:

bash 复制代码
wsl --shutdown

VMware 配置

这里需要配置为NAT模式,因为如果同时配置为桥接模型,会导致其中一方无法上网,原因可能是WSL的hyper-V在网络中会将物理网卡直接占有导致虚拟机无法上网。所以我们需要配置为NAT格式,然后做端口映射以让外网能够访问内部。

首先为虚拟机设置静态IP(这里设置的IP建议先开启NAT后用ifconfig查看一下DHCP服务自动分配的IP是多少,避免一些IP冲突):

bash 复制代码
# Ubuntu18以上
# 查看netplan配置文件
ls /etc/netplan/
# 编辑找到的配置文件(可能名为01-netcfg.yaml或50-cloud-init.yaml)
sudo nano /etc/netplan/01-netcfg.yaml

写入(IP自己定,最好按照DHCP自动分配的来,网关需要查一下VMWare的网络配置中的网关是多少):

bash 复制代码
network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
      dhcp4: no
      addresses: [希望固定的IP/24]
      gateway4: 网关(查询虚拟机软件的网络配置,文章后面有介绍)
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]

保存退出后运行:

bash 复制代码
sudo netplan apply

这样静态IP就设置好了,接下来就是对VMWare进行配置(在VMware主页中点击编辑->虚拟网络编辑器):

在里面选择一个网络使用NAT,然后进行NAT设置

添加映射:虚拟机IP填写虚拟机刚刚设置的固定IP加上":22"(映射到固定IP上的22号端口,这里的22号就是SSH默认的端口,当然可以去ssh文件中修改这个端口,都行)。主机端口挑一个用的少的比如12134,这样就将主机的12134端口映射到了虚拟机的22号端口上可以进行SSH通信了。

这样就能正常上网了,并且WSL和VMware同时能访问外部网络,并且都可以和主机进行SSH通信。

相关推荐
SKYDROID云卓小助手1 小时前
三轴云台之相机技术篇
运维·服务器·网络·数码相机·音视频
东方佑1 小时前
自动调整PPT文本框内容:防止溢出并智能截断文本
linux·运维·powerpoint
zhougl9962 小时前
html处理Base文件流
linux·前端·html
泥土编程3 小时前
kubekey -实现懒人一键部署K8S集群
linux·运维
yuzhangfeng3 小时前
【云计算物理网络】从传统网络到SDN:云计算的网络演进之路
网络·云计算
TDengine (老段)4 小时前
TDengine 中的关联查询
大数据·javascript·网络·物联网·时序数据库·tdengine·iotdb
zhu12893035564 小时前
网络安全的现状与防护措施
网络·安全·web安全
wirepuller_king6 小时前
创建Linux虚拟环境并远程连接,finalshell自定义壁纸
linux·运维·服务器
zhu12893035566 小时前
网络安全与防护策略
网络·安全·web安全
沫夕残雪6 小时前
HTTP,请求响应报头,以及抓包工具的讨论
网络·vscode·网络协议·http