type
status
date
slug
summary
tags
category
icon
password
前言
一直以来我都是带台式电脑去学校,去年趁着国补买了台 MacbookAir,又遇宿舍搬迁等事宜,让我深深感到了东西多是有多难搬。
本文作为搭建 Windows 远程开发环境的记录。
需要解决的问题
搭建远程开发环境主要需要解决如下问题:
- 设备开机
- 网络
- 远程桌面方案
- 开发环境搭建
设备开机
设备开机主要用两种解决方案,WOL 和 来电启动。
WOL(Wake-On-LAN)主要是通过局域网设备发送
Magic Packet
来启动设备,同时还需要设备支持 WOL 功能(一些较老的主板不支持 WOL 功能)和保持电源的连接。来电启动(AC Power Loss Recovery/Restore on AC Power Loss)主要是通过智能插座来实现远程控制设备的断电、上电来启动设备。
这里主要使用 小米智能插座 结合 来电启动 来控制设备的开机。
注:WOL和来电启动都需要在 BIOS 中设置
网络
设备网络环境
网络 | 中国电信 |
下行 | 300M |
上行 | 40M |
路由器 | 自编译 ImmortalWrt 23.05 |
IPv4 | 公网+Full Cone NAT |
IPv6 | 开启 |
家中网络为中国电信 300M下行 + 40M上行,使用软路由进行拨号,软路由搭载自己编译的 ImmortalWrt(OpenWrt variant),开启 IPv6,同时具有公网 IPv4。
组网
DERP 搭建
DERP(Designated Encrypted Relay for Packets,指定加密中继服务器)服务器用于管理设备连接和 NAT 穿透。它们有两个主要用途:协商 tailnet 设备之间的直接连接,以及在无法建立直接连接时作为中继服务器。
DERP 服务实际上运行的是 HTTP 协议,默认的端口为 443,需要配合域名和证书使用。
由于使用的是境内的服务器,如果不备案我们是无法通过域名访问 HTTP 协议的,所以我们只能通过修改默认端口同时通过 IP 直连才可以访问。
- 使用
openssl
自签证书,DERP_IP
修改为自己的服务器 IP
- 将证书移动到相对
docker-compose.yml
的相对目录./certs
,使用Docker Compose
一键搭建 DERP 服务
- 在 Tailscale ACL 页面禁用默认 DERP 服务器,同时添加自建服务器。
- 配置完成后使用
tailscale netcheck
进行测试

打洞优化
使用
tailscale status
可以查看设备的网络连接状态,最理想的状态就是打洞成功的 direct
状态,如果遇到一直是使用 DERP 服务器的 relay
状态则需要排查原因。Tailscale 默认监听
41641
端口进行打洞,如果有公网 IPv4 可以尝试开启 NAT-PMP 或者手动允许 41641
端口的入站。如果没有公网 IPv4 则可以尝试使用 随机端口 等操作,详细如下:
速度测试

远程桌面方案
用 Windows 系统搭建开发环境肯定离不开远程桌面。远程桌面方案根据原理不同可以分类为 RDP 和 其他、还可以分为 开源 和 闭源商业。
下面是一些常见的远程桌面方案:
方案 | 核心原理 | 游戏支持 | 开源/闭源 | 是否收费 |
Windows RDP | 远程渲染 | 不推荐,以远程办公为主 | 闭源 | 免费 |
RustDesk | 视频串流 | 不推荐,以远程办公为主 | 开源 | 免费 |
Sunshine | 视频串流 | 支持 | 开源 | 免费 |
ToDesk | 视频串流 | 支持但需付费 | 闭源 | 免费、部分功能收费 |
网易UU远程 | 视频串流 | 支持 | 闭源 | 免费 |
Parsec | 视频串流 | 支持 | 闭源 | 免费、部分功能收费 |
这里主要使用 Windows RDP 和 RustDesk 作为远程桌面方案。如果需要游戏串流可以使用 Sunshine 或者 网易UU远程。
在远程桌面方案中,Windows RDP 凭借远程渲染而非视频串流的技术是不可或缺的存在。
开发环境搭建
虽然是在 Windows 下面搭建开发环境,但是 Linux 也是不可或缺的,这里基于 WSL2 来搭建 Linux 的开发环境。
主要是需要安装/开启这些功能:
- Hyper-V
- WSL2
- Podman
- OpenSSH
其中 Podman 依赖 WSL2 依赖 HyperV。
开启 Hyper-V
在 “启用或关闭 Windows 功能” 勾选 “Hyper-V” 即可。
安装 WSL2
跟着微软官方教程安装即可。
安装 Podman
安装包无脑点击下一步。
Hyper-V 问题解决
Windows 10(安装了 Hyper-V)会自动随机保留部分端口用于容器宿主网络服务(详细请见https://zhuanlan.zhihu.com/p/474392069)。
如果 Windows 动态端口范围被设得过低(如1024起步),常用端口(如8088、8000、3000等)会被误占用,导致无法绑定。
使用命令
netsh int ipv4 show dynamicport tcp
可以查看目前「TCP 动态端口」的范围。
使用
netsh int ipv4 show excludedportrange protocol=tcp
命令可以查看当前所有已经被征用了的端口。
解决方法
- 以管理员权限运行以下命令,将动态端口范围设回标准的高位区间,避免影响常用端口:
- 重启电脑
- 验证:
显示的范围应为49152-65535。
安装 Win32-OpenSSH
虽然我们可以直接通过远程桌面进行开发,但是这样过于臃肿了,我们可以直接通过 VsCode 的 RemoteSSH 插件连接远程服务器进行远程开发,且连接上后可以直接拥有在 Windows 本地开发的体验,能直接连接到 WSL 和 Podman 运行的容器,非常的方便。
实现这个功能我们只需要在 Windows 上安装 OpenSSH 服务,这里使用安装包直接进行安装。
Win32-OpenSSH 下载地址:https://github.com/PowerShell/Win32-OpenSSH/releases/



安装完成 OpenSSH 后可以将电脑上的 SSH 公钥添加到
authorized_keys
中实现丝滑的远程连接。WSL 安装 OpenSSH
至此,Windows 远程开发环境算是搭建完成了,不过如果只使用 Windows OpenSSH 会让我们访问 WSL 多一个步骤,这里我想要一个方案通过 SSH 连接上服务器就是 WSL。
实现也很简单,就是需要在 WSL 下安装 OpenSSH 服务,在 Ubuntu 下直接使用
apt install openssh-server
即可,同时要保证 WSL 配置 /etc/wsl.conf
开启 systemd
,通过 systemd
来管理 OpenSSH 服务的启动。
安装了 OpenSSH 服务还不够,我们还需要配置端口转发和 WSL 的开机启动。
我们使用 NSSM 来管理 Windows 的服务,由于 NSSM 只能运行 bat 脚本,所以我们还需要写一个 bat 脚本用于调用 ps1 脚本。


注意 NSSM 的
Log on
需要配置管理员的账户,不能使用 Local System account
。同时 Dependencies
需要添加 WSLService
。这样便完成了 WSL 端口转发与开机启动的配置。
总结
通过组网和开发环境搭建,完美的解决了远程开发的需求,外加远程桌面可以让我们控制电脑,串流游戏等等,非常的完美,暂时没有遇到缺点。
附录
WSL2 迁移存储目录
WSL2 默认将 Linux 发行版安装到C盘,迁移方法如下
- 导出
- 注销原发行版
- 导入到新目录