在我的个人网络体系中,Tailscale 一直占据着核心位置。随着使用时间的增长,其在跨网络访问、远程开发、内网服务暴露等场景中的作用愈发明显。

将近两年前,我曾在华为云环境部署过自定义 DERP 中继节点(自部署Tailscale DERP中继服务器实践分享 | 光溯星河),以改善复杂网络条件下的连接质量。但随着服务器到期,该节点也随之下线,之后一段时间内未再维护相关设施。

去年趁阿里云99计划加了台新的轻量,但一直有其他的事情就放着没管。后来尝试了几次部署DERP都以失败告终,遇到的问题我会在后文讲,总之诸多文章都指向阿里云部署Tailscale存在诸多问题,我找了很多方案也没有真正解决的。直到这次在Codex的帮助下才完成问题排查和部署。


环境介绍

  • 云厂商:阿里云
  • 系统:Debian 11 x86_64
  • Tailscale版本:1.62.x
  • Go环境版本:1.22.x

部署流程

1. 安装 Tailscale

curl -fsSL https://tailscale.com/install.sh | sh
tailscale up

2. 安装 Go

wget https://go.dev/dl/go1.22.x.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.22.x.linux-amd64.tar.gz

3. 安装 DERPer

go install tailscale.com/cmd/derper@latest
go build -o /usr/local/bin/derper tailscale.com/cmd/derper

4. 服务配置

[Unit]
Description=Tailscale DERP Server
After=network.target

[Service]
ExecStart=/usr/local/bin/derper -hostname <your-domain-or-ip> -a :<port>
Restart=always
User=root

[Install]
WantedBy=multi-user.target

核心问题:443 端口连接被重置(RESET)

1. 问题表现

  • HTTPS 访问直接被 reset
  • curl 报错 SSL_connect reset
  • DERP 无法建立 TLS

该问题与“域名 + 443”强相关,反复排查后强烈怀疑阿里云防火墙或其它拦截机制导致的问题,对于已经备案的域名也会导致该问题。

由此导致标准方案失效:

  • Let's Encrypt 不可用
  • 标准 HTTPS DERP 不可用

2. 解决方案(折中)

放弃继续排查 443 问题,优先保证系统可用性。

使用 IP + 自定义端口

derper -a :8443

使用自签证书

openssl req -x509 ...

DERP Map 使用 IP

"HostName": "<server-ip>",
"DERPPort": 8443

网络问题排查

经典环节,不多讲。避免直接删除 iptables,应使用:

tailscale up --accept-routes=false

配置 DERP Map

tailslcale控制台配置。

"derpMap": {
  "OmitDefaultRegions": false,
  "Regions": {
    "901": {
      "RegionID": 901,
      "Nodes": [
        {
          "HostName": "<ip>",
          "DERPPort": 8443
        }
      ]
    }
  }
}

验证生效。

参考阅读