来自远方 - derp
type: channel
link: https://www.runyf.cn/tag/derp/
items: Tailscale异地组网之自建DERP中继服务器

Tailscale异地组网之自建DERP中继服务器
type: item
date: 2024-06-04T20:06:00+08:00
description: 一、DERP概述DERP 服务是tailscale运行所需的核心服务，tailscale依赖derp服务器进行nat穿透，实现点对点p2p链接，当然在某些特殊的网络可能会打洞失败，derp就会作为设备之间的第三者进行转发流量。derp会优先进行转发流量，再尝试打洞，所以首次链接时，会出现延迟增大或者丢包，这时我们可能就需要自建derp服务。tailscale官方提供的derp中继服务器分布在世界各地，中国的derp服务器位于香港，大陆地区延迟较高二、自建DERP所需条件1.一台具有公网ip服务器，可以是ipv4、ipv6，当然双栈最好2.域名（网上很多博主都说域名需要备案，备案的目的就是能够正常访问80和443端口，但是derp可以完全不借助这两个端口）3.证书 (域名ssl证书)本教程使用端口说明12340 HTTPS端口3478 STUN端口三、上传SSL证书证书需自行申请cd ~ root@localhost:~# ls certs {域名}.key {域名}.crt四、使用容器搭建DERPdocker run -d \ --name derper \ --restart=always \ --network=host \ -v /root/certs/:/app/certs \ -v /var/run/tailscale/:/var/run/tailscale/ \ -e DERP_CERT_MODE=manual \ -e DERP_HTTP_PORT=-1 \ -e DERP_ADDR=:12340 \ -e DERP_DOMAIN={你的域名} \ # -e DERP_VERIFY_CLIENTS=true \ runyf/derper参数说明--network=host 容器网络设置为共享主机网络，如果使用桥接模式，ipv6将不受支持，要想成功搭建支持ipv6的derp服务，必须要原生的ipv6，中间不能有端口映射也不能有nat6-v /root/certs/:/app/certs 设置证书目录放置在/root/certs/下，证书必须严格使用 {域名}.crt和 {域名}.key-v /var/run/tailscale/:/var/run/tailscale/ 这条参数目的是为了做客户端验证，防止他人白嫖的必要设置。其实严格来说应该映射/var/run/tailscale/tailscaled.sock这个文件，但是这样设置的话此如果文件不存在，比如说没有启动tailscale，特别是系统重启之后容器可能会启动失败，我实测一定启动失败，所以只映射了文件夹-e DERP_HTTP_PORT=-1 这条参数是为了禁用derp所依赖的80端口，毕竟80端口和443端口是非常宝贵的，而且80端口也用不上，所以不如直接禁用-e DERP_VERIFY_CLIENTS=true 开启客户端验证容器管理docker logs -f derper 查看日志docker exec -it derper ./derper -version 查看当前版本五、配置ACL"derpMap": { "OmitDefaultRegions": true, "Regions": { "900": { "RegionID": 900, "RegionCode": "MyDerp", "Nodes": [ { "Name": "MyDerp-Name", "RegionID": 900, "HostName": "{你的域名}", "DERPPort": 12340, "STUNPort": 3478, "InsecureForTests": true, }, ], }, }, },客户端验证 tailscale netcheck tailscale status六、开启客户端验证（防白嫖）开启derp的客户端验证只需要安装tailscale并登录即可，还有一点重要设置，容器运行参数需要添加这一条 DERP_VERIFY_CLIENTS=true七、我的服务器没有ipv6怎么办Hurricane Electric Free IPv6 Tunnel Broker网站里面申请一个ipv6然后设置到自己的服务器上就行设置方法编辑 /etc/network/interfaces文件并追加以下内容auto he-ipv6 iface he-ipv6 inet6 v4tunnel address x:x:x:x::x netmask 64 endpoint x.x.x.x local x.x.x.x ttl 255 gateway x:x:x:x::x重启服务器[scode type="yellow"]如果你的服务器里面没有interfaces这个文件可…