一、什么是异地组网?
简单来说,就是让**不同地点的设备**像在**同一个局域网**一样互相访问。
比如:公司电脑直接访问家里的 NAS、打印机、摄像头,用
192.168.x.x就行,无需公网 IP、无需端口映射。
二、方案选型
我们采用 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 --now2. 创建目录结构
mkdir -p /opt/headscale/{config,data,cache,run,certs}
cd /opt/headscale3. 配置 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/Shanghai5. 启动与放行端口
docker compose up -d云服务器安全组放行:
TCP:54443、UDP:3478、UDP: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 TailscaleLinux
tailscale up --login-server=https://headscale.example.net:54443OpenWrt
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 即可互访。
原创
自建 Tailscale 异地组网:入门篇
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法