Skip to content
程序扫地僧

从局域网访问wsl2内的网络程序

wsl, wsl2, 局域网访问, windows linux子系统1 min read

原始需求

用wsl2子系统开发时,访问上面运行的网络服务,只需要使用localhost即可。但从开发机外部网络(例如局域网)就访问不到。

原因

从wsl2开始linux子系统运行在虚拟机上,网络是从win上NAT过来的,跟win本身处于另一个局域网,所以外部无法访问。

解决方法

跟从公网访问路由器内的机器思路是一样的,开启端口映射即可。

以设置主机的10000端口映射到wsl2内的10000端口为例

获取linux子系统ip

1ifconfig

输出

1eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
2 inet 192.168.111.4 netmask 255.255.240.0 broadcast 192.168.111.255
3 inet6 fe80::215:5dff:fe36:ad50 prefixlen 64 scopeid 0x20<link>
4 ether 00:15:5d:36:ad:50 txqueuelen 1000 (Ethernet)
5 RX packets 11619 bytes 4941392 (4.9 MB)
6 RX errors 0 dropped 0 overruns 0 frame 0
7 TX packets 2159 bytes 2406370 (2.4 MB)
8 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
9
10lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
11 inet 127.0.0.1 netmask 255.0.0.0
12 inet6 ::1 prefixlen 128 scopeid 0x10<host>
13 loop txqueuelen 1000 (Local Loopback)
14 RX packets 30590 bytes 36540958 (36.5 MB)
15 RX errors 0 dropped 0 overruns 0 frame 0
16 TX packets 30590 bytes 36540958 (36.5 MB)
17 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

一般是eth0接口,192.x.x.x的ip,这里是192.168.111.4

设置端口映射

在开始菜单搜索powershell, 找到终端应用程序,右键选中powershell, 以管理员身份运行

1netsh interface portproxy add v4tov4 listenport=10000 listenaddress=0.0.0.0 connectport=10000 connectaddress=192.168.111.4

执行完就设置好监听win上所有ip地址和10000端口,并转发到192.168.111.4的10000端口了

删除端口映射

1netsh interface portproxy delete v4tov4 listenport=4000 listenaddress=0.0.0.0

执行这个可以删除上面设置好的端口映射配置

查看所有端口映射配置

1netsh interface portproxy show all

输出

1侦听 ipv4: 连接到 ipv4:
2
3地址 端口 地址 端口
4--------------- ---------- --------------- ----------
50.0.0.0 10000 192.168.111.4 10000

打开windows防火墙

配置好端口映射后,还需要打开windows防火墙,允许访问才行。参考下图所示的顺序设置就可以了。

允许端口访问

赶紧试试局域网访问吧

已知问题

仅支持tcp协议,不支持ipv6

© 2022 by 程序扫地僧. All rights reserved.
粤ICP备2022042070号-1
使用Gatsby构建