文章目录
- 为什么要建立 Derp 中转服务器?
- 安装 Go 环境
- 通过 Go 安装 Derp
- 处理证书文件
- 自签一个域名启动 Derp
- IPV6 的支持
- 防止 Derp 被白嫖
- 以上的操作命令合集
- 自建 Headscale 添加 Derp
- 参考
为什么要建立 Derp 中转服务器?
Tailscale 使用的算法很有趣: 所有客户端之间的连接都是先选择 DERP 模式(中继模式),这意味着连接立即就能建立(优先级最低但 100% 能成功的模式),用户不用任何等待。然后开始并行地进行路径发现,通常几秒钟之后,我们就能发现一条更优路径,然后将现有连接透明升级(upgrade)过去,变成点对点连接(直连)
因此, DERP 既是 Tailscale 在 NAT 穿透失败时的保底通信方式(此时的角色与 TURN 类似),也是在其他一些场景下帮助我们完成 NAT 穿透的旁路信道。换句话说,它既是我们的保底方式,也是有更好的穿透链路时,帮助我们进行连接升级(upgrade to a peer-to-peer connection)的基础设施。
Tailscale
官方内置了很多 DERP 服务器,分步在全球各地,惟独不包含中国大陆,原因你懂得。这就导致了一旦流量通过 DERP 服务器进行中继,延时就会非常高。而且官方提供的 DERP 服务器是万人骑,存在安全隐患。
安装 Go 环境
apt update && apt upgrade
等了大半年终于安完了,然后安装所需的软件
apt install -y wget git openssl curl
然后安装 go
语言
wget https://go.dev/dl/go1.20.5.linux-amd64.tar.gz
我这里连不上网,所以在本地直接下载了,然后传到服务器上面
然后参考 go 官方的安装手册,运行这行代码
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.20.5.linux-amd64.tar.gz
这里的 go1.20.5.linux-amd64.tar.gz
需要写成你下载的 go
版本
添加环境变量
export PATH=$PATH:/usr/local/go/bin
之后验证一下是否安装成功
go version
echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile
source /etc/profile
通过 Go 安装 Derp
安装 Derp
的时候报错了
在回去安装 go
的最新版本
可以看到直接生效的
之后接着运行下载 Derp 的命令
处理证书文件
之后看一下这个文件
自签一个域名启动 Derp
cat > /etc/systemd/system/derp.service <<EOF
[Unit]
Description=TS Derp
After=network.target
Wants=network.target
[Service]
User=root
Restart=always
ExecStart=/etc/derp/Derp -hostname derp.myself.com -a :33445 -http-port 33446 -certmode manual -certdir /etc/derp
RestartPreventExitStatus=1
[Install]
WantedBy=multi-user.target
EOF
把云服务的 tcp
33445
(HTTPS 需要)和udp
的3478
(STUN需要)的端口打开
如果你是用 宝塔的话,不仅是云服务器那边需要开启相对应的端口,宝塔的安全也要开启相应端口!
之后再浏览器中输入https://your ip:33445/
即可
在服务器安装 Tailscale
sudo apt install tailscale
如果下载太慢,参考这个解决apt install 下载速度太慢
检查网络
tailscale netcheck
然后可以用 tailscale status
查看状态,这里我的 linux
还没有登录 Tailscale
登录官网 tailscale
,在我组的网络中,添加一个 linux
设备
生成 install 的 script
然后返回 linux
中运行
IPV6 的支持
代码如下
network:version: 2tunnels:he-ipv6:mode: sitremote: 216.218.221.6local: 内网ipaddresses:- "2001:470:18:e6d::2/64"routes:- to: defaultvia: "2001:470:18:e6d::1"
可以看到已经可以直联了
还是根据视频的步骤来,但是我这里选择的 linux
然后大概长成这个样子:
然后保存, reboot
一下服务器
防止 Derp 被白嫖
进入服务器 /etc/systemd/system
路径下的
保存文件之后,重启一下 Derp
以上的操作命令合集
————局域网1设置部分tailscale up --netfilter-mode=off --advertise-routes=局域网网段 --accept-routes————群晖设置部分sudo -iecho -e '#!/bin/sh -e \ninsmod /lib/modules/tun.ko' > /usr/local/etc/rc.d/tun.sh
chmod a+x /usr/local/etc/rc.d/tun.sh
/usr/local/etc/rc.d/tun.sh
ls /dev/net/tun参考ZeroTier群晖的安装
资料:https://docs.zerotier.com/devices/synologydocker run -d \--name=ts \--restart=always \-v /var/lib:/var/lib \-v /dev/net/tun:/dev/net/tun \--network=host \--cap-add=NET_ADMIN \--cap-add=NET_RAW \--env TS_STATE_DIR=/etc/ts \--env TS_SOCKET=/var/run/tailscale/tailscaled.sock \--env TS_USERSPACE=false \--env TS_ROUTES=局域网网段 \--env TS_EXTRA_ARGS="--accept-routes --advertise-exit-node --reset" \--env TS_AUTHKEY=API密钥 \
tailscale/tailscaleiptables -I FORWARD -i eth0 -j ACCEPT
iptables -I FORWARD -o eth0 -j ACCEPT
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
iptables -I FORWARD -i tailscale0 -j ACCEPT
iptables -I FORWARD -o tailscale0 -j ACCEPT
iptables -t nat -I POSTROUTING -o tailscale0 -j MASQUERADEsleep 1m————云服务器derp中转服务器搭建部分apt update && apt upgradeapt install -y wget git openssl curlwget https://go.dev/dl/go1.20.5.linux-amd64.tar.gzrm -rf /usr/local/go && tar -C /usr/local -xzf go1.20.5.linux-amd64.tar.gzexport PATH=$PATH:/usr/local/go/bin
go versionecho "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile
source /etc/profilego env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,directgo install tailscale.com/cmd/Derp@maingo build -o /etc/derp/Derpls /etc/derpopenssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout /etc/derp/derp.myself.com.key -out /etc/derp/derp.myself.com.crt -subj "/CN=derp.myself.com" -addext "subjectAltName=DNS:derp.myself.com"cat > /etc/systemd/system/derp.service <<EOF
[Unit]
Description=TS Derp
After=network.target
Wants=network.target
[Service]
User=root
Restart=always
ExecStart=/etc/derp/Derp -hostname derp.myself.com -a :33445 -http-port 33446 -certmode manual -certdir /etc/derp
RestartPreventExitStatus=1
[Install]
WantedBy=multi-user.target
EOFsystemctl enable derp
systemctl start derp"derpMap": {"OmitDefaultRegions": true,"Regions": {"901": {"RegionID": 901,"RegionCode": "Myself","RegionName": "Myself Derp","Nodes": [{"Name": "901a","RegionID": 901,"DERPPort": 33445,"IPv4": "服务器IP","InsecureForTests": true,},],},},},"1": null,"2": null,"3": null,"4": null,"5": null,"6": null,"7": null,"8": null,"9": null,"10": null,"11": null,"12": null,"13": null,"14": null,"15": null,"16": null,"17": null,"18": null,"19": null,"20": null,"21": null,"22": null,"23": null,"24": null, "25": null,tailscale netchecktailscale statustailscale ping ping6 240C::6666tailscale down tailscale upcurl -fsSL https://tailscale.com/install.sh | shnano /etc/systemd/system/derp.service--verify-clientssystemctl daemon-reloadsystemctl restart derp————headscale搭建部分wget --output-document=headscale.deb \https://github.com/juanfont/headscale/releases/download/v0.22.3/headscale_0.22.3_linux_amd64.debsudo dpkg --install headscale.debsudo systemctl enable headscalenano /etc/headscale/config.yamlapt install -y nginxmap $http_upgrade $connection_upgrade {default keep-alive;'websocket' upgrade;'' close;
}
server {listen 3355;listen [::]:3355;server_name 云服务器IP;location / {proxy_pass http://127.0.0.1:8080;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;proxy_set_header Host $server_name;proxy_buffering off;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;}location /web {index index.html;alias /var/www/web;}
}wget https://github.com/gurucomputing/headscale-ui/releases/download/2023.01.30-beta-1/headscale-ui.zipunzip -d /var/www headscale-ui.zipsystemctl start headscalesystemctl restart nginxheadscale apikeys create --expiration 9999dtailscale logout
tailscale up --login-server=http://云服务器IP:3355touch /var/www/derp.json{"Regions": {"901": {"RegionID": 901,"RegionCode": "Myself","RegionName": "Myself Derp","Nodes": [{"Name": "901a","RegionID": 901,"DERPPort": 33445,"IPv4": "IP地址","IPv6": "IP地址","InsecureForTests": true}]}}
}server {listen 80;listen [::]:80;server_name 127.0.0.1;root /var/www;index index.html index.htm index.nginx-debian.html;location /d {alias /var/www;autoindex on;}location / {try_files $uri $uri/ =404;}
}- http://127.0.0.1/d/derp.jsonsystemctl restart nginx
systemctl restart headscaletailscale logout
tailscale up --login-server=http://你的云服务器ip:端口————改善github下载速度慢的解决方案下面代码可以放到/etc/hosts文件的末尾,然后重启云服务器就可以20.205.243.166 github.com
159.24.3.173 gist.github.com
185.199.110.153 assets-cdn.github.com
185.199.110.153 raw.githubusercontent.com
185.199.110.153 gist.githubusercontent.com
185.199.110.153 cloud.githubusercontent.com
185.199.110.153 camo.githubusercontent.com
185.199.110.153 avatars0.githubusercontent.com
185.199.110.153 avatars1.githubusercontent.com
185.199.110.153 avatars2.githubusercontent.com
185.199.110.153 avatars3.githubusercontent.com
185.199.110.153 avatars4.githubusercontent.com
185.199.110.153 avatars5.githubusercontent.com
185.199.110.153 avatars6.githubusercontent.com
185.199.110.153 avatars7.githubusercontent.com
185.199.110.153 avatars8.githubusercontent.com不过需要注意,ip可能之后需要更新,可以去站长工具,ping后面的域名来获取。
自建 Headscale 添加 Derp
首先,nginx 需要配置一下
{"Regions": {"901": {"RegionID": 901,"RegionCode": "huawei","RegionName": "huawei Shanghai","Nodes": [{"Name": "901a","RegionID": 901,"DERPPort": 443,"HostName": "你的ip","IPv4": "你的ip","InsecureForTests": true}]}}
}
参考
- 官方自建 Derp
- 解决apt install 下载速度太慢
- Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建、Headscale协调服务器搭建,用一期搞定,看一看不亏吧?