当前位置: 首页 > article >正文

Tailscale 自建 Derp 中转服务器

文章目录

  • 为什么要建立 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.kler.cn/a/399943.html

相关文章:

  • MySQL45讲 第二十四讲 MySQL是怎么保证主备一致的?——阅读总结
  • WPF的基础控件详解
  • 鸿蒙网络编程系列48-仓颉版UDP回声服务器示例
  • 香港站群服务器有助于提升网站在搜索引擎中的排名
  • 无人机在森林中的应用!
  • 4.2 Android NDK 基础概念
  • 【Mac】卸载JAVA、jdk
  • Day02_AJAX综合案例 (黑马笔记)
  • 在 CentOS 7 上安装 MinIO 的步骤
  • 【爬虫实战】抓取某站评论
  • 【论文笔记】SCOPE: Sign Language Contextual Processing with Embedding from LLMs
  • 代码随想录第三十四天
  • 输出比较简介
  • 来LeetCode练下思维吧
  • uniapp微信小程序转发跳转指定页面
  • git环境开发问题-处理
  • 【Oracle实战】文章导读
  • go的接口详解
  • C++小白实习日记——Day 2 TSCNS怎么读取当前时间
  • css3的新特性有哪些?
  • 深度神经网络 FPGA 设计与现状
  • PCL点云开发-解决在Qt中嵌入点云窗口出现的一闪而过的黑窗口
  • 2024RISC-V中国峰会 演讲幻灯片和视频回放公开
  • 跨平台编译Go程序:GOOS和GOARCH环境变量的使用
  • 儿童玩具常用的语音ic芯片类别?
  • DNS原理详解,DNS解析过程