用tailscale实现点对点直连异地组网
是一款基于协议的零配置 VPN(虚拟专用网络)工具,它让你可以轻松地将分散在不同地点的设备(手机、PC电脑、服务器 等)组成一个安全的私有网络,就像它们连接在同一台交换机上一样。
一、tailscale是什么?
Tailscale 是一款基于 虚拟专用网络工具,它让你可以轻松地将分散在不同地点的设备(手机、PC电脑、服务器 等)组成一个安全的私有网络,就像它们连接在同一台交换机上一样。
二、实验场景
在紧密型医疗体环境下,各分院区需要互联互通,实验场景模拟就是A院区业务部门与B院区业务部门,业务上的一个互联互通。
用Tailscale:设备 A ↔ 设备 B 直连(去中心化,延迟低,无法被中间人窃听)。
三、最简单的配置
3.1 网络结构

3.2 两台虚拟机上的配置。
由于VMVare虚拟机最多只支持一个NAT网络,所以本实验选择VirtualBox虚拟软件来实现。
3.2.1打开VirtualBox 配置相应的实验环境,配置独立的NAT网络。


设置两台虚拟机分属于不同的NAT网络。
启动后进行网络测试,相互不能通讯。

3.2.2 安装配置tailscale实现点对点通讯
安装Tailscale,我使用的是Ubuntu系统,运行如下指令
- 1
sudo curl -fsSL https://tailscale.com/install.sh | sh
两台虚拟机均需安装。
安装完成后,运行 tailscale version 显示运行版本信息。
启动tailscale,运行指令 sudo tailscale up
使用给出的的连接进行账号登录
点击连接设备
可以看到,两台主机都已经是Connected的状态了,就可以相互之间进行通讯了。
在两台机器运行指令 tailscale status 可以查看相应的运行状态。
使用ping命令,双方可以ping通,就可以进行通信使用了。
四、自建服务器,实现安全可靠的通讯。
上面虽然已经实现了互相通讯,但都需要在tailscale服务器上面注册相关信息,并进行中继通信,距离我们完全自主可靠的方案还有差距,下面我们来实现。
4.1 安装Headscale控制服务器。
运行以下指令时,进行安装:
cd /tmp
sudo wget --output-document=headscale.deb https://github.com/juanfont/headscale/releases/download/v0.28.0/headscale_0.28.0_linux_amd64.deb
sudo apt install ./headscale.deb -y
编辑配置文件 /etc/headscale/config.yaml, 主要配置参数如下:
# 服务器公网访问地址(必须使用域名或公网IP,若有域名建议配置SSL)
server_url: http://10.1.6.182:8080 # 请配置成你自己的服务器IP
listen_addr: 0.0.0.0:8080
metrics_listen_addr: 0.0.0.0:9090
# 数据库配置(使用SQLite,生产环境建议PostgreSQL)
db_type: sqlite3
db_path: /var/lib/headscale/db.sqlite
# IP地址池配置(100.64.0.0/10 为CGNAT保留段)
ip_prefixes:
- 100.64.0.0/10
- fd7a:115c:a1e0::/48
# 随机化客户端端口(提高NAT穿透成功率)
randomize_client_port: true
# 禁用Magic DNS(如不需要虚拟域名解析)
dns:
magic_dns: false
nameservers:
global:
- 223.5.5.5
- 8.8.8.8
# 嵌入式DERP配置(关键部分)
derp:
server:
enabled: true # 启用内置DERP
region_id: 999 # 区域ID,自定义
region_code: "self-hosted" # 区域代码
region_name: "My DERP Server" # 显示名称
automatically_add_embedded_derp_region: true # 自动推送给客户端
# 服务器公网IP(必须填写,用于STUN和DERP)
ipv4: "10.1.6.182"
ipv6: "fd7a:115c:a1e0::/48" # 如有
# 监听端口(DERP默认使用TCP/UDP 3478 for STUN)
stun_listen_addr: "0.0.0.0:3478"
# 禁用Tailscale官方DERP(实现完全自主)
urls: []
# 如需额外独立DERP节点,在此配置路径
paths: []
# 其他优化配置
grpc_listen_addr: 0.0.0.0:50443
grpc_allow_insecure: false
acl_policy_path: ""
# Unix Socket路径(需与systemd服务匹配)
unix_socket: /var/run/headscale/headscale.sock
unix_socket_permission: "0770"
# 日志配置
log:
format: text
level: info
可以使用以下命令sudo headscale configtest,测试一下配置文件。
启动并配置自启动服务
sudo systemctl enable --now headscale
sudo systemctl status headscale
# 我遇见的坑就是默认安装这个服务启动了,一直连不上。后来发现重启一下服务就好了。
sudo systemctl restart headscale
# 检查端口监听(8080控制平面,3478 STUN,9090监控)
sudo ss -tulnp | grep headscale
有可能会遇到重启服务出错,主要原因可能就是配置文件和密钥文件权限的问题,所以要核查好文件权限问题。
-
# 1. 查看当前权限(确认问题)
ls -la /var/lib/headscale/
# 2. 修复目录所有权(假设服务以 headscale 用户运行)
sudo chown -R headscale:headscale /var/lib/headscale/
# 3. 确保权限正确
sudo chmod 750 /var/lib/headscale/
# 4. 重启服务
sudo systemctl restart headscale
# 5. 查看状态确认正常
sudo systemctl status headscale
一般本地部署就使用内置的derp中继服务器了,如有需要配置独立的DERP中继服务器的,请查阅其他相关资料,我就没有再尝试。
初始化用户与预授权密钥:
# 创建用户(命名空间)
sudo headscale users create admin
# 查看用户信息
sudo headscale users list
# 生成预授权密钥(供客户端自动注册,无需网页认证)
sudo headscale preauthkeys create --user 用户ID --reusable --expiration 24h
# 查看已注册节点
sudo headscale nodes list


4.2 在客户端进行配置
首先,先清除之前使用官方控制服务器的相关配置,可查找相关方法。
我是直接卸载并重新安装了tailscale。
# 1. 停止服务
sudo systemctl stop tailscaled
sudo systemctl disable tailscaled
# 2. 卸载软件包
sudo apt remove tailscale
# 或彻底删除(包括配置文件)
sudo apt purge tailscale
# 3. 删除残留数据和配置(可选)
sudo rm -rf /var/lib/tailscale
sudo rm -rf /var/run/tailscale
sudo rm -f /etc/apt/sources.list.d/tailscale.list
sudo rm -f /etc/apt/trusted.gpg.d/tailscale-archive-keyring.gpg
# 4. 删除网络接口(如果还存在)
sudo ip link delete tailscale0
# 5. 重新安装
sudo curl -fsSL https://tailscale.com/install.sh | sh
在自建的headscale服务器上,重新登录tailscale,执行以下命令。
sudo tailscale up --login-server=http://10.1.6.182:8080 --auth-key=预授权密钥 --accept-routes --reset
# 查看运行状态
sudo tailscale status

在第二台主机上重复上述命令,
这样就实现了本地自建控制服务器实现点对点安全可靠的通讯了。 如果提示如下图,请重新启动客户商tailscale服务。
下面进行验证通讯,至此全部安装完成。
更多推荐
所有评论(0)