适用场景
- 群晖、威联通、Unraid 等支持 Docker 的 NAS,或已经在用 Docker 的 Linux 服务器。
- 一个容器运行一条隧道;要跑多条隧道,就开多个容器。
注意: 网云穿目前没有发布官方 Docker 镜像。本教程使用“官方 Linux 客户端 + 通用 alpine 镜像”的方式,不需要任何第三方镜像。网上搜到的同名镜像都不是官方的,请不要使用。
如果你的 Linux 支持 systemd(多数服务器都支持),更推荐按 Linux 客户端教程 安装:一个服务就能跑多条隧道,还能在官网“设备”页远程管理。Windows 电脑请直接用 图形客户端,不建议用 Docker Desktop。
前置条件
- 已在控制台创建好隧道,并填好“内网地址”和“端口”。还没有隧道请先看 第一次使用。
- 已复制这条隧道的客户端令牌:控制台左侧点“隧道”,在这条隧道右侧点“连接凭证”,在弹出的“客户端令牌”窗口复制。
- 能用 SSH 登录 NAS 或服务器,并且有 root 或 sudo 权限。
- 已安装 Docker:执行
docker version,能看到版本号即可。
操作步骤
第 1 步:查看设备的 CPU 架构
SSH 登录后执行:
uname -m
记下输出,下一步按它选择下载地址:
uname -m 输出 |
选择的下载项 |
|---|---|
x86_64 |
linux-x86_64-tar-gz |
aarch64 或 arm64 |
linux-arm64-tar-gz |
armv7l |
linux-armv7-tar-gz |
i386 或 i686 |
linux-x86-tar-gz |
第 2 步:下载官方 Linux 客户端
依次执行下面的命令(示例是 x86_64,其他架构把地址里的 linux-x86_64-tar-gz 换成上表对应的那一项):
sudo mkdir -p /opt/wyc-client/
cd /opt/wyc-client/
sudo wget -O wyc-client.tar.gz "https://update.too1.net/d/wyc/stable/linux-service/linux-x86_64-tar-gz?source=wyc_official"
sudo tar -xzf wyc-client.tar.gz
sudo chmod +x ./wyc-client
./wyc-client version
成功后会看到一行类似 wyc-client 8.0.11 commit=… 的版本信息。
- 提示
wget: command not found:把第三行换成sudo curl -L -o wyc-client.tar.gz "上面的地址"。 - 想核对文件是否完整:执行
sha256sum wyc-client.tar.gz,结果应与 下载页 该文件的 SHA256 完全一致。
第 3 步:确认“内网地址”填对了
本教程的容器使用 --network host(主机网络),容器里的 127.0.0.1 就是这台 NAS 本身。按下表核对控制台里这条隧道的“内网地址”和“端口”:
| 你要发布的服务在哪里 | 内网地址填 | 端口填 |
|---|---|---|
| 就在这台 NAS 上(例如 NAS 管理页、NAS 上的网站) | 127.0.0.1 |
服务的端口,例如 5000 |
| 在这台 NAS 的另一个 Docker 容器里 | 127.0.0.1 |
该容器用 -p 映射到 NAS 的端口 |
| 在局域网的另一台电脑或设备上 | 那台设备的局域网 IP,例如 192.168.1.20 |
那台设备上服务的端口 |
先在 NAS 上测一下服务能不能访问(地址和端口换成你的):
curl -I http://127.0.0.1:5000
成功后会看到 HTTP/1.1 200、302 之类的响应头。如果显示 Connection refused,说明服务没启动或端口不对,先解决这个再继续。TCP 类服务(如 SSH)可以跳过这一步,直接在第 5 步验证。
第 4 步:启动容器
把下面命令里的 把这里换成你的客户端令牌 换成第“前置条件”里复制的令牌(保留两边的单引号),然后整段复制执行:
sudo docker run -d \
--name wyc-tunnel \
--restart unless-stopped \
--network host \
-e WYC_TUNNEL_TOKEN='把这里换成你的客户端令牌' \
-e WYC_CLIENT_INSTANCE_ID=docker-wyc-tunnel \
-v /opt/wyc-client/wyc-client:/usr/local/bin/wyc-client:ro \
alpine:3.20 \
/usr/local/bin/wyc-client run
每一行的作用:
| 参数 | 作用 |
|---|---|
--name wyc-tunnel |
容器名字,后面看日志、重启都用它;多条隧道请起不同名字 |
--restart unless-stopped |
容器意外退出或 NAS 重启后自动启动;手动 docker stop 后不再自动启动 |
--network host |
使用主机网络,容器里的 127.0.0.1 就是 NAS 本身 |
WYC_TUNNEL_TOKEN |
这条隧道的客户端令牌 |
WYC_CLIENT_INSTANCE_ID |
给这个容器一个固定标识,容器重启后能被认作同一个客户端,避免被当成“另一个连接”。每个容器用不同的值 |
-v …:ro |
把第 2 步下载的客户端放进容器,只读 |
alpine:3.20 |
通用的精简 Linux 镜像,只用来运行客户端 |
/usr/local/bin/wyc-client run |
在容器里启动客户端 |
第 5 步:查看日志,确认连上了
sudo docker logs -f wyc-tunnel
成功后会看到类似下面的内容:
10:30:12 隧道已连接:办公网站
访问地址:https://xxxx.example.com
内网地址:127.0.0.1:5000
按 Ctrl+C 退出日志查看,容器会继续运行。然后用手机关掉 Wi-Fi、用流量打开日志里的“访问地址”;TCP 隧道用对应软件(如 SSH 客户端)连接控制台显示的公网地址和端口。
日常管理
| 要做的事 | 命令 |
|---|---|
| 看最近 100 行日志 | sudo docker logs --tail 100 wyc-tunnel |
| 查看是否在运行 | sudo docker ps --filter name=wyc-tunnel |
| 重启 | sudo docker restart wyc-tunnel |
| 暂停这条隧道 | sudo docker stop wyc-tunnel |
| 删除容器 | sudo docker rm -f wyc-tunnel |
更换令牌(例如在控制台点了“更换令牌”):先 sudo docker rm -f wyc-tunnel,再用新令牌重新执行第 4 步。
更新客户端:重新执行第 2 步下载新版,然后 sudo docker rm -f wyc-tunnel,再执行第 4 步。
再加一条隧道:重新执行第 4 步,把 --name 和 WYC_CLIENT_INSTANCE_ID 都换成新的名字(例如 wyc-ssh、docker-wyc-ssh),令牌换成另一条隧道的。
喜欢用 docker compose
在 /opt/wyc-client/ 下新建 docker-compose.yml,内容如下(令牌同样要替换):
services:
wyc-tunnel:
image: alpine:3.20
container_name: wyc-tunnel
restart: unless-stopped
network_mode: host
environment:
WYC_TUNNEL_TOKEN: "把这里换成你的客户端令牌"
WYC_CLIENT_INSTANCE_ID: docker-wyc-tunnel
volumes:
- /opt/wyc-client/wyc-client:/usr/local/bin/wyc-client:ro
command: ["/usr/local/bin/wyc-client", "run"]
在同一目录执行 sudo docker compose up -d 启动,sudo docker compose logs -f 看日志。
用 NAS 的 Docker 图形界面
如果不方便用命令,可以在 NAS 自带的 Docker/容器管理界面新建容器,对应填写:镜像 alpine:3.20;网络选“host/主机”;环境变量 WYC_TUNNEL_TOKEN 和 WYC_CLIENT_INSTANCE_ID;把 NAS 上的 /opt/wyc-client/wyc-client 文件映射到容器的 /usr/local/bin/wyc-client(只读);启动命令 /usr/local/bin/wyc-client run;勾选自动重启。第 2 步的下载仍需在 SSH 里完成。
成功检查
sudo docker ps --filter name=wyc-tunnel能看到状态是Up。- 日志里出现“隧道已连接”,访问地址与控制台一致。
- 手机流量能打开网站,或能用对应软件连上 TCP 服务。
- 重启一次 NAS,开机后不用手动操作,容器自动运行、日志再次显示“隧道已连接”。
常见错误
| 你看到的 | 原因 | 怎么办 |
|---|---|---|
exec format error |
下载的架构不对 | 回到第 1 步核对 uname -m,重新下载对应的包 |
| 日志显示“隧道令牌无效或已更换”,容器反复重启 | 令牌复制错了,或在控制台更换过令牌 | 在“连接凭证”里复制最新令牌,删除容器后重新执行第 4 步 |
| 日志显示“缺少隧道令牌” | 命令里漏了 -e WYC_TUNNEL_TOKEN=… |
补上后重新执行第 4 步 |
| 日志显示“这条隧道已在另一个连接中运行” | 同一条隧道已经在别的电脑或客户端上运行 | 先停掉另一处的客户端;容器会自动重试 |
| 隧道已连接,但访问报 502 或打不开 | 内网地址或端口填错,或服务没启动 | 回到第 3 步,在 NAS 上用 curl 测试,修改控制台里的内网地址后等几秒再试 |
| 日志显示“隧道已到期” | 套餐到期 | 在控制台续费后容器会自动重连,必要时 docker restart |
| 执行 docker 命令提示 permission denied | 当前账号没有 Docker 权限 | 命令前加 sudo,或切换到 root |
令牌相当于这条隧道的钥匙,执行过的命令和 docker inspect 都能看到它。不要把命令截图发到群里;怀疑泄露时在控制台“连接凭证”里点“更换令牌”,再按上面的方法重建容器。
相关教程
第一次使用 · Linux 客户端(systemd) · 协议怎么选 · 访问故障排查