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
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 # 无报错即可
也可通过 tailscale ping ip验证Tailscale内网ip是否能够ping通。
注意:如果服务器上使用反向代理软件,derp的443端口一定需要修改。且服务器需放行3478端口,类型为UDP。