小飞
发布于 2026-03-14 / 2 阅读
0
0

Ubuntu 环境下 IPv6 远程接入与 ZeroTier 私有 Planet 节点部署指南

1. 文档概述

本文档旨在规范和指导在全新 Ubuntu Linux 环境下,通过 IPv6 网络实现 SSH 远程直连,并完成 ZeroTier 客户端安装、私有 Planet 节点配置及虚拟局域网接入的标准流程。

  • 适用环境: Ubuntu 25.10 (或类似 Debian 系发行版)

  • 前置条件:

    • 服务器已分配公网 IPv6 地址(基于 SLAAC 或 DHCPv6)。
    • 本地操作端需具备 IPv6 网络环境。
    • 已备好编译完成的私有 planet 配置文件。
    • 操作终端推荐:MobaXterm。

2. 阶段一:服务器远程接入配置 (IPv6 + SSH)

2.1 获取并识别目标 IP 地址

在新装系统上,需获取用于公网访问的 IPv6 地址。

  • 操作命令: ip -6 aip -6 addr show ens2

  • 地址识别 (关键坑点):

    • 公网地址 (scope global): 例如 2409:8a28:...。这是由运营商下发前缀结合物理 MAC 地址生成的公网可达地址,必须使用此地址进行 SSH 连接
    • 链路本地地址 (scope link): 例如 fe80::...。这是局域网内部路由寻址使用的保留地址,无法跨网段通信,不可用于外网直连。

2.2 建立 MobaXterm SSH 连接

  1. 打开 MobaXterm,新建 SSH Session。
  2. Remote host: 填入上述获取的 scope global 级别的 IPv6 地址(无需添加 [] 括号)。
  3. Specify username: 勾选并输入系统级用户名(如 openclaw)。
  4. Port: 默认 22。点击 OK 并输入密码完成连接。

⚠️ 常见故障排除 (Troubleshooting)

  • 故障现象: MobaXterm 连接超时 (Connection timed out)。

  • 成因与解决方案:

    1. 本地网络环境不支持 IPv6: 运行 MobaXterm 的宿主机未获取到 IPv6 地址。需切换至手机热点或开启本地路由器 IPv6 功能。
    2. 上级网关防火墙拦截 (最常见): 运营商光猫或本地路由器默认开启 IPv6 入站防火墙(IPv6 Firewall SPI),导致外部主动发起的 TCP 22 端口握手被丢弃。解决: 登录网关后台,降低 IPv6 防火墙等级或针对特定设备放行。
    3. 系统级防火墙 (UFW): Ubuntu 内部防火墙未放行 SSH。解决: 执行 sudo ufw allow 22/tcp
    4. SSH 守护进程未启动: 解决: 执行 sudo systemctl status ssh 检查状态,必要时执行 sudo apt install openssh-server -y 安装。

3. 阶段二:ZeroTier 安装与私有 Planet 配置

3.1 自动化安装 ZeroTier 客户端

使用官方提供的 Bash 脚本进行静默安装:

Bash

curl -s https://install.zerotier.com | sudo bash

3.2 替换私有 Planet 配置文件

由于 ZeroTier 默认连接官方根服务器,需将其替换为自建的私有根服务器配置,以提升 P2P 打洞成功率和连接稳定性。

  1. 文件上传: 利用 MobaXterm 左侧的 SFTP 图形化界面,将本地预先准备好的 planet 文件拖拽上传至用户家目录(如 /home/openclaw/)。

  2. 备份默认配置:

    Bash

    sudo mv /var/lib/zerotier-one/planet /var/lib/zerotier-one/planet.bak
    
  3. 覆盖新配置:

    Bash

    sudo cp /home/openclaw/planet /var/lib/zerotier-one/planet
    
  4. 重置属主与权限 (关键坑点):

    Bash

    sudo chown zerotier-one:zerotier-one /var/lib/zerotier-one/planet
    sudo chmod 644 /var/lib/zerotier-one/planet
    
    • 成因说明: 如果直接由 root 或普通用户 cp 文件,文件所有者可能发生改变。ZeroTier 核心进程由 zerotier-one 用户运行,若无读权限,将导致服务启动失败或忽略该配置文件。

3.3 重启服务并验证

  • 重启命令: sudo systemctl restart zerotier-one

  • 验证节点状态: sudo zerotier-cli peers

    • 预期结果: 列表中必须出现你的私有 Planet 节点 ID,且对应 ROLE 列显示为 PLANET

