侧边栏壁纸
博主头像
Narutoの博客

行动起来,活在当下

  • 累计撰写 45 篇文章
  • 累计创建 24 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Tailscale 中转服务器的搭建

Naruto
2024-09-04 / 0 评论 / 0 点赞 / 7 阅读 / 0 字

Tailscale 中转服务器的搭建

Tailscale 提供的 relays 数量有限,而且全部在国外。你也可以自建中继。自建中继服务器被称为 derper

搭建中转服务器默认是需要证书的,

您必须对 HTTP 使用端口 TCP 80。默认情况下,HTTPS 在端口 443 上运行,STUN 在端口 3478 上运行。

  • HTTPS:服务端口,TCP

  • STUN:打洞端口,UDP

name: ip_derper
services:
    derper:
        image: yujibuzailai/ip_derper
        container_name: ip_derper
        restart: always
        network_mode: "host"
        volumes:
            #Config file path
            #    - './start.sh:/app/start.sh'
            - '/var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock'
        environment:
            - DERP_PORT=5443 # derper运行端口
            - DERP_STUN=true # 是否开启stun,默认开启
            - DERP_STUN_PORT=3478 # stun端口,默认3478
            - DERP_VERIFY_CLIENTS=true # 开启防止白嫖,本机需要先加入tailscale节点,虽然对于ip没用
#        ports:
#            - '3478:3478/udp'
#            - '50443:443'

Untitled 1

📌 打开tailscale的网页console,在access control里的 'ssh' 之前粘贴以下内容:

	"derpMap": {
		"OmitDefaultRegions": true, //禁用其他中转服务器
		"Regions": {
			"901": {
				"RegionID":   901,
				"RegionCode": "Myself",
				"RegionName": "Myself Derper",
				"Nodes": [
					{
						"Name":     "阿里云-深圳",
						"RegionID": 901,
						"DERPPort": 5443, //服务器的端口
						"IPv4":     "1.1.1.1", //服务器的IP
						//"IPv6":    "IP地址", 中转服务器的ipv6地址
						"InsecureForTests": true,
					},
					//多个服务器
					{
						"Name":     "美国-洛杉矶-9929",
						"RegionID": 901,
						"DERPPort": 5443, //服务器的端口
						"IPv4":     "2.2.2.2", //服务器的IP
						//"IPv6":    "IP地址", 中转服务器的ipv6地址
						"InsecureForTests": true,
					},
				],
			},
		},
	},

测试连通性

下载tailscale linux客户端

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

查看tailscale客户端是否连接中转服务器

tailscale netcheck

查看状态

tailscale status
  • ipv6的支持

    		"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, //奈洛比-肯尼亚
    

完整配置

