一、什么是异地组网?

简单来说,就是让**不同地点的设备**像在**同一个局域网**一样互相访问。

比如:公司电脑直接访问家里的 NAS、打印机、摄像头,用 192.168.x.x 就行,无需公网 IP、无需端口映射。

二、方案选型

方案

特点

WireGuard 手配

纯手动,配置复杂,NAT 穿透差

ZeroTier

简单,但依赖第三方服务

Tailscale + Headscale

自建控制端,数据自主可控,强烈推荐

我们采用 Headscale + Tailscale

  • Headscale:部署在自己的云服务器上,负责协调设备互联

  • Tailscale:安装在各个设备上的客户端,负责建立加密隧道

三、准备条件

  • 一台带公网 IP 的云服务器(本文以腾讯云 CentOS 为例)

  • 一个域名(本文使用 headscale.example.net

  • 待组网的设备:OpenWrt 路由器、Linux、Windows 均可

四、安装 Headscale

1. 安装 Docker(已经安装可以忽略)

dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

systemctl enable docker --now

2. 创建目录结构

mkdir -p /opt/headscale/{config,data,cache,run,certs}
cd /opt/headscale

3. 配置 Headscale

创建文件:config/config.yaml

server_url: https://headscale.example.net:54443
listen_addr: :54443
tls_cert_path: /certs/fullchain.pem
tls_key_path: /certs/key.pem

derp:
  server:
    enabled: true
    stun_listen_addr: "0.0.0.0:3478"
    ipv4: <你的公网IP>

prefixes:
  v4: 100.64.0.0/10

注意:替换 <你的公网IP> 为实际 IP,证书文件通过 acme.sh 申请后放入 ./certs/ 目录。

4. 创建 docker-compose.yml

version: "3.8"
services:
  headscale:
    image: headscale/headscale:latest
    container_name: headscale
    restart: always
    network_mode: host
    command: serve
    volumes:
      - ./config/config.yaml:/etc/headscale/config.yaml
      - ./data:/var/lib/headscale
      - ./cache:/var/lib/headscale/cache
      - ./run:/var/run/headscale
      - ./certs:/certs:ro
    environment:
      - TZ=Asia/Shanghai

5. 启动与放行端口

docker compose up -d

云服务器安全组放行:TCP:54443UDP:3478UDP:50443

6. 创建用户

docker exec headscale headscale users create default

五、接入设备

Windows

reg add "HKLM\SOFTWARE\Tailscale IPN" /v LoginURL /t REG_SZ /d "https://headscale.example.net:54443" /f
net stop Tailscale && net start Tailscale

Linux

tailscale up --login-server=https://headscale.example.net:54443

OpenWrt

tailscaled --state=/etc/tailscale/tailscaled.state --socket=/var/run/tailscale/tailscaled.sock &

tailscale --socket=/var/run/tailscale/tailscaled.sock up \

  --login-server=https://headscale.example.net:54443 \

  --advertise-routes=192.168.10.0/24

六、批准设备

拿到设备注册的 URL 后,在服务器执行:

docker exec headscale headscale auth register --auth-id <密钥> --user default

七、验证

tailscale status

看到 100.64.x.x 的 IP 就说明接入成功。不同设备间用虚拟 IP 即可互访。