4. 阶段三:网络接入与授权

4.1 加入虚拟局域网

执行加入网络命令,请求接入指定的 Network ID。

Bash

sudo zerotier-cli join 20681eabb50d23f9

⚠️ 常见故障排除 (Troubleshooting)

  • 故障现象: 执行 join <20681eabb50d23f9> 报错。
  • 成因与解决方案: IT 文档或教程中常见的尖括号 < > 仅作为“此处需替换为自定义变量”的占位符标识。在终端实际执行时,必须移除尖括号,否则 Shell 会将其误认为重定向操作符。

4.2 控制台授权 (收尾关键步骤)

终端提示 200 join OK 仅代表设备发出了接入申请,此时并未获得内网 IP

  • 操作: 必须登录 ZeroTier 控制台(如官方 Dashboard 或自建的 ztncui/ZeroUI),在网络管理页面找到新增的设备记录,勾选 Auth (授权) 选框。设备才能完成最终组网并获取虚拟局域网 IP。

5. 阶段四:验证 P2P 直连状态与网络调优 (NAT Traversal)

在设备成功加入 ZeroTier 网络并获得内网 IP 后,可以验证节点间的通信是直连 (DIRECT) 还是中转 (RELAY)

5.1 状态查询与指标解读

在你的 Ubuntu 服务器(或任意已加入该网络的终端)上执行以下命令,查看当前与其他节点的连接拓扑图:

Bash

sudo zerotier-cli peers

命令会输出一张表格,重点关注以下几个字段:

  • <ztaddr> (节点 ID): 对方设备的 10 位 ZeroTier 地址。
  • <role> (角色): PLANET(根节点/你的私有服务器)、LEAF(普通终端设备,如你的电脑或手机)。
  • <lat> (延迟): 节点间的通讯延迟。直连通常在几十毫秒内;如果超过 100ms 甚至数百毫秒,极大概率是处于中转状态。
  • <link> (链路状态 - 核心指标):
    • DIRECT(理想状态) 表示两端成功打穿 NAT,建立了 P2P 直连。此时两机通讯速度取决于双方物理宽带的上限。
    • RELAY(异常状态) 表示 P2P 打洞失败,所有数据包都在通过你的 Planet 节点进行中转转发。此时速度受限于 Planet 服务器的带宽(如果你的云服务器带宽只有 3M,那内网传输最高也就 3M)。

5.2 链路异常 (RELAY 状态) 排障方案

如果你发现你的本地电脑连接这台 Ubuntu 服务器显示为 RELAY,请按照以下顺序排查“网络打洞”失败的原因:

方案 A:放行本地防火墙的 UDP 端口 (最常见)

ZeroTier 依赖 UDP 协议进行 NAT 穿透。默认监听端口为 9993

  1. 在 Ubuntu 端: 确保 UFW 防火墙没有拦截 UDP 流量。执行以下命令显式放行:
  2. 在云服务器控制台(如果有): 如果这台 Ubuntu 是一台云服务器(如阿里云、腾讯云等),必须前往网页端的“安全组”设置,添加入站规则,放行 UDP 协议的 9993 端口

方案 B:解决严格型 NAT (Symmetric NAT) 问题

如果在两端都放行了防火墙后依然是 RELAY,通常是因为你本地电脑所处的网络环境(如部分公司的企业级路由、或者是深层级联的家用级光猫拨号路由)是对称型 NAT (Symmetric NAT),这种 NAT 类型极难被穿透。

  • 对策 1(开启 UPnP): 登录你本地网络的路由器管理后台,找到并开启 UPnP 功能。这允许 ZeroTier 客户端自动向路由器申请端口映射。
  • 对策 2(手动端口映射/Port Forwarding): 如果 UPnP 无效,在路由器后台手动设置一条端口转发规则,将外网的任意 UDP 端口转发到你本地电脑的 9993 端口。
  • 对策 3(IPv6 降维打击): 就像我们之前配置的一样,如果你两端的设备都有公网 IPv6 地址,ZeroTier 会优先通过 IPv6 建立直连,通常能完美绕过复杂的 IPv4 NAT 穿透难题。确保两端 zerotier-cli peers 列表里的 <last path> 显示的是 IPv6 地址。

评论