浅谈多个虚拟机(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通信。

相关推荐
HeLLo_a11922 分钟前
第11章 安全网络架构和组件(一)
linux·服务器·网络
薯条不要番茄酱30 分钟前
【网络原理】从零开始深入理解HTTP的报文格式(一)
网络·网络协议·http
南川琼语30 分钟前
TCP概念+模拟tcp服务器及客户端
linux·服务器·网络·tcp/ip
智联视频超融合平台1 小时前
慧港口新纪元:视频监控联网平台赋能高效安全运营
网络·网络协议·音视频·实时音视频·视频编解码
潘yi.5 小时前
web技术与nginx网站环境部署
服务器·网络·nginx
安顾里5 小时前
Linux命令-iostat
linux·运维·服务器
100编程朱老师6 小时前
面试:什么叫Linux多路复用 ?
linux·运维·服务器
Jtti6 小时前
Jtti:nginx服务器如何限制访问频率
服务器·网络·nginx
miracletiger6 小时前
uv 新的包管理工具总结
linux·人工智能·python
enyp806 小时前
麒麟系统(基于Ubuntu)上使用Qt编译时遇到“type_traits文件未找到”的错误
linux·qt·ubuntu