暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

一文教你正确打通WSL和win10宿主机网络全通道

110

写在文章开头

近期笔者通过WSL
和朋友调试一些个人开发的项目时,发现一个奇怪的问题,笔者在WSL
内配置了RPC
服务注册地址为localhost:8080
,原理是想将其注册到WSL
这个子系统上,结果注册到宿主机Windows
宿主机的网卡上,进而导致该服务无法访问:

于是笔者通过抓包并查阅相关文档资料得出了WSL和Windows通道全打通的正确步骤,希望对你有帮助。

Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 ,也是开源项目 Java Guide 的维护者之一,熟悉 Java 也会一点 Go ,偶尔也会在 C源码 边缘徘徊。写过很多有意思的技术博客,也还在研究并输出技术的路上,希望我的文章对你有帮助,非常欢迎你关注我的公众号: 写代码的SharkChili

因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注  “加群”  即可和笔者和笔者的朋友们进行深入交流。

详解WSL和Windows宿主交互通道配置

调整hosts配置

通过笔者的抓包排查并查看WSL
hosts
文件配置,可以看到WSL
hosts
也配置了localhost
的解析配置,可以看到解析到地址也是127.0.0.1
,很明显这就是问题的根源:


127.0.0.1       localhost
127.0.1.1       DESKTOP-xxxx.        DESKTOP-xxxx


......


因为宿主机和我们的子系统对于localhost
配置都指向127.0.0.1
很多服务对于这种环回地址都会选择默认第一张网卡,这就会导致我们在WSL
发布到localhost
的服务器会走到非WSL
的网卡:

对此,我们首先要做的就是获取WSL实际的IP地址,然后将localhost及其主机名称映射全部改为这个地址。

所以我们键入ifconfig
得到地址后,将localhost
和主机名映射全部改为这个ip地址
,以笔者为例,WSL
对应的ip
172.x.x.x
,所以笔者最终的配置如下所示:

172.21.x.x localhost
172.21.x.x      DESKTOP-DxxxS.        DESKTOP-DxxxS


修改防火墙规则

完成上述步骤后,对于网络访问冲突问题基本是解决了,到此我们还差一步打通WSL
对于Windows
宿主机的访问权限,这一步我们首先需要打开power shell
并以管理员身份运行:

然后键入如下指令:

New-NetFirewallRule -DisplayName "WSL" -Direction Inbound  -InterfaceAlias "vEthernet (WSL)"  -Action Allow


随后出现这样一个列表提示说明我们的配置成功了:

这一点我们也可以打开Windows Defender
防火墙,找到高级设置中的入站规的列表去印证,如下图所示,笔者直接通过搜索栏快速定位到防火墙:

如下图,可以看到入站规则中也有笔者配置的WSL
放行规则,这也进一步的验证了我们的配置是生效的:

使用注意事项

经过上述的步骤,我们基本完成的WSL
和宿主通道全打通过程,后续使用时我们建议直接使用WSL的实际IP地址而不是localhost
这种,从而避免一些没必要的问题:

小结

自此我们将WSL和Windows宿主机网络通道打通的全过程都介绍完成了,希望对你有帮助。

我是 sharkchiliCSDN Java 领域博客专家开源项目—JavaGuide contributor,我想写一些有意思的东西,希望对你有帮助,如果你想实时收到我写的硬核的文章也欢迎你关注我的公众号: 写代码的SharkChili 。 因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注  “加群”  即可和笔者和笔者的朋友们进行深入交流。

参考

WSL2访问宿主Windows机器上的应用的极简之道:https://blog.csdn.net/jiangzhuang321/article/details/124166522


文章转载自写代码的SharkChili,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论