在家远程访问办公室电脑(受腾讯iOA限制)综合方案:EasyTier 组网
一、背景与目标
背景,办公室电脑:
- 被腾讯ioa管控,非白名单软件无法联网。
- rustdesk等远控软件无法安装(ACL限制)
- wsl可以安装,且无网络限制
- windows自带的远程桌面可以使用(非默认端口3389,而是13389)
目标:在家使用windows自带的远程桌面控制办公室电脑
先说结论:
可以在wsl安装easytier(理论上tailscale等其他组网软件都可行),并连上自己的虚拟局域网,获得一个固定的虚拟ip比如192.168.10.10,然后在家里用远程桌面连接192.168.10.10。即可远控办公室宿主机。(省略了一些细节,比如wsl需要socat转发3389到本机13389)
二、办公环境确认
| 项 | 值 |
|---|---|
| 办公室机器 | WSL2(用户自己装的Ubuntu),用户 usera,主机 DESKTOP-xxx |
| 办公室内网 | WSL eth1 / 宿主 WLAN 均为 10.66.18.94/20(子网 10.66.18.0/20,镜像模式同 IP) |
| 宿主 RDP | 端口 13389(注册表 PortNumber=13389,监听 0.0.0.0:13389) |
| WSL 网络模式 | 镜像模式(mirrored)(.wslconfig 中 networkingMode=mirrored) |
| EasyTier 虚拟 IP | 192.168.10.10(固定) |
| 家里服务端 | easytier.t.xyz:11010(TCP 监听,网络中心) |
| EasyTier 安装目录 | /opt/easytier/,核心 easytier-core,管理 easytier-cli |
| 配置目录 | /opt/easytier/config/,service 模板 easytier@.service |
| SSH(按需) | 自己装openssh-server ,/usr/sbin/sshd;unit 名 ssh.service(非 sshd.service) |
三、WSL 内 EasyTier 组网与安装
前提:
- 你已经有easytier服务,或者使用网络上别人免费提供节点(比如
tcp://sh.vomiku.com:7910,来源 https://github.com/orgs/EasyTier/discussions/1909,自行甄别是否安全) - 家里的电脑已经安装easytier,并加入了服务器节点
3.1 确定虚拟网段
- 虚拟网段自定义,此教程用
192.168.10.0/24。
3.2 安装
- (官方 install.sh 脚本,需要翻墙,自行解决网络问题)
# 1) 装依赖(脚本解压 release 需要 unzip)
sudo apt update && sudo apt install -y curl unzip
# 2) 下载官方安装脚本
curl -fsSL "https://github.com/EasyTier/EasyTier/blob/main/script/install.sh?raw=true" -o /tmp/easytier-install.sh
# 3) 执行安装(install.sh 自动下载最新 release、解压并安装到 /opt/easytier)
sudo bash /tmp/easytier-install.sh install
# 4) 验证安装成功(两个二进制:easytier-core 守护进程、easytier-cli 命令行工具)
/opt/easytier/easytier-core --version
/opt/easytier/easytier-cli --help安装脚本会一并生成 systemd 模板服务
/etc/systemd/system/easytier@.service和默认配置/opt/easytier/config/default.conf,下面直接复用,无需手写。
3.3 写配置文件
不建议直接改默认配置,防止改出问题。 这里由默认配置复制一份,命名office,并改成本机参数:
# 注意权限,需要 sudo或者root
# 复制默认配置为 office 实例的配置
sudo cp /opt/easytier/config/default.conf /opt/easytier/config/office.conf
# 编辑(如用 vim)
sudo vim /opt/easytier/config/office.confoffice.conf 最终内容如下(关键字段已标注):
instance_name = ""
dhcp = false # ← 关闭动态分配,配合下方ipv4参数 固定内网ip
ipv4 = "192.168.10.10" # ← 固定本机(wsl)虚拟 IP
listeners = [
"tcp://0.0.0.0:11010",
"udp://0.0.0.0:11010",
"wg://0.0.0.0:11011",
"ws://0.0.0.0:11011/",
"wss://0.0.0.0:11012/",
]
exit_nodes = []
rpc_portal = "0.0.0.0:0"
[[peer]]
uri = "这里填你的easytier服务器地址" # ← 【自定义项】中心服务器地址
[network_identity]
network_name = "你的easytier网络名" # ← 【自定义项】easytier 服务名、与家里节点一致即可
network_secret = "你的密码" # ← 【自定义项】easytier 服务密码、与家里节点一致即可
[flags]
default_protocol = "tcp"
dev_name = ""
enable_encryption = true
enable_ipv6 = true
mtu = 1380
latency_first = false
enable_exit_node = false
no_tun = false
use_smoltcp = false
foreign_network_whitelist = "*"
disable_p2p = false
p2p_only = false
relay_all_peer_rpc = false
disable_tcp_hole_punching = false
disable_udp_hole_punching = false3.4 启动服务并验证
# 1) 停掉并禁用安装脚本默认启用的 default 实例(避免多实例导致端口冲突)
sudo systemctl stop easytier@default
sudo systemctl disable easytier@default
# 2) 启用并启动 office 实例(模板服务 %i=office,自动加载 office.conf)
sudo systemctl enable easytier@office
sudo systemctl start easytier@office
# 3) 查状态,应 active (running)
sudo systemctl status easytier@office
# 4) 验证虚拟 IP 已分配
ip addr show | grep 192.168.10.10
# 5) 查看 peer 连通状态(应看到本地 192.168.10.10/24 及远端节点 p2p 通)
# sudo /opt/easytier/easytier-cli peer
sudo easytier-cli peer3.5 固定 IP 验证
# sudo systemctl restart easytier@office
sudo /opt/easytier/easytier-cli peer # 本机应稳定显示 192.168.10.103.6 连通性排查命令
sudo ss -tlnp | grep 11010 # 看端口占用
sudo journalctl -u easytier@office --no-pager -n 40 # 启动错误
sudo journalctl -u easytier@office | grep -i proxy # 子网代理是否注册
sudo easytier-cli peer # 邻居/p2p/延迟/丢包wsl保活
wsl终端一旦关闭,wsl虚拟机就会自动关,导致easytier断联,可以参考https://jishuzhan.net/article/2061265285704921090进行wsl保活。
主要步骤:
1. 创建开机自启动文件
宿主机,按 Win + R,输入以下路径打开启动文件夹:
%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup新建文件 wslstart.cmd,内容如下:
@echo off
:: 保持 WSL 后台运行,供 Hermes Agent 使用
start /b wsl -d Ubuntu24.04 --exec dbus-launch true(将上述脚本里的 Ubuntu24.04 替换为你实际的发行版名称,通过wsl -l查看)
重启电脑后,WSL 将自动在后台运行。
2. 常用管理命令
wsl -l -v # 查看 WSL 状态
wsl --shutdown # 完全关闭 WSL(释放资源)
wsl -d Ubuntu # 连接到后台实例四、远程控制宿主(socat 中继方案)
4.1 确认宿主 RDP 端口(宿主侧执行)
在办公室 Windows 宿主 PowerShell 执行,确认 RDP 确实跑在 13389:
# 1) 查注册表 RDP 端口(十进制 13389,对应十六进制 0x34A9)
Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name PortNumber
# 2) 查监听状态:应看到 0.0.0.0:13389 LISTENING(监听所有接口)
netstat -ano | findstr :13389
# 或 PowerShell 等价写法
Get-NetTCPConnection -LocalPort 13389 -State Listen
# 3) 本机连通性:源=目的均为本机,验证 RDP 服务本身可用
tnc 127.0.0.1 -Port 13389
# 4) 确认远程桌面服务在运行
Get-Service TermService预期结果:
| 命令 | 预期输出 |
|---|---|
注册表 PortNumber | 13389 |
netstat / Get-NetTCPConnection | 0.0.0.0:13389 LISTENING |
tnc 127.0.0.1 -Port 13389 | TcpTestSucceeded : True |
Get-Service TermService | Status : Running |
若注册表端口不是
13389,把下文所有命令里的13389换成实际端口即可。
4.2 确认 WSL 镜像模式
在宿主机powershell查看用户目录下的wsl配置,确保有networkingMode=mirrored
PS C:\Users\XXX> cat .wslconfig
[experimental]
autoMemoryReclaim=gradual
networkingMode=mirrored # 必须
dnsTunneling=true
firewall=true
autoProxy=true4.3 wsl内验证连通性
# 测 WSL 内 localhost 是否等于宿主 RDP(镜像模式特性)
timeout 2 bash -c "echo > /dev/tcp/127.0.0.1/13389" 2>/dev/null \
&& echo "通:可继续" || echo "不通:见排错章节"只有这一步「通」,方案才成立。
4.4 socat转发wsl远控流量到宿主机原理
镜像网络模式下,WSL 的 127.0.0.1 与宿主共享,因此 在WSL 内访问 127.0.0.1:13389 就等于访问宿主 RDP。
只需在 WSL 里用 socat 做一次端口转发,把 EasyTier 虚拟 IP 上的一个端口”搬”到宿主 RDP:
家里 → EasyTier 隧道 → 192.168.10.10:23389 → socat → 127.0.0.1:13389 → 宿主 RDP
(为了防止被检测,没有直接使用window远程控制的默认端口3389,这里用的23389)
全程 RDP 流量在 EasyTier 加密隧道内,不进公司网 ACL,绕过跨段拦截。
为什么监听端用 23389 而不是直接13389
镜像模式共享网络栈,宿主 RDP 已监听 0.0.0.0:13389(覆盖所有接口),socat 再绑 192.168.10.10:13389 会端口冲突(Address already in use)。因此监听端换成 23389,转发目标仍是宿主的 127.0.0.1:13389。
4.5 WSL 安装 socat
sudo apt update && sudo apt install -y socat
which socat # 确认路径,一般为 /usr/bin/socat4.6 手动跑通 socat(可选,验证链路)
# 前台跑,看到连接日志即通(-d -d 只打印连接日志,不刷 RDP 二进制)
socat -d -d TCP-LISTEN:23389,bind=192.168.10.10,fork,reuseaddr TCP:127.0.0.1:13389
bind=192.168.10.10必须保留:只暴露在 EasyTier 虚拟网,不暴露到公司局域网。
然后在其他虚拟内网设备测试(powershell):
tnc 192.168.10.10 -Port 23389 # 应 TcpTestSucceeded: True
mstsc /v:192.168.10.10:23389 # 执行远控4.8 确认无误后,wsl加systemd 保活(开机自启 + 崩溃自愈)
前提:WSL 已启用 systemd(ps -p 1 -o comm= 输出 systemd)。若未启用,先在 /etc/wsl.conf 加 [boot] systemd=true 并 wsl --shutdown 重启。
# 先停掉手动跑的 socat(如有),避免端口占用
sudo pkill -f 'socat.*TCP-LISTEN:23389'
# 建服务(依赖 EasyTier,保证 EasyTier 重启时转发一起重建)
sudo tee /etc/systemd/system/rdp-forward.service > /dev/null <<'EOF'
[Unit]
Description=Forward EasyTier 23389 to Windows host RDP 13389
After=network-online.target easytier@office.service
Requires=easytier@office.service
[Service]
ExecStart=/usr/bin/socat TCP-LISTEN:23389,bind=192.168.10.10,fork,reuseaddr TCP:127.0.0.1:13389
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now rdp-forward
sudo systemctl status rdp-forward # 看到 active (running) 即成功五、WSL 内 SSH 服务(可选,供家里远程ssh登录)
openssh-server安装后,systemd unit 名是 ssh.service(不是 sshd.service),所以 systemctl start sshd 报 Unit sshd.service not found。
ssh.socket enabled,ssh.service disabled。
首次启动必做
sudo ssh-keygen -A # 生成主机密钥(首次必做,否则 sshd 起不来)
sudo mkdir -p /run/sshd # WSL 需要此目录
sudo systemctl start ssh # 用 ssh.service,不是 sshd.service
sudo systemctl status ssh
sudo ss -tlnp | grep :22 # 确认监听 0.0.0.0:22 或 *:22账号与登录
- 当前以
root@DESKTOP-xxx登录 WSL;家里连过来用usera需: - 设密码:sudo passwd usera,或 - 放公钥:把家里公钥写入~usera/.ssh/authorized_keys。 - 开机自启:
sudo systemctl enable ssh。
踩坑
systemctl start sshd报 not found → 改用ssh.service(或ssh.socket)。- sshd 起不来多为缺主机密钥(
ssh-keygen -A)或/run/sshd目录不存在。 - 若
ss -tlnp | grep :22显示127.0.0.1:22,需改/etc/ssh/sshd_config的ListenAddress 0.0.0.0才能从虚拟网进来。
六、家里连接方法(SSH/windows自带的远程连接)
6.1 SSH 连办公室 WSL
隧道通后(EasyTier),在家里节点执行:
ssh usera@192.168.10.10说明:WSL 内 sshd 监听
22;(可以按需改为高位不常用端口)
6.2 windows远程连接办公室宿主
在家里的PC(已连接easytier节点)执行:
# 使用命令行进行远程桌面连接 或者使用GUI
mstsc /v:192.168.10.10:23389- 端口填
23389(不是 13389); - WSL 内服务仍走各自虚拟 IP 端口。
八、排错汇总
| 现象 | 原因 | 处理 |
|---|---|---|
EasyTier 手动启动报 Address in use | easytier@default 已占 11010 | 停用 default 实例,或改配置后 systemctl restart |
| wsl虚拟 IP 会变 | 未配 dhcp=false / 未指定 ipv4 | 同时设置 ipv4="..." + dhcp=false |
socat 报 Address already in use | 监听端被占(尤其用了 13389 与宿主 RDP 冲突) | 换监听端口(如 23389),或 ss -tlnp | grep 23389 找占用 |
socat 报 Cannot assign requested address | EasyTier TUN 接口没起来,192.168.10.10 不存在 | 确认 EasyTier 运行,ip addr show | grep 192.168.10.10 |
WSL 内 127.0.0.1:13389 不通 | 非镜像模式(NAT 隔离),localhost 不共享 | 改用「宿主反向隧道」方案(宿主主动连 WSL,绕开 iOA 入站拦截) |
家里 tnc 不通 | EasyTier 未连上 / 家里不在同一网络 | 检查 easytier-cli peer 是否 p2p 通 |
systemctl start sshd 报 not found | unit 名是 ssh.service | 改用 systemctl start ssh |
| sshd 起不来 | 缺主机密钥 / 缺 /run/sshd 目录 | ssh-keygen -A + mkdir -p /run/sshd |
ssh 只监听 127.0.0.1:22 | sshd_config 默认绑定回环 | 改 ListenAddress 0.0.0.0 |
九、关键结论(坑点记录)
- EasyTier 固定 IP 两件套:
ipv4 = "..."与dhcp = false必须同时设置,否则虚拟 IP 会漂移。 - 停用 default 实例:安装脚本默认拉起的
easytier@default会占用 11010 端口,新实例必须先停掉它。 - 镜像模式是 RDP 方案的基石:
networkingMode=mirrored让 WSL 的 localhost 与宿主共享,这是绕开 iOA 拦截、无需宿主装软件的关键。 - 不要用 13389 做 socat 监听端:镜像模式共享网络栈,与宿主 RDP 的
0.0.0.0:13389冲突。 bind=192.168.10.10必须显式指定:避免端口暴露到公司局域网,也避免与宿主端口冲突。- 依赖 EasyTier 服务:
rdp-forward.service用Requires=easytier@office.service保证 EasyTier 重启时转发自动重建。 - ssh 的 unit 名是
ssh.service**:不是sshd.service;首次需ssh-keygen -A+/run/sshd目录。