同一局域网下windows主机和wsl子系统相互网络服务访问

文章目录

  • 1. 从主机访问wsl的服务
  • 2. 从wsl访问主机的服务
  • 3. 通过远程ip连接wsl中的服务(局域网)

进行以下操作之前,请关掉主机上的防火墙和360。
防火墙关闭之后是这个样子:
同一局域网下windows主机和wsl子系统相互网络服务访问_第1张图片

1. 从主机访问wsl的服务

在wsl子系统中,使用以下命令,获取wsl的ip

ip addr | grep eth0

我这里的显示是:

6: eth0:  mtu 1500 qdisc mq state UP group default qlen 1000
    inet 172.30.64.232/20 brd 172.30.79.255 scope global eth0

wsl的ip即为inet后面的一串,也就是172.30.64.232。
然后找一个目录,新建一个index.html文件,内容为:

<html>
    <head>
        <meta charset="UTF-8">
    head>
    <body>
        <h1>点个赞再走h1>
        <p>这么好的文章还不点赞p>
        <h2>一键三连关注一下h2>
        <p>不点赞不许白嫖p>
    body>
html>

在这个目录下,输入python -m http.server 8080来启动一个服务。
回到主机,打开浏览器,输入172.30.64.232:8080,应该可以看到这个界面:
同一局域网下windows主机和wsl子系统相互网络服务访问_第2张图片

2. 从wsl访问主机的服务

首先,在主机上用管理员身份打开powershell,具体来说,可以点击windows左下角的“小窗户”,然后输入powershell进行搜索,点击以管理员身份运行。
同一局域网下windows主机和wsl子系统相互网络服务访问_第3张图片

输入命令

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

然后在wsl中输入命令:

cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }'

就会出现一个ip,这个ip可以用ping + ip测试一下,应该可以连通
同一局域网下windows主机和wsl子系统相互网络服务访问_第4张图片
在主机上随便找一个文件夹,创建上面的index.html,运行python -m http.server 8080来启动一个服务。
由于wsl中没有浏览器,我们用curl命令来测试访问网络服务。输入curl http://{IP}:8080,比如我这里ip是172.30.64.1,那么结果如下图所示:
同一局域网下windows主机和wsl子系统相互网络服务访问_第5张图片

3. 通过远程ip连接wsl中的服务(局域网)

我们知道,如果多台机器位于同一局域网下,访问的时候可以使用http://ip:port的方式来访问,那如果我们的服务启动在wsl中,同一局域网下的其他机器该怎么访问呢?分为3步:
(注意:以下步骤对防火墙很敏感,尽量确保自己的设备像文章开头那样,关闭了所有的防火墙)

  1. 在wsl子系统中,使用以下命令,获取wsl的ip

    ip addr | grep eth0
    

    inet后面跟着的就是wsl的ip,复制一下

  2. 在windows中,用管理员方式打开powershell,输入命令,这里我的wsl的ip为172.30.64.232,要启动服务的端口为2345,这里因为8080端口限制比较多,所以换了一个普通的端口,因此命令如下:

    netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2345 connectaddress=172.30.64.232 connectport=2345
    

    记得在使用的时候,替换connectaddress和listenport、connectport为你需要的值。
    还是和上面的方法一样,在wsl中输入python -m http.server 2345,启动一个python的服务,端口2345。

  3. 然后在Windows的powershell中,输入ipconfig,找到无线局域网适配器 WLAN:IPV4地址,我这里为10.46.84.134:
    同一局域网下windows主机和wsl子系统相互网络服务访问_第6张图片
    在同一局域网下的另一台设备上,打开浏览器,输入http://10.46.84.134:2345,即可看到我们期待的网页:
    同一局域网下windows主机和wsl子系统相互网络服务访问_第7张图片
    经过测试,用手机去访问也没有问题的。
    同一局域网下windows主机和wsl子系统相互网络服务访问_第8张图片

你可能感兴趣的:(系统配置的大小坑,windows,网络,linux)