自建DERP服务器提升Tailscale连接速度(使用Nginx转发)

官方文档里,DERP服务器默认是直接占用443端口的,但是我的服务器上已经有了Nginx服务,因此好一顿折腾,终于成功了。

安装DERP

我没有使用 Docker 镜像,而是直接二进制+systemd的方式安装的(首先你得分配一个域名指向这个机器):

# go install tailscale.com/cmd/derper@latest
# cp ~/go/bin/derper /usr/local/bin/

然后编辑/etc/systemd/system/derper.service

[Unit]
Description=My Derper Service
After=network.target

[Service]
ExecStart=/usr/local/bin/derper -hostname=<域名,后面还会用> -a :30001 -http-port 30001 -stun-port 3478 -verify-clients
Restart=on-failure
User=root

[Install]
WantedBy=multi-user.target

然后systemctl enable derper && systemctl start derper

配置Nginx

增加如下Nginx配置文件:

server {
    listen 80;
    listen 443 ssl;
    server_name <域名>;

    access_log <Nginx 日志路径>;
    error_log <Nginx 错误日志路径>;

    ssl_certificate <Let's Encrypt 证书路径>;
    ssl_certificate_key <Let's Encrypt 证书私钥路径>;

    location / {
        client_max_body_size 1G;

        # websockets
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        # other settings
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:30001;
    }
}

请注意,这里 WebSocket 的配置是必须的,否则 Tailscale 无法正常工作,我掉到这个坑好久才爬出来。

参考掉坑 issue: https://github.com/tailscale/tailscale/issues/4072

配置 ACL 规则

打开 tailscale 的管理页面,添加 ACL 规则,允许你的域名访问 DERP 服务器。

ssh 同级,添加:

// Define private derp
"derpMap": {
    "omitDefaultRegions": false,
    "regions": {
        "901": {
            "regionID":   901,
            "regionCode": "MyHK",
            "regionName": "My HongKong",
            "nodes": [
                {
                    "name":     "myhk",
                    "regionID": 901,
                    "hostName": "<域名>",
                    "DERPPort": 443,
                    "IPv4":     "<机器IP>",
                    "IPv6":     "none", // 如果你的服务器没有 IPv6
                    //"InsecureForTests": true,
                    "STUNPort": 3478,
                },
            ],
        },
    },
},

// ssh...

然后重启 tailscaled 服务,systemctl restart tailscaled

就可以使用自有 DERP 服务器了,速度飞起。


更多文章
  • FreeBSD 使用 vm-bhyve 安装Debian虚拟机
  • FreeBSD 和 Linux 网卡聚合实现提速
  • GPT 帮我搞定了时区转换问题
  • 长任务系统如何处理?
  • macOS/Linux 编译 InputLeap
  • 使用开源软KVM - synergy-core
  • 解决 macOS 终端hostname一直变化问题
  • KVM 共享 Intel 集成显卡
  • PromQL 备忘
  • 读《格鲁夫给经理人的第一课》
  • 读《打开心智》
  • 为什么要把复杂的联表操作拆成多个单表查询?
  • 红包系统的设计
  • 2022年终总结
  • MySQL Index Condition Pushdown Optimization