Go语言开发之局域网下的wsl | 青训营笔记

476 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天

今天在开发抖音项目的时候,由于我的项目在wsl2上,而测试需要利用局域网来收发请求,后来发现,wsl2和主机不在一个网段。 为什么呢?该如何解决呢?

WSL2

WLS2采用的是nat的网络技术,其网络本质就是源主机网络基础上的一个子网,这个模式的借助宿主机来上网,它能和宿主机互相ping通,但是不能和局域网内其他的主机进行通信,这就导致了一个问题,在wsl2上开发的项目是不能被其他主机所访问到的。那我们该怎么合理有效的解决这个问题呢?

端口映射

此时wsl2是宿主机的一个子网,而宿主机所在的局域网于wsl2来说就是外网,那就能通过利用宿主机的端口通过映射到wsl2所要访问的端口上。

操作步骤

1.设置防火墙开放对应的端口

2.以管理员身份运行powershell

3.输入命令添加映射:netsh interface portproxy add v4tov4 listenport=监听端口 connectaddress= wsl2ip地址 connectport=映射端口 listenaddress=0.0.0.0 protocol=tcp

4.输入命令查看所有映射netsh interface portproxy show all

5.(这是表示可以删除)输入命令删除对应的映射netsh interface portproxy delete v4tov4 listenport=监听端口 listenaddress=0.0.0.0

补充

每次重启wsl2它对应的ip地址都会发生变化,这就导致每次都要重新设置其映射端口,这个很麻烦,怎么解决呢?可以将wsl2的ip设为静态ip,每次重启wsl2其ip地址是固定的, 但是个人觉得比较麻烦,所以选择每次都重置一个监听端口的映射。另外wsL2是基于hyper-v的,其实本质就是基于虚拟机的,但是wsl2拥有完整的额linux的内核,wsl2是开源项目,值得好好研究。

参考:

  1. wsl1 vs wsl2 官方文档
  2. 防火墙开放端口的操作
  3. wsl2静态ip的设置
  4. wsl2 github开原仓库