产生这个需求的原因
众所周知,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端口放行 - 参照链接