手把手搭建远程WSL(Windows Subsystem for Linux)服务器
目录
- 一、WSL基础操作
- 二、设置WSL开机自启动(选做)
- 三、使用Zero Tier进行内网穿透(必做)
- 四、修改WSL网络模式
- NAT解读(了解)
- 配置镜像模式(重点)
- 五、在WSL上安装SSH服务并配置
- 六、Windows放行相应端口
- 七、使用VSCode远程连接
众所周知,Windows在办公使用方面相比Linux具有巨大优势,而作为一名深度学习领域的工作者,各种开源项目的环境配置却是Linux的兼容性更上一层。从前我们使用Windows+虚拟机或者Windows+Linux双系统的方式来追求办公和工程的平衡。但是后面微软推出了WSL,即Windows Subsystem for Linux,也就是Windows官方的Linux系统,其表现接近原生的Linux系统,运行速度大于虚拟机。
目前我们就是要搭建一个Windows+多个WSL子Linux系统的主机架构,然后各个不同版本的WSL可以像服务器那样被我们远程访问控制。
一、WSL基础操作
首先就不介绍怎么安装WSL2以及各个发行版了,这个资料简直太多了。
安装完WSL2后我们要学会使用基础的一些WSL指令,其实就是开机关机的操作。更多更全的用法请参考此官网链接。这里只介绍最常用的几个:
- 查看wsl各个分发版系统的的工作状态:
wsl -l -v - 启动某个特定版本:
wsl -d <发行版名称>也可以指定启动的用户:wsl -d <发行版名称> -u <用户名> - 停止某个WSL发行版 :
wsl --terminate <发行版名称> - 关闭所有WSL:
wsl --shutdown - 在Windows上访问分发版文件
在windows文件管理器的搜索栏(下图红框)中输入//wsl$即可快速访问分发版的文件夹:

二、设置WSL开机自启动(选做)
为了打造一个完备的服务器系统,我们必须要保证当主机重启时WSL服务器能够自动重启,不需要人为地手动地使用指令去启动。
用记事本创建一个.vbs文件,名字自定义。粘贴内容如下:
set ws=wscript.CreateObject("wscript.shell")
ws.run "wsl -d <发行版名称>", 0
然后win + R,输入shell:startup打开目录,把这个脚本粘贴进去就行了。

三、使用Zero Tier进行内网穿透(必做)
内网穿透的重要性就不用多说了,只有内网穿透才能让不在同一个内网的设备互联起来,也就是能让你在外地访问自己家里的服务器,这部分内容参考我这篇博客,内网穿透的软件也很多也可以参考网上的教程。
总结来说就是,ZeroTier相当于创建了一个局域网,将不在同一个局域网的主机关联起来,并且给予每台机子相应的内网IP。
当然,如果你的远程端和WSL服务端都在同一个内网下,那么就可以不需要使用Zero Tier进行内网穿透。
总之如果不做穿透,就只能在同一个局域网下访问远程WSL服务器
四、修改WSL网络模式
NAT解读(了解)
WSL默认的网络模式叫NAT,也就是把Windows主机当成网关。在这种方式下,Windows端会使用Hyper-V虚拟交换机创建一个新内网。这个内网和主机连接的局域网是不互通的。
在主机端输入ifconfig,可以发现会输出两个vEthernet信息:

上面那个是Windows虚拟的交换机,下面的是WSL的防火墙。可以很容易看到,这个网段和主机连接的局域网是不同的,因此局域网里的其它机器是不能访问主机的WSL的。
在WSL输入ifconfig输出如下:

上面那个IP就是WSL的IP地址,流量是从WSL经过防火墙再到交换机(172.27.210.90—172.27.208.1—172.26.48.1)这样的途径的。
在NAT网络模式下,WSL上网之类的功能,以及和Windows主机的通信是比较容易的,但是如果有机器需要远程访问WSL却十分困难,一种方式是在Windows主机设置端口转发:
# 在 Windows 终端(管理员)执行
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=8080 connectaddress= (wsl IP)
其中 (wsl IP)通过终端输入wsl hostname -I获取,这条指令就是将主机8080端口的信息转发到WSL。
NAT适用于简单要求不高的环境下,但凡WSL需要使用代理,以及远程访问等功能,并且WSL2被分配的IP是不断变化的,设置起来就会很复杂。因此,本文重点在后面这部分:镜像模式。
配置镜像模式(重点)
镜像模式是WSL2的一个新特性,适用于== Windows 11 22H2 或更高版本==。其主要原理就是WSL子系统镜像Windows主机的IP(这样外部局域网的主机就可以访问WSL),继承主机的网络配置以及代理设置,并与Windows主机复用端口(保证Windows主机和WSL不会冲突),堪称目前最香的方案!!!
- 创建并编写
.wslconfig
在Windows的用户目录下创建/修改.wslconfig文件,使用记事本将下面的内容复制进去:
[experimental]
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
确认保存即可!
2. 重启WSL
Windows CMD输入wsl --shutdown,然后再启动发行版:wsl -d
下面是Windows下查询到的IP地址:

上面的是主机在局域网下的IP地址,下面的是ZeroTier局域网下的IP地址,记住这是主机的。
在wsl中查询一下IP地址:

可以发现,此时WSL的IP和主机的IP一致了,这就说明我们的镜像网络模式设置成功!
五、在WSL上安装SSH服务并配置
首先保证WSL处于镜像的网络模式下:
- 在WSL子系统中输入:
sudo apt update,更新软件源。 sudo apt purge openssh-server -y卸载原有的sshsudo apt install openssh-server安装ssh服务端。sudo vim /etc/ssh/sshd_config,编辑ssh配置文件。
需要修改的配置项:- Port 2220(取消注释,并改成自定义的端口,不要和主机重复)
- PasswordAuthentication yes(允许密码登录)
- PermitRootLogin prohibit-password(禁止root直接登录)
保存并退出
- 启动ssh服务:
sudo service ssh start. - 设置ssh为开机自启动:
sudo systemctl enable ssh - 检查ssh服务运行情况:
sudo service ssh status

输出上面的信息,说明SSH服务已经启动。并且可以在主机的cmd中通过ssh -p 2220 username@localhost测试WSL端ssh服务是否成功运行:

成功的话应该输出上面的内容。
六、Windows放行相应端口
我们访问WSL的途径是 外部的控制端 —》ZeroTier–》主机–》WSL,但实际上外部的数据进入主机主机的端口还需要经过Windows上配备的防火墙,需要将对应端口的数据放行,注意本地Windows主机通过网络回环访问WSL是不经过防火墙的,所以前面windows能通过本地回环访问WSL。
- 打开防火墙高级设置

- 新建入站规则


按照上面的样子填写WSL里SSH Server开放的端口(这里是2220)。


至此,端口开放就完成了,现在可以通过远程的主机访问WSL了! - 测试
在远程主机中输入:
ssh -p@
如果连接成功则大工告成!
七、使用VSCode远程连接
首先安装Remote-SSH扩展:

然后添加远程ssh即可:

输入ssh -p 即可实现远程连接。
这部分网上教程也很多,都是通用的。









