部署DERP中继服务器
部署DERP中继服务器
首先要在这台机器上安装Tailscale客户端,添加Tailscale官方的存储库安装即可,此举是为了后续能启用DERP服务的鉴权功能,防止被其他人滥用:
wget https://pkgs.tailscale.com/stable/debian/bookworm.noarmor.gpg -O /usr/share/keyrings/tailscale-archive-keyring.gpg
wget https://pkgs.tailscale.com/stable/debian/bookworm.tailscale-keyring.list -O /etc/apt/sources.list.d/tailscale.list
apt -y update
apt -y install tailscale确保tailscaled服务正常运行:
systemctl status tailscaled.service登录到我们自建的Headscale控制服务器:
tailscale up --login-server https://headscale.example.com在Headscale控制服务器上注册我这台甲骨文ARM的机器:
headscale nodes register--user imlala --key nodekey:xxxxx安装Golang:
curl -L https://go.dev/dl/go1.21.1.linux-amd64.tar.gz -o go1.21.1.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.21.1.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' > /etc/profile.d/golang.sh
source /etc/profile.d/golang.sh新建一个derp用户登录到这个用户:
useradd -r -m -d /opt/derp -s /bin/bash derp
su - derp安装DERP,完成之后退出当前用户:
go install tailscale.com/cmd/derper@main
exit[可选]让DERP服务可以绑定低位端口,例如80、443,由于后续我将使用反向代理所以这个步骤可以省略:
setcap 'cap_net_bind_service=+ep'/opt/derp/go/bin/derper[可选]做一个软链接方便使用:
ln -s /opt/derp/go/bin/derper /usr/local/bin/derper新建systemd服务:
vim /etc/systemd/system/derper.service写入如下配置,你只需要将derp.example.com修改成你自己的域名即可:
[Unit]
Description=DERP Server
After=network.target
[Service]
User=derp
Group=derp
AmbientCapabilities=CAP_NET_BIND_SERVICE
WorkingDirectory=/opt/derp
ExecStart=/opt/derp/go/bin/derper -hostname=derp.example.com -c /opt/derp/derper.conf -a 0.0.0.0:9981 -http-port -1 --verify-clients
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target[重要]–verify-clients参数务必要保留,鉴权需要,否则任何人都能连接上你的DERP服务。
启动DERP服务并设置开机自启:
systemctl enable --now derper.service检查运行状态确保正常运行:
systemctl status derper.service新建NGINX站点配置文件:
vim /etc/nginx/sites-available/derper写入如下配置:
server {
listen 80;
server_name derp.example.com;
location / {
proxy_pass http://127.0.0.1:9981;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_log /var/log/nginx/derp-proxy-error.log;
access_log /var/log/nginx/derp-proxy-access.log;
}启用站点:
ln -s /etc/nginx/sites-available/derper /etc/nginx/sites-enabled/derper签发SSL证书:
certbot --nginx访问DERP服务的域名,如果能看到说明DERP服务正常运行
回到Headscale控制服务器,新建一个DERP服务配置文件:
vim /etc/headscale/derp.yaml写入如下内容,注意derp.example.com修改为你自己的域名:
regions:
900:
regionid: 900
regioncode: kr
regionname: oraclekr
nodes:
- name: 900a
regionid: 900
hostname: derp.example.com
stunport: 3478
stunonly: false
derpport: 443编辑Headscale控制服务器的配置文件:
vim /etc/headscale/config.yaml注释掉如下URL以禁用Tailscale官方的DERP服务器,指定刚才新建的DERP服务配置文件:
derp:
server:
enabled: false
...
urls: []
# - https://controlplane.tailscale.com/derpmap/default
...
paths:
- /etc/headscale/derp.yaml
...重启Headscale:
systemctl restart headscale在客户端执行如下命令查看当前的网络状态:
tailscale netcheck如果两台设备之间通过DERP服务器中继连接,那么也可以执行下面的命令查看连接状态:
tailscale status