一、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服务。

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

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