go方式安装tailscale的中继服务derper

本教程推荐使用debian,里面的域名、端口等注意改成自己想要的,并前后保持一致。

1. 首先搭建好go环境

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

编辑 /etc/profile 文件加入下面几行:

export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=/home
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$GOPATH/bin

然后测试一下是否安装好了:

source /etc/profile
go version

2. 准备工作

假设你的域名是 tail.qq.com,把 fullchain.cer 改名为 tail.qq.com.crt ,与 tail.qq.com.key 放在一个文件夹里面,比如 /etc/nginx/ssl/

中继服务需要开放两个端口,一个udp一个tcp,默认是3478和443,可以自定义,比如这次我们把443换成11443(3478一般不会被占用吧)。

3. 安装derper

go install tailscale.com/cmd/derper@main

测试一下是否正常没报错

derper /?

没问题的话先启动试一下:

derper -c=/root/derper.conf -hostname=tail.qq.com -a :11443 -http-port -1 -certmode manual -certdir /etc/nginx/ssl -stun

现在访问 https://tail.qq.com:11443,如果正常会出现 This is a Tailscale DERP server 页面。

4.收尾工作

正常使用的话需要守护一下进程,比如用supervisor,增加一个常驻服务。

安装supervisor并增加一个服务:

apt -y install supervisor
nano /etc/supervisor/supervisord.conf

[program:derper]
priority=1
directory=/home/bin
command=/home/bin/derper -c=/root/derper.conf -hostname=tail.qq.com -a :11443 -http-port -1 -certmode manual -certdir /etc/nginx/ssl -stun
autostart=true
autorestart=true
redirect_stderr=true

启动服务

supervisorctl update
supervisorctl restart derper

最后去官网配置文件,访问 Tailscale

可以参考下面,全部复制粘贴改几个地方就行,其中 “OmitDefaultRegions”: true 代表只走自己的中继服务器。

{
	"Groups": {
		"group:example": ["[email protected]", "[email protected]"],
	},
	"Hosts": {
		"example-host-1": "100.100.100.100",
	},
	"DERPMap": {
		"OmitDefaultRegions": true,
		"Regions": {
			"900": {
				"RegionID":   901,
				"RegionCode": "mytail",
				"RegionName": "mytail",
				"Nodes": [{
					"HostName": "你的域名",
					"Name":     "1",
					"RegionID": 900,
					"IPv4":     "域名的IP",
					"DERPPort": 11443,
				}],
			},
		},
	},
	"ACLs": [
		{"Action": "accept", "Users": ["*"], "Ports": ["*:*"]},
	],
}

最后,因为自建的时常会崩(不知道现在怎么样了),可以做个定时重启服务。另外客户端还可以用计划任务每隔几分钟就ping一下其他主机,保持打洞状态。

如果遇到问题,请检查……2个端口是否真正开放?证书路径正确?命令行没有任何错误?配置文件填对了没有?ip是否被艹?是否躺在床上做梦? :smiling_face_with_tear:

ARM安装go环境:

wget https://go.dev/dl/go1.20.1.linux-arm64.tar.gz
tar -C /usr/local -xzf go1.20.1.linux-arm64.tar.gz
echo "export GOROOT=/usr/local/go" >> /etc/profile
echo "export GOPATH=$HOME/go" >> /etc/profile
echo "export PATH=$GOPATH/bin:$GOROOT/bin:$PATH" >> /etc/profile
source /etc/profile
go version

最近一直想折腾这个,但是迫于没有时间。。

udp端口修改,启动命令里加入

-stun-port 999

然后在acls加入

"STUNPort": 999,

【国内服务器 - 适用于域名没备案】

docker run --restart always \
  --name derper -p 443:443 -p 3478:3478/udp \
  -v /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock \
  -e DERP_ADDR=:443 \
  -e DERP_HTTP_PORT=80 \
  -e DERP_CERTS=/app/certs \
  -e DERP_VERIFY_CLIENTS=false \
  -d dockerproxy.com/yangchuansheng/ip_derper:latest

来源:headscale组网自建derp中继节点,国内也可以 – 姿势小王子

今天遇到个奇葩案例,3478同时开了upd和tcp端口就是死活不通,关了tcp就好了……