首页 局域网内访问WSL
文章
取消

局域网内访问WSL

产生这个需求的原因

众所周知,Github Pages是个非常好的东西,将分享精神贯彻得淋漓尽致;

这个博客站点就是基于Github Pages搭建而成,搭建过程使用了静态站点生成器Jekyll,该工具内置GitHub Pages支持和简化的构建过程。 Jekyll 使用Markdown和HTML文件,并根据自定义的布局创建完整的静态网站。 Jekyll 支持Markdown和Lick,这是一种可在网站上加载动态内容的模板语言,有关详细信息,请参阅Jekyll,这不是本文重点。

由于Windows并未正式支持Jekyll,因此所有的搭建流程都内建于Windows的Linux子系统WSL,Jekyll可以通过bundle很方便的在本地预览网页,确保发布到Github的最终版无差错;

然而由于WSL 2子系统的局域网是通过NAT模式拓展的,与Windows主机所在的局域网属于不同网段,这就导致局域网中的其他设备无法通过访问主机IP加端口去访问网站,虽说在Windows上预览并不影响什么,但还是想解决这个问题;

解决策略

网络上大多方案都是将WSL 2的NAT模式改桥接,其实没有必要这么复杂,端口映射或许也是一个比较便捷的方案,微软刚好已经有了这么一个策略;

微软官方将该工具集成到了系统里,它就是netsh interface portproxy,具体文档可参照链接

具体操作流程其实官方文档已经有详细描述;

  • 使用netsh接口interface portproxy添加端口代理;
  • 该代理侦听主机端口并将该端口代理连接到WSL 2 VM的IP地址。

    1
    
      netsh interface portproxy add v4tov4 listenport=<yourPortToForward> listenaddress=0.0.0.0 connectport=<yourPortToConnectToInWSL> connectaddress=(wsl hostname -I)
    
  • 在此示例中,需要更新<yourPortToForward>到端口号,例如listenport=4000
  • 侦听地址指定要侦听的IPv4地址,可以更改为以下值:IP 地址、计算机NetBIOS名称或计算机DNS名称;如果未指定地址,则默认值为本地计算机,如果指定listenaddress=0.0.0.0表示将接受来自任何IP地址的传入请求。
  • 需要将<yourPortToConnectToInWSL>值更新为希望WSL连接的端口号,例如connectport=4000
  • 最后,connectaddress值必须是通过WSL 2安装的Linux分发版的IP地址,建议在Linux中通过输入命令ifconfig确认信息;

因此,此命令可能如下所示:

1
netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.101.100

到这就完了吗?并没有,由于Jekyll指定了4000端口,我们还需要在Windows主机将该端口放行,否则仍然不能生效,具体策略:

  • 打开Windows防火墙配置
  • 通过设定入站规则将4000端口放行
  • 参照链接

本文由作者按照 CC BY 4.0 进行授权

进程的设计

设计模式之单例模式