Tailscale 自建 Derp 中转服务器

news2025/1/19 23:20:25

文章目录

  • 为什么要建立 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 需要)和 udp3478 (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: 2
  tunnels:
    he-ipv6:
      mode: sit
      remote: 216.218.221.6
      local: 内网ip
      addresses:
        - "2001:470:18:e6d::2/64"
      routes:
        - to: default
          via: "2001:470:18:e6d::1"

可以看到已经可以直联了

还是根据视频的步骤来,但是我这里选择的 linux

在这里插入图片描述

然后大概长成这个样子:

在这里插入图片描述

然后保存, reboot 一下服务器

防止 Derp 被白嫖

进入服务器 /etc/systemd/system 路径下的

在这里插入图片描述

保存文件之后,重启一下 Derp

在这里插入图片描述

以上的操作命令合集

————局域网1设置部分

tailscale up --netfilter-mode=off  --advertise-routes=局域网网段 --accept-routes

————群晖设置部分

sudo -i

echo -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/synology


docker 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/tailscale

iptables -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 MASQUERADE

sleep 1m


————云服务器derp中转服务器搭建部分

apt update && apt upgrade

apt install -y wget git openssl curl

wget https://go.dev/dl/go1.20.5.linux-amd64.tar.gz

rm -rf /usr/local/go && tar -C /usr/local -xzf go1.20.5.linux-amd64.tar.gz

export PATH=$PATH:/usr/local/go/bin
go version

echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile
source /etc/profile

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

go install tailscale.com/cmd/Derp@main

go build -o /etc/derp/Derp

ls /etc/derp

openssl 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
EOF

systemctl 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 netcheck

tailscale status

tailscale ping 

ping6 240C::6666

tailscale down 

tailscale up

curl -fsSL https://tailscale.com/install.sh | sh

nano /etc/systemd/system/derp.service

--verify-clients

systemctl daemon-reload

systemctl restart derp


————headscale搭建部分

wget --output-document=headscale.deb \
     https://github.com/juanfont/headscale/releases/download/v0.22.3/headscale_0.22.3_linux_amd64.deb

sudo dpkg --install headscale.deb

sudo systemctl enable headscale

nano /etc/headscale/config.yaml

apt install -y nginx


map $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.zip

unzip -d /var/www headscale-ui.zip

systemctl start headscale

systemctl restart nginx

headscale apikeys create --expiration 9999d

tailscale logout
tailscale up --login-server=http://云服务器IP:3355

touch /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.json


systemctl restart nginx
systemctl restart headscale

tailscale 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
        }
      ]
    }
  }
}

参考

  1. 官方自建 Derp
  2. 解决apt install 下载速度太慢
  3. Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建、Headscale协调服务器搭建,用一期搞定,看一看不亏吧?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2243322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RPC安全可靠的异常重试

当调用方调用服务提供方&#xff0c;由于网络抖动导致的请求失败&#xff0c;这个请求调用方希望执行成功。 调用方应该如何操作&#xff1f;catch异常再发起一次调用&#xff1f;显然不够优雅。这时可以考虑使用RPC框架的重试机制。 RPC框架的重试机制 RPC重试机制&#xff1…

AutoDL部署视觉大模型llama3.2-vision,从视频中寻找特定目标

注&#xff1a; windows11系统。示例为此项目&#xff1a;https://github.com/win4r/VideoFinder-Llama3.2-vision-Ollama 在当今的人工智能领域&#xff0c;深度学习模型的计算需求日益增长&#xff0c;特别是在处理复杂的视觉任务时&#xff0c;强大的算力往往是实现高效应用…

【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法

【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法 目录 文章目录 【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法目录摘要&#xff1a;研究背景&#xff1a;问题与挑战&#xff1a;如何解…

golang调用模组程序实现交互输入自动化,获取imei及iccid

应用场景&#xff1a;在openwrt下调用移远的测试程序&#xff0c;并实现输入自动话&#xff0c;获取imei rootOpenWrt:~# ql-api-test Test groups:0: ql_dsi1: ql_nw2: ql_sim3: ql_dev4: ql_voice5: ql_sms6: ql_adc7: ql_i2c8: …

【数据分享】2022年我国10米分辨率茶树种植分布栅格数据

小麦、玉米、水稻、茶树等各类农作物的种植分布数据在农业、环境、国土等很多专业都经常用到&#xff01; 本次给大家分享的是我国2022年10米分辨率茶树种植分布栅格数据&#xff01;数据格式为TIFF格式。数据坐标为GCS_WGS_1984。数据格式为TIFF格式。数据坐标为GCS_WGS_1984…

【弱监督视频异常检测】2024-ESWA-基于扩散的弱监督视频异常检测常态预训练

2024-ESWA-Diffusion-based normality pre-training for weakly supervised video anomaly detection 基于扩散的弱监督视频异常检测常态预训练摘要1. 引言2. 相关工作3. 方法论3.1. 使用扩散自动编码器进行常态学习3.2. 全局-局部特征编码器3.2.1 局部块3.2.2 全局块3.2.3 协同…

vue实现展示并下载后端返回的图片流

// 点击下载 downLoadCode() {const image new Image();image.setAttribute("crossOrigin", "anonymous");image.onload () > {const canvas document.createElement("canvas");canvas.width image.width;canvas.height image.height;c…

