在家远程访问办公室电脑(受腾讯iOA限制)综合方案:EasyTier 组网

一、背景与目标

背景,办公室电脑:

  1. 被腾讯ioa管控,非白名单软件无法联网。
  2. rustdesk等远控软件无法安装(ACL限制)
  3. wsl可以安装,且无网络限制
  4. 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 虚拟 IP192.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 组网与安装

前提:

  1. 你已经有easytier服务,或者使用网络上别人免费提供节点(比如 tcp://sh.vomiku.com:7910,来源 https://github.com/orgs/EasyTier/discussions/1909,自行甄别是否安全)
  2. 家里的电脑已经安装easytier,并加入了服务器节点

3.1 确定虚拟网段

  • 虚拟网段自定义,此教程用 192.168.10.0/24。

3.2 安装

  1. (官方 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,下面直接复用,无需手写。

  1. 官网下载安装 https://easytier.cn/guide/installation.html

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.conf

office.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 = false

3.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 peer

3.5 固定 IP 验证

# sudo systemctl restart easytier@office
sudo /opt/easytier/easytier-cli peer   # 本机应稳定显示 192.168.10.10

3.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

预期结果:

命令预期输出
注册表 PortNumber13389
netstat / Get-NetTCPConnection0.0.0.0:13389 LISTENING
tnc 127.0.0.1 -Port 13389TcpTestSucceeded : True
Get-Service TermServiceStatus : 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=true

4.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/socat

4.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 useeasytier@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 addressEasyTier 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 foundunit 名是 ssh.service改用 systemctl start ssh
sshd 起不来缺主机密钥 / 缺 /run/sshd 目录ssh-keygen -A + mkdir -p /run/sshd
ssh 只监听 127.0.0.1:22sshd_config 默认绑定回环改 ListenAddress 0.0.0.0

九、关键结论(坑点记录)

  1. EasyTier 固定 IP 两件套:ipv4 = "..." 与 dhcp = false 必须同时设置,否则虚拟 IP 会漂移。
  2. 停用 default 实例:安装脚本默认拉起的 easytier@default 会占用 11010 端口,新实例必须先停掉它。
  3. 镜像模式是 RDP 方案的基石:networkingMode=mirrored 让 WSL 的 localhost 与宿主共享,这是绕开 iOA 拦截、无需宿主装软件的关键。
  4. 不要用 13389 做 socat 监听端:镜像模式共享网络栈,与宿主 RDP 的 0.0.0.0:13389 冲突。
  5. bind=192.168.10.10 必须显式指定:避免端口暴露到公司局域网,也避免与宿主端口冲突。
  6. 依赖 EasyTier 服务:rdp-forward.service 用 Requires=easytier@office.service 保证 EasyTier 重启时转发自动重建。
  7. ssh 的 unit 名是 ssh.service**:不是 sshd.service;首次需 ssh-keygen -A + /run/sshd 目录。