// Example/default ACLs for unrestricted connections.
{
	// Declare static groups of users. Use autogroups for all users or users with a specific role.
	// "groups": {
	//  	"group:example": ["[email protected]", "[email protected]"],
	// },

	// Define the tags which can be applied to devices and by which users.
	// "tagOwners": {
	//  	"tag:example": ["autogroup:admin"],
	// },

	// Define access control lists for users, groups, autogroups, tags,
	// Tailscale IP addresses, and subnet ranges.
	"acls": [
		// Allow all connections.
		// Comment this section out if you want to define specific restrictions.
		{"action": "accept", "src": ["*"], "dst": ["*:*"]},

		// Allow users in "group:example" to access "tag:example", but only from
		// devices that are running macOS and have enabled Tailscale client auto-updating.
		// {"action": "accept", "src": ["group:example"], "dst": ["tag:example:*"], "srcPosture":["posture:autoUpdateMac"]},
	],

	// Define postures that will be applied to all rules without any specific
	// srcPosture definition.
	// "defaultSrcPosture": [
	//      "posture:anyMac",
	// ],

	// Define device posture rules requiring devices to meet
	// certain criteria to access parts of your system.
	// "postures": {
	//      // Require devices running macOS, a stable Tailscale
	//      // version and auto update enabled for Tailscale.
	// 	"posture:autoUpdateMac": [
	// 	    "node:os == 'macos'",
	// 	    "node:tsReleaseTrack == 'stable'",
	// 	    "node:tsAutoUpdate",
	// 	],
	//      // Require devices running macOS and a stable
	//      // Tailscale version.
	// 	"posture:anyMac": [
	// 	    "node:os == 'macos'",
	// 	    "node:tsReleaseTrack == 'stable'",
	// 	],
	// },
	// 自定义配置开始
	"randomizeClientPort": true, //这里强烈建议设定为true,贴配置主要就是为了贴它,莫名其妙的打洞失败多少跟它有些关系
	"derpMap": {
		//"OmitDefaultRegions": true, //这句控制官方derper是否启用,false是启用官方derper,除非特别自信,否则千万不要设置为true
		"Regions": {
			"901": {
				"RegionID":   901, // tailscale 900-999 是保留给自定义 derper 的
				"RegionCode": "Myself_NAS",
				"RegionName": "Myself Derper NAS",
				//"RegionScore": 0.1//魔法字段,填0~1之间的值会把本区域的derper服务器延迟缩小,比如我填0.1实际延迟是100ms时,后台排序算法会将其标记为10ms,从而实现优选某个区域的derper,一般用不到。当然填大于1的会将排序延迟放大,用来筛选不想使用的derper服务器。
				"Nodes": [
					{
						"Name":     "NAS",
						"RegionID": 901,
						//"HostName": "www.baidu.com",//填自签域名,tsl验证证书用,其实填IP也行,不过为了向后兼容建议填域名
						"DERPPort": 6000, //服务器的端口
						//"IPv4":     "2.2.2.2", //HostName如果指定了自签域名,这里必须填上IP地址,否则它真的会去解析www.baidu.com
						"IPv6": "240e:666:8888:8888:666:8888:8888:8888", //中转服务器的ipv6地址
						//"IPv6":             "nas.ddns.yjbzl.cn", //中转服务器的ipv6地址
						"InsecureForTests": true, // 这个设置为true,客户端跳过验证
						"STUNPort":         3478, //这里可以改,很多教程不让改,其实这个和上文derper服务里面的stunport对应上就可以
					},
					//{
					//	"Name":     "美国-洛杉矶-9929",
					//	"RegionID": 901,
					//	"DERPPort": 5443, //服务器的端口
					//	"IPv4":     "2.2.2.2", //服务器的IP
					//"IPv6":    "IP地址", 中转服务器的ipv6地址
					//	"InsecureForTests": true,
					//},
				],
			},
			"902": {
				"RegionID":   902,
				"RegionCode": "Myself_Aliyun",
				"RegionName": "Myself Derper Aliyun",
				"Nodes": [
					{
						"Name":     "阿里云-深圳",
						"RegionID": 902,
						"DERPPort": 5443,
						"IPv4":     "1.1.1.1",
						//"IPv6":    "IP地址",
						"InsecureForTests": true,
						"STUNPort":         3478,
					},
				],
			},
			"903": {
				"RegionID":   903,
				"RegionCode": "Myself_US",
				"RegionName": "Myself Derper 9929",
				"Nodes": [
					{
						"Name":     "美国-洛杉矶-9929",
						"RegionID": 903,
						"DERPPort": 50443,
						"IPv4":     "1.1.1.1",
						//"IPv6":    "IP地址",
						"InsecureForTests": true,
						"STUNPort":         3478,
					},
				],
			},
			"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, //奈洛比-肯尼亚
		},
	},
	// 自定义配置结束
	// Define users and devices that can use Tailscale SSH.
	"ssh": [
		// Allow all users to SSH into their own devices in check mode.
		// Comment this section out if you want to define specific restrictions.
		{
			"action": "check",
			"src":    ["autogroup:member"],
			"dst":    ["autogroup:self"],
			"users":  ["autogroup:nonroot", "root"],
		},
	],

	// Test access rules every time they're saved.
	// "tests": [
	//  	{
	//  		"src": "[email protected]",
	//  		"accept": ["tag:example"],
	//  		"deny": ["100.101.102.103:443"],
	//  	},
	// ],
}

启用验证

先让云服务器加入到tailscale网络中

参考

  1. tailscale内网穿透之自建的derper服务器,无需域名,无需备案,全流程教程
  2. 自建 Tailscale 的 DERP 节点
  3. 浅探 Tailscale DERP 中转服务
  4. 近期折腾 tailscale 的一些心得
  5. 最新的tailscale部署自定义derper教程(后台配置有彩蛋)
0

评论区