STL关联式容器之平衡二叉搜索树

平衡二叉搜索树 在STL关联式容器介绍-CSDN博客中对二叉搜索树做了简要的描述&#xff1b;但是因为没有对二叉搜索树对数的深度及插入后树的结构进行调整&#xff0c;二叉搜索树可能失去平衡&#xff0c;造成搜寻效率低落的情况。如下所示&#xff1a; 所谓树形平衡与否&#xf…

Django启用国际化支持(2)—实现界面内切换语言:activate()

文章目录 ⭐注意⭐1. 配置项目全局设置&#xff1a;启用国际化2. 编写视图函数3. 配置路由4. 界面演示5、扩展自动识别并切换到当前语言设置语言并保存到Session设置语言并保存到 Cookie ⭐注意⭐ 以下操作依赖于 Django 项目的国际化支持。如果你不清楚如何启用国际化功能&am…

Java基础——继承和多态

目录 一、继承 继承的定义&#xff1a; 继承的基本用法&#xff1a; 如何调用父类的方法&#xff1f; 二、多态 多态性的好处 多态中的强制类型转换&#xff1a; 包的命名规则——域名倒叙 一、继承 继承的定义&#xff1a; 继承是面向对象编程中的一种机制&#xff0c…

2024-11-17 -MATLAB三维绘图简单实例

1. x -1:0.05:1; y x; [X, Y] meshgrid(x, y); f (X, Y) (sin(pi * X) .* sin(pi * Y)) .^ 2.*sin(2.*X2.*Y); mesh(X, Y, f(X, Y)); % 调用函数f并传递X和Y xlabel(X-axis); ylabel(Y-axis); zlabel(Z-axis); title(Surface Plot of (sin(pi * X) .* sin(pi * Y)) .^ 2.*…

resnet50,clip,Faiss+Flask简易图文搜索服务

一、实现 文件夹目录结构&#xff1a; templates -----upload.html faiss_app.py 前端代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widt…

Flink监控checkpoint

Flink的web界面提供了一个选项卡来监控作业的检查点。这些统计信息在任务终止后也可用。有四个选项卡可以显示关于检查点的信息:概述(Overview)、历史(History)、摘要(Summary)和配置(Configuration)。下面依次来看这几个选项。 Overview Tab Overview选项卡列出了以…

如何用Excel批量提取文件夹内所有文件名?两种简单方法推荐

在日常办公中&#xff0c;我们有时需要将文件夹中的所有文件名整理在Excel表格中&#xff0c;方便管理和查阅。手动复制文件名既费时又易出错&#xff0c;因此本文将介绍两种利用Excel自动提取文件夹中所有文件名的方法&#xff0c;帮助你快速整理文件信息。 方法一&#xff1…

微信小程序-prettier 格式化

一.安装prettier插件 二.配置开发者工具的设置 配置如下代码在setting.json里&#xff1a; "editor.formatOnSave": true,"editor.defaultFormatter": "esbenp.prettier-vscode","prettier.documentSelectors": ["**/*.wxml"…

Debezium日常分享系列之:Debezium3版本Debezium connector for JDBC

Debezium日常分享系列之&#xff1a;Debezium3版本Debezium connector for JDBC 概述JDBC连接器的工作原理消费复杂的Debezium变更事件至少一次的传递多个任务数据和列类型映射主键处理删除模式幂等写入模式演化引用和大小写敏感性连接空闲超时数据类型映射部署Debezium JDBC连…

前端页面自适应等比例缩放 Flexible+rem方案

在移动互联网时代&#xff0c;随着智能手机和平板电脑的普及&#xff0c;前端开发者面临的一个重要挑战是如何让网页在不同尺寸和分辨率的设备上都能良好地显示。为了应对这一挑战&#xff0c;阿里巴巴的前端团队开发了 flexible.js&#xff0c;旨在提供一种简单有效的解决方案…

Argo workflow 拉取git 并使用pvc共享文件

文章目录 拉取 Git 仓库并读取文件使用 Kubernetes Persistent Volumes&#xff08;通过 volumeClaimTemplates&#xff09;以及任务之间如何共享数据 拉取 Git 仓库并读取文件 在 Argo Workflows 中&#xff0c;如果你想要一个任务拉取 Git 仓库中的文件&#xff0c;另一个任…

AWTK VSCode 实时预览插件端口冲突的解决办法

AWTK XML UI 预览插件&#xff1a;在 vscode 中实时预览 AWTK XML UI 文件&#xff0c;在 Copilot 的帮助下&#xff0c;可以大幅提高界面的开发效率。 主要特色&#xff1a; 真实的 UI 效果。可以设置主题&#xff0c;方便查看在不同主题下界面的效果。可以设置语言&#xf…

x-cmd pkg | helix - 用 Rust 打造的文本编辑器,内置 LSP 和语法高亮,兼容 Vim 用户习惯

目录 简介快速上手安装使用 功能特点竞品和相关项目进一步阅读 简介 helix 是用 Rust 开发的文本编辑器&#xff0c;以 Modal editing&#xff08;模态编辑&#xff09;为核心特性&#xff0c;类似于 Vim。它结合了经典的 Vim 模式编辑和现代开发工具的特性&#xff08;如 LSP…