WSL2开发环境及网络配置[最终章]

yuanheci 2023年12月01日 773次浏览

与duo通信:由于是通过RNDIS协议,所以WSL2在NAT模式下即可,默认就会分配到一个192.168.42.*的IP(duo的ip已经被固定为192.168.42.1)。


WLS2中访问windows文件系统,win filesystem挂载在/mnt下:
image-1722144815635

2024-7-28:WSL2统一用mirror模式即可
mirror模式能获取宿主机windows的网络信息,包括wlan和以太网。
所以我们把宿主机的以太网卡固定ip即可
image-1722144127184

image-1722144209442

桥接模式连接开发板的原理也是通过一个imx_bridge虚拟网卡,桥接到宿主机的以太网网卡上,然后配置宿主机以太网网卡ip,imx_bridge虚拟网卡ip,开发板ip在同一网段,从而实现通信。


2024-7-27 复习时发现WSL2中虚拟机网络没了。。。
解决问题后总结如下:
bridge模式开发imx6ull时,记得检查Hyper-V管理器:
image

设置成外部网络(与以太网相连)
image-1722095951720

保证与虚拟机、开发板在同一网段
image-1722096036080

这样虚拟网卡才能接到这个以太网上,不然之前一次是空的。(可能是之前系统win10升win11导致配置没了?)

配置成功后:
image-1722096139448


主要网站记录:
bridge模式:
https://www.cnblogs.com/lic0914/p/17003251.html

mirror模式:
https://zhuanlan.zhihu.com/p/593263088

WSL2网络总结:
https://www.cnblogs.com/djilulu/p/17234332.html

听说前不久微软解决了WSL2下网络的宇宙级难题,为了弄清WSL2下的网络配置,连夜把机器更新到了最新的win11 23h2,想着用WSL2的mirror模式,结果在mirror模式下,usbipd转不过去了??,果然在github上发现了这个issue,到目前为止还没解决 ^ _ ^

imx6ull开发环境(涉及nfs, tftp下载):

WSL2配置桥接网络,用于连接imx6ull开发板(通过以太网接口)

首先是 .wslconfig(位于C:\Users\14464

[wsl2]
vmIdleTimeout=-1
networkingMode=bridged
vmSwitch=WSLBridge
ipv6=true
dhcp=false

当dhcp=false时会读取 cd /lib/systemd/network/wsl_external.network 的网络配置
vim wsl_external.network 加入以下内容:

[Match]
Name=eth0
[Network]
Description=bridge
DHCP=false
Address=192.168.25.128/24 # 自行修改
Gateway=192.168.25.1 # 自行修改(注意网关要和imx开发板配置的一致,这样才属于同一个子网!,才能ping通)

然而当我改完后发现以太网没有ipv4地址,于是又做了以下配置后才成功

进入wsl的Ubuntu子系统,打开 /etc/wsl.conf,若文件不存在则创建

[boot]
systemd = true
[network]
generateHosts = false
generateResolvConf = false

检查 /etc/systemd/network/,若文件夹下没有文件则创建一个配置文件my-network.conf,若文件夹下有文件则忽略此步骤。

[Match]
Name=eth0
[Network]
DHCP=ipv4

重启网络
sudo systemctl restart systemd-networkd.service
sudo systemctl enable systemd-networkd
sudo systemctl restart systemd-networkd

wsl --shutdown关闭,再重启WSL即可

如果还是没有ipv4地址,可能是网线没插好。。。(我是这样的),通过在宿主机下查看imx_bridge是否有ip来判断即可~

然而发现在bridge模式下,usbipd也无法把设备转到WSL2中,
usbipd: error: The local IP address for the WSL virtual switch could not be found.

WSL2貌似目前只能配置一个网卡?
无奈只好在win中开一个终端用来当串口操作,从github上挖到一个宝~~


net模式和mirror模式实际使用

WSL (Hyper-V firewall) 是我机器上WSL2与宿主机通信的虚拟交换机

win10下使用:

Get-NetAdapter 'vEthernet (WSL (Hyper-V firewall))' | Get-NetIPAddress | Remove-NetIPAddress -Confirm:$False

win11下使用(加上-IncludeHidden,否则找不到虚拟交换机):
Get-NetAdapter -IncludeHidden -Name 'vEthernet (WSL)' | Get-NetIPAddress |Remove-NetIPAddress -Confirm:$False

New-NetIPAddress -IPAddress 192.168.25.1 -PrefixLength 24 -InterfaceAlias 'vEthernet (WSL (Hyper-V firewall))'
Get-NetNat | ? Name -Eq WSLNat | Remove-NetNat -Confirm:$False
New-NetNat -Name WSLNat -InternalIPInterfaceAddressPrefix 192.168.25.0/24;

这样其实是把WSL (Hyper-V firewall)设成了Net模式,因此net模式可用,但mirror模式不能用了
https://zhuanlan.zhihu.com/p/380779630

如果想改回mirror模式
首先要清除上面的Net设置(重启电脑)
然后mv方式改掉 /lib/systemd/network/wsl_external.network,比如可以重命名变成后缀 .no,使其不生效。
这样可以连上网了,但是宿主机的以太网ip没有镜像过来,暂时用不到这个,就不追究了。

就我目前使用来说,平时用net模式,开发imx6ull用bridge模式即可。


具体切换的时候将下面对应的配置复制到.wslconfig中即可

.bridge.wsl_config

[wsl2]
kernel=C:\\Users\\14464\\bzImage
networkingMode=bridged
vmSwitch=imx_bridge # 上图中的Name值
dhcp=false
ipv6=true

.mirror.wslconfig

[wsl2]
kernel=C:\\Users\\14464\\bzImage

[experimental]
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true

.nat.wslconfig

[wsl2]
kernel=C:\\Users\\14464\\bzImage