0. 前言
前几个月已经探索了通过x11 转发, 在windows与mac os上通过ubuntu docker 镜像,运行具有gpu加速的ubuntu gui程序
但是在windows上有更直接的选择, 那就是通过wsl2 运行ubutnu的linux 子系统, 这种方式,可以通过在docker desktop中设置与具体的wsl2 发行版集成, 让windows和wsl2 发行版使用同一个docker socket,共享一个docker engine
docker 也更建议把docker与wsl2一起使用, 此方案应有更多的性能红利和社区支持红利
由于我将在windows上通过wsl2 ubuntu运行的程序会使用udp广播来发现局域网中的设备,所以不能使用wsl默认的nat网络,否则udp广播刚不能传达到局域网的设备端. 所以我探索了设置wsl 网络桥接物理网卡的方式,并记录在此,留痕
此方法需要
- 使用hyper-v 创建虚拟网络
- 配置wsl 使用 虚拟网络
限制
- 终于目前只在win11上使用 win10上还没测试,所以不保证在windows上可以成功
如果将来在windows 10测试验证, 将会更新些文档
1.windows家族版安装hyper-v
通常安装hyper-v的方式是在程序中打开windows功能,选中hyper-v,确定安装,不过如果你是windows 家庭版,那么在打开windows功能的界面中不会有hyper-v的选项,需要用以下方式安装
创建 hyper-v.bat
1
2
3
4
5
6
|
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V -All /LimitAccess /ALL
pause
|
使用命令提示符或powershell运行这个脚本即可进行安装
2. 创建hyper-v 虚拟交换机网络
然后运行hyper-v后,在右边点创建虚拟交换机,选择外部网络,并设置wsl需要使用的物理网卡, 将名称修改为自己想定义的名称,我这里命名为 wsl-net
![image-20241229131345931](image-20241229131345931.png)
在powershell 使用Get-NetAdapter
,或ncpa.cpl
命令可以查看创建的虚拟机网络名称为 vEthernet(wsl-net),
为了方便配置,我们重命名它为wsl-net (直接在ncpa.cpl打开的网络适配器窗口右键重命名即可)
1
2
3
4
|
PS C:\WINDOWS\system32> Get-NetAdapter
Name InterfaceDescription ...
vEthernet (wsl-net) Hyper-V Virtual Ethernet Adapter #3 ...
|
修改完还是在powershell中命令Get-NetAdapter
验证一下
1
2
3
4
|
PS C:\WINDOWS\system32> Get-NetAdapter
Name InterfaceDescription ...
wsl-net Hyper-V Virtual Ethernet Adapter #3 ...
|
3. 配置wsl配置文件,使用虚拟交换机网络
在配置之前,进入wsl中查看网络为
1
2
3
4
5
6
7
8
9
10
11
12
13
|
DESKTOP-E31FB3M:/mnt/host/c/Users/kokbi# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 00:15:5d:b5:ac:4f brd ff:ff:ff:ff:ff:ff
inet 172.28.219.98/20 brd 172.28.223.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::215:5dff:feb5:ac4f/64 scope link
valid_lft forever preferred_lft forever
|
3.1 win11
在用户目录中修改.wslconfig (如果没有则创建)
1
2
3
4
5
|
[WSL2]
networkingMode=bridged
vmSwitch=external
dhcp=false
localhostForwarding=True
|
3.2 win10
参考
win10不支持通过配置文件直接配置虚拟交换机网络,所以只能通过修改默认的wsl网络来达到桥接的目的
在超级管理员权限的powershell中执行
1
|
Set-VMSwitch -name "WSL" -NetAdapterName "WLAN" -AllowManagementOS $true
|
-
WSL
为默认的wsl网络,
-
WLAN
为你想要桥接的网络
在wsl 中执行刷新ip地址和dhcp获取ip地址
1
2
|
ip addr flush dev eth0
dhclient eth0
|
如果需要网上冲浪,还需要配置一下dns
1
|
sudo echo "nameserver 8.8.8.8" > /etc/resolv.conf
|
如果想切换回NAT网络 ,设置在具有超级管理员权限的powershell中执行
1
|
Set-VMSwitch WSL -SwitchType Internal
|
更进一步设置到wsl里的/etc/wsl.conf
,在wsl启动时将自动执行脚本
1
2
3
4
5
|
[boot]
systemd=true
command = "/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/powershell.exe -Command 'Set-VMSwitch -name "WSL" -NetAdapterName "WLAN" -AllowManagementOS $true'; ip addr flush dev eth0; dhclient eth0"
[network]
generateResolvConf = false
|
等验证, 如果修改了默认的wsl网络,在wsl 关掉,重启电脑后会造成的影响需要观察,
从上方github的链接中看他们在wsl开启后才修改为桥接,并在wsl shutdown后,马上就把网络修改回NAT模式了.
>> Home
Comments