Tailscale 是一款基于 WireGuard 协议的零配置 VPN(虚拟专用网络)工具,它让你可以轻松地将分散在不同地点的设备(手机、PC电脑、服务器 等)组成一个安全的私有网络,就像它们连接在同一台交换机上一样。

在紧密型医疗体环境下,各分院区需要互联互通,实验场景模拟就是A院区业务部门与B院区业务部门,业务上的一个互联互通。
用Tailscale:设备 A ↔ 设备 B 直连(去中心化,延迟低,无法被中间人窃听)。

由于VMVare虚拟机最多只支持一个NAT网络,所以本实验选择VirtualBox虚拟软件来实现。


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


安装Tailscale,我使用的是Ubuntu系统,运行如下指令
sudo curl -fsSL https://tailscale.com/install.sh | sh 两台虚拟机均需安装。
安装完成后,运行 tailscale version 显示运行版本信息。

启动tailscale,运行指令 sudo tailscale up

使用给出的的连接进行账号登录

点击连接设备

可以看到,两台主机都已经是Connected的状态了,就可以相互之间进行通讯了。
在两台机器运行指令 tailscale status 可以查看相应的运行状态。

使用ping命令,双方可以ping通,就可以进行通信使用了。

上面虽然已经实现了互相通讯,但都需要在tailscale服务器上面注册相关信息,并进行中继通信,距离我们完全自主可靠的方案还有差距,下面我们来实现。
运行以下指令时,进行安装:
cd /tmp
sudo wget --output-document=headscale.deb https://github.com/juanfont/headscale/releases/download/v0.28.0/headscale_0.28.0_linux_amd64.debsudo 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 初始化用户与预授权密钥:
# 创建用户(命名空间)
sudo headscale users create admin
# 查看用户信息
sudo headscale users list
# 生成预授权密钥(供客户端自动注册,无需网页认证)
sudo headscale preauthkeys create --user 用户ID --reusable --expiration 24h
# 查看已注册节点
sudo headscale nodes list 

首先,先清除之前使用官方控制服务器的相关配置,可查找相关方法。
我是直接卸载并重新安装了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/tailscalesudo rm -rf /var/run/tailscalesudo rm -f /etc/apt/sources.list.d/tailscale.listsudo 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服务。

下面进行验证通讯,至此全部安装完成。
