WSL2改为桥接
需求
在docker容器内部程序自己获取的ip是172开头的。我需要跟宿主机同样网段的ip。
问题
win10系统wsl2 不支持桥接
更简单的解决方案
使用vmware虚拟机,直接启动一个linux镜像,然后使用桥接网络模式也能实现需求。
另一种思路
- 使用docker的macvlan模式,该模式只支持linux系统
- wsl2使用的ubuntu是子系统,可行,但是子系统使用的是NAT模式,与宿主机ip不同。
- 需要wsl2跟宿主机ip相同,或者wsl2是桥接模式
- 需要环境是
win11 22h2
,win10 某个build版本
,我现在的环境如下。
WSL 版本: 2.0.9.0
内核版本: 5.15.133.1-1
WSLg 版本: 1.0.59
MSRDC 版本: 1.2.4677
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows 版本: 10.0.19045.3570
- 以上版本修改wsl2为桥接模式,会出现无法启动的情况,所以现在的版本无法修改桥接模式。
无法配置 networkingMode Bridged)(网络。若要禁用网络,请在C:\Users\admin\.wslconfig中设置“wsl2.networkingMode=None”
Error code: Wsl/Service/CreateInstance/CreateVm/ConfigureNetworking/HCS/0x8037010d
- win10系统升级至
win11 22h2
, 按照下面步骤修改wsl2
为桥接解决了问题。
修改桥接模式的步骤
- Hyper-V 管理器 -> 虚拟交换机管理器 -> 新建虚拟网络交换机
- 创建外部网络, 名字随意,我这里填写 Bridged
- 点击应用,点击确认。
- 在
%USERPROFILE%
目录下新建文件.wslconfig
,添加以下内容
[wsl2]
networkingMode=bridged
vmSwitch=Bridged # 刚才设置的虚拟交换机
ipv6=true # 开启ipv6,
- 重启wsl2
wsl --shutdown
wsl
参考:https://blog.csdn.net/qq_44729735/article/details/131252561
特别提醒
此内容仅适用于Windows 11 22H2 及以后版本,老版本请升级
需要从 Microsoft Store 里面下载最新的 Windows Subsystem for Linux。
wsl装好之后可以运行 wsl --version 确认一下是不是 1.0 以上。
此教程需要用到Hyper-V,Windows11请升级到专业版及以上
问 new/bing
问: win10 wsl2 改桥接的办法
答:
打开 PowerShell 并以管理员身份运行。
运行 Get-NetAdapter 命令,获取所有网卡的信息。
记录想要桥接到的网卡名称,例如 Wi-Fi 或 Ethernet 等等。
运行以下命令:Set-VMSwitch WSL -NetAdapterName 网卡名称,将 WSL 使用的网卡桥接到指定的网卡之上。
进入 WSL 并配置 IP 地址和网关。例如,如果网关为 192.168.1.1,IP 地址为 192.168.1.150/24,则可以运行以下命令:
$ sudo ip addr del $(ip addr show eth0 | grep 'inet\\b' | awk '{print $2}' | head -n 1) dev eth0
$ sudo ip addr add 192.168.1.150/24 broadcast 192.168.1.255 dev eth0
$ sudo ip route add 0.0.0.0/0 via 192.168.1.1 dev eth0
他的答案跟上面的方式对比,实际上是直接把
WSL
的网卡桥接上了以太网。跟我使用的新建一个虚拟网卡然后桥接上以太网区别不大。没有使用
.wslconfig
, 所以 wsl2 使用默认NAT网络模式启动。执行指令
sudo ip addr del $(ip addr show eth0 | grep 'inet\\b' | awk '{print $2}' | head -n 1) dev eth0
会有以下错误:
RTNETLINK answers: Operation not supported
无法解决我的问题,遂决定升级系统至win11
最后的解决方案
win11 23h2 的wsl2 有一个镜像网络模块,可以使wsl2跟宿主机ip一致.
升级 win11 23h2, 使用wsl2的镜像网络模式
[experimental]
autoMemoryReclaim=gradual # 可以在 gradual 、dropcache 、disabled 之间选择
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
sparseVhd=true
hostAddressLoopback=true
我使用镜像模式之后wsl2的ip虽然跟宿主机一样了,但是使用宿主机网卡ip一直访问不到wsl2的端口,只能通过127.0.0.1访问,最后在这个帖子下的一个评论找到了
hostAddressLoopback=true
这个参数是 (Ryzon M1)(https://www.zhihu.com/people/ryzen-m1) 提供的,感谢!!
官方文档: https://learn.microsoft.com/zh-cn/windows/wsl/wsl-config#experimental-configuration-settings
--完--
- 原文作者: 留白
- 原文链接: https://zfunnily.github.io/2023/11/wsl2/
- 更新时间:2024-04-16 01:01:05
- 本文声明:转载请标记原文作者及链接