Tailscale异地组网及derp中继服务器搭建

1. 前言

Tailscale 是一种用于在互联网上安全连接设备的网络即服务 (NaaS) 产品。它可以帮助您轻松地将您的设备连接到一个虚拟网络中,无论它们位于何处。Tailscale 使用 WireGuard 协议进行加密,提供强大的安全性和可靠性。
Tailscale 可以帮你实现内网穿透、异地组网、远程访问等功能,采用中转和P2P传输。打通内外网!适用于NAS用户,和朋友自建游戏服务器等,其功能与zerotier类似。

2. Tailscale客户端使用

2.1 Windows客户端

2.2 Android客户端

2.3 Linux客户端

3. Derp服务器搭建

3.1 IP搭建

tailscale需要1.23版本golang
apt install golang-1.23
设置一下环境变量:
export PATH=$PATH:/usr/lib/go-1.23/bin
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/go-1.23/bin
go version
go version go1.23.4 linux/amd64
​
这时候如果直接用go install会不成功,还是众所周知的原因,所以先配个代理:
然后运行tailscale的官方安装命令:
go env -w GOPROXY=https://goproxy.cn,direct
go install tailscale.com/cmd/derper@latest
安装就完成了。现在derper命令在~/go/bin下,可以直接拷到任意目录,例如/usr/bin下
sudo cp ~/go/bin/derper /usr/bin/
​
接下来就是配置,首先生成证书,证书是必须的,因为tailscale走的SSL加密。但是不是网上那种只有3个月的免费证书或者花钱买的证书,而是自己做的证书,可以是10年,因为这个证书只是用来加密数据的(等同于密码),所以不存在什么
​
安全问题,但是这个证书需要包含IP信息:
DERP_IP=127.0.0.1
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout ${DERP_IP}.key -out ${DERP_IP}.crt -subj "/CN=${DERP_IP}" -addext "subjectAltName=IP:${DERP_IP}"
​
cp ~/go/bin/derp /etc/
​
derper --hostname="47.108.147.41" -a :33445 -http-port 33446 -certmode manual -certdir ~/go/bin/47.108.147.41.key
 
sudo vim /etc/systemd/system/derp.service
​
/etc/systemd/system/derp.service
[unit]
Description=TS Derper
After=network.target
Wants=network.target
[Service]
User=root
Restart=always
ExecStart=/usr/bin/derper -hostname="IP" -a :33445 -http-port -1 -certmode manual -certdir /home/zerox/derp
RestartPreventExitStatus=1
[Install]
WantedBy=multi-user.target
    
# 运行服务
sudo systemctl enable derp
sudo systemctl start derp
sudo systemctl status derp
​
# 
derp.service - TS Derper
     Loaded: loaded (/etc/systemd/system/derp.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2025-02-16 01:33:38 CST; 27s ago
   Main PID: 36198 (derper)
      Tasks: 7 (limit: 2173)
     Memory: 3.3M
     CGroup: /system.slice/derp.service

image-20250305205402230

Tailscale的ACL添加

"derpMap": {
        "OmitDefaultRegions": true, //加入这个会只用自己的节点
        "Regions": {
            "901": {
                "RegionID":   901,
                "RegionCode": "Derp",
                "RegionName": "Derp A",
                "Nodes": [
                    {
                        "Name":             "901a",
                        "RegionID":         901,
                        "HostName":         "derp.domain.com",
                        "DERPPort":         33445, //改成自己的端口
                        "IPv4":             "0.0.0.0", //改成自己的IP
                        "InsecureForTests": true,
                        "STUNPort":         3478,
                    },
                ],
            },

3.2 采用域名搭建

直到证书申请都与IP搭建步骤相同,然后为域名申请SSL证书,可以直接给*.domain.com的泛域名申请。证书文件若为.pem将后缀改为derp.domain.com.crt/derp.domain.com.key,域名为你自己的域名。derp.service有所改动。

[Unit]
Description=TS Derper
After=network.target
Wants=network.target
​
[Service]
User=root
Restart=always
ExecStart=/usr/bin/derper -a :33445 -http-port -1 -hostname=derp.domain.com -certmode manual -certdir /etc/derp
RestartSec=5
StartLimitInterval=0
​
[Install]
WantedBy=multi-user.target

4. 验证derp是否搭建成功

在安装了Tailscale的主机上运行

tailscale netcheck # UDP与IPV4正常
tailscale status # 无报错即可

image-20250305205955369

也可通过 tailscale ping ip验证Tailscale内网ip是否能够ping通。

注意:如果服务器上使用反向代理软件,derp的443端口一定需要修改。且服务器需放行3478端口,类型为UDP。

5. 参考资料

  1. Tailscale DERP 服务器部署指南_derp服务器-CSDN博客
  2. 浅探 Tailscale DERP 中转服务 | Kiprey's Blog
  3. Tailscale 搭建derp中继节点,不需要域名,不需要备案,不需要申请证书(最新) - yafeng - 博客园