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

相关推荐
chlk12321 小时前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑1 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件1 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
深紫色的三北六号1 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash1 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI2 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行3 天前
Linux和window共享文件夹
linux
木心月转码ing3 天前
WSL+Cpp开发环境配置
linux
崔小汤呀4 天前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端
何中应4 天前
vi编辑器使用
linux·后端·操作系统