· 3 min read

使用 NAT VPS 作为 SD-WAN 中继

ZeroTier 和 TailScale 是我目前正在同时使用的 SD-WAN 组网工具。这次购入了一台 NAT VPS,准备用它中继 ZeroTier 和 TailScale。

诉苦

由于工作需要,我已经好几个月使用 SD-WAN 在公司和宿舍组建了 SD-WAN,可是国内网络环境实在是不友好,公司网络质量也差,我忍受了很久的随机掉线的问题,近两个月我改用手机热点避免了这个问题,但是只能在开发后端时使用,如果开发前端或者是对生产环境进行部署与验证时,访问线上环境需要几百兆流量,我吃不消哇,频繁切换 Wi-Fi 接入点也不是个令人愉快的事。但天无绝人之路,我兜兜转转购入了一台香港的 NAT VPS,规划用于中继 SD-WAN。

方案

步骤

重装系统

// TODO:

ZeroTier 中继

VPS 上安装步骤

安装 ZeroTier 客户端

yay -S zerotier-one

启动服务

sudo systemctl enable zerotier-one
sudo systemctl start zerotier-one

加入网络

打开官方 planet 面板:ZeroTier Central,复制你的网络 ID,然后:

sudo zerotier-cli join <your_network_id>

回到面板,授权刚刚加入的节点。

转换为 Moon

生成 moon 配置

sudo zerotier-idtool initmoon identity.public | sudo tee -a  moon.json

输出示例:

{
  "id": "9axxxxxx12",
  "objtype": "world",
  "roots": [
    {
      "identity": "9axxxxxx12:0:258xxxxxx38b34a2fa88b46d290137a6ecb3a185dacdaee957c30e33f1977ca7e",
      "stableEndpoints": []
    }
  ],
  "signingKey": "df18369fxxxxxx70036a356c",
  "signingKey_SECRET": "b1524155faa6f779b8xxxxxxf811f711fed",
  "updatesMustBeSignedBy": "df18369f3b54xxxxxx036a356c",
  "worldType": "moon"
}

"stableEndpoints": [] 中添加 "<server_ip>/<server_nat_port>",其中 server_ip 是你的公网地址,server_nat_port 是 NAT 后的外网端口。示例如下:

{
  //...
  "roots": [
    {
      "identity": "9axxxxxx12:0:258xxxxxx38b34a2fa88b46d290137a6ecb3a185dacdaee957c30e33f1977ca7e",
      "stableEndpoints": ["1.2.3.4/19993"]
    }
  ]
  //...
}

生成 .moon 文件:

sudo zerotier-idtool genmoon moon.json

执行完成后,可以在当前目录中看到 .moon 文件:

ls -l | grep *.moon

将生成的 .moon 文件移动到 ./moons.d 目录中:

sudo mkdir moons.d
sudo mv 000000xxxxxxxxxx.moon moons.d

重启 ZeroTier 服务

sudo systemctl restart zerotier-one

使用 ZeroTier 中继

前面生成的 “000000xxxxxxxx.moon” 文件,除去后缀 .moon 外就是 Moon ID,前面的零没啥用,把后面的内容放到下面的命令中,两个参数都是 Moon ID。

 sudo zerotier-cli orbit xxxxxxxxxx xxxxxxxxxx

问题排查

无法加入网络

sudo zerotier-cli join xxxxxxxxxxxx
# outputs:
# zerotier-cli: missing port and zerotier-one.port not found in /var/lib/zerotier-one

原因:没有启动服务

无法初始化 moon

 sudo zerotier-idtool initmoon identity.public | sudo tee -a  moon.json
# outputs:
# identity.public is not a valid identity

原因:没有启动过服务。第一次启动后 ZeroTier 会创建 identity.public 文件。

Back to Blog

Related Posts

View All Posts »
搭建日常使用的 Arch Linux

搭建日常使用的 Arch Linux

有了上次快速安装步骤后,接下来就是使用这个环境了。要使用环境,首先需要做一些初始化操作。我的步骤适合我,但不一定适合你,只是记录和参考。

安装并配置 Arch Linux

安装并配置 Arch Linux

又到了新装 Arch Linux 的日子了。这次又是温故而知新的机会,把之前写的笔记稍微整理了一下,在这里记录下教徒搭窝的备忘录。

使用 Verdaccio 自建 Node 存储库

使用 Verdaccio 自建 Node 存储库

作为靠着 JavaScript 生态吃饭的 Web 开发者,自建一个 Node regsitry 是很有必要的,我这次继续选择 Verdaccio 来搭建存储库。这次使用 Docker Compose 部署 Verdaccio,并将 Caddy 用于反向代理该服务。