2024/11/14 测了下,STUN不配置好像也没问题

前情提要

之前在两个hk服务器部署了derper, 但是两台机器线路都不大行

刚买来差不多 150ms, 现在测了下要 300ms+

于是准备在另一台线路较好的机器上部署

不过这台机器部署了其它网站, 80和443端口都占用

相关链接

部署环境

  • 公网机器

    • 境外

    • 443端口占用, 部署了其它服务

    • 使用1Panel面板

  • 内网机器

    • 内地

    • 使用frp

    • 443端口占用, 部署了其它服务

    • 使用1Panel面板

部署步骤

公网机器

  1. 先启动derper

version: '3.8'
services:
  derper:
    image: fredliang/derper
    container_name: derper
    restart: always
    environment:
      - DERP_CERT_MODE=letsencrypt  # 手动设置证书 (好像没啥用, 懒得删)
      - DERP_ADDR=:30001  # 中转端口
      - DERP_HTTP_PORT=-1  # 用不到也可以填入 -1 关闭 HTTP 服务
      - DERP_STUN_PORT=30002  # STUN 打洞端口
      - DERP_DOMAIN=pc1.example.com  # 服务器域名
      - DERP_VERIFY_CLIENTS=true  # 验证客户端身份,防止白嫖
    ports:
      - "30001:30001"
      - "30002:30002/udp"
    volumes:
      - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock  # tailscale 客户端进程,用于验证客户端身份
  1. cloudflare解析IP

pc1.example.com 解析到公网IP

  1. 1Panel创建网站

域名绑定pc1.example.com , 反向代理 http://127.0.0.1:30001

  1. 申请证书

申请pc1.example.com 的证书, 然后部署在1Panel部署的网站上

  1. tailscale配置

https://login.tailscale.com/admin/acls/file 进行配置

详细配置前往 https://tailscale.com/kb/1018/acls

我的配置如下

DERPPort要设置成443 (也许不需要设置), 因为流量实际由nginx代理, 并且证书也是部署在上面的

{
	"derpMap": {
		"OmitDefaultRegions": true, # 是否禁用公共derper
		"Regions": {
			"900": {
				"RegionID":   900,
				"RegionCode": "eya46-hk",
				"RegionName": "Hong Kong",
				"Nodes": [
					{
						"Name": "名称",
						"RegionID": 900,
						"HostName": "pc1.example.com",
						"DERPPort": 443,
						"STUNPort": 30002,
						"STUNOnly": false,
					},
				],
			},
		},
	},
}

内网机器

跟公网机器基本相同, 不过直接用frp进行代理

  1. 先启动derper

version: '3.8'
services:
  derper:
    image: fredliang/derper
    container_name: derper
    restart: always
    environment:
      - DERP_CERT_MODE=letsencrypt  # 手动设置证书 (好像没啥用, 懒得删)
      - DERP_ADDR=:30001  # 中转端口
      - DERP_HTTP_PORT=-1  # 用不到也可以填入 -1 关闭 HTTP 服务
      - DERP_STUN_PORT=30002  # STUN 打洞端口
      - DERP_DOMAIN=pc2.example.com  # 服务器域名
      - DERP_VERIFY_CLIENTS=true  # 验证客户端身份,防止白嫖
    ports:
      - "30001:30001"
      - "30002:30002/udp"
    volumes:
      - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock  # tailscale 客户端进程,用于验证客户端身份
  1. 申请证书

申请pc2.example.com 的证书, 并且勾选 推送到本地目录

目录可任意选择, 我设置的是 /opt/frp/derper

  1. 创建FRP隧道

frp服务端用的是 passnat https://dashboard.passnat.com/reg?aff=admin

HTTPS证书路径填写:

Crt 证书路径/opt/frp/derper/fullchain.pem

Key 密钥路径/opt/frp/derper/privkey.pem

协议 本机IP 本地端口 远程端口 域名
HTTPS 127.0.0.1 30001 443 pc2.example.com
UDP 127.0.0.1 30002 30002

注意frp服务商是否允许udp, 不然连不上

创建完隧道后, 复制配置到内网机器启动

  1. cloudflare解析IP

pc2.example.com 解析到 frp 服务的IP (frp服务商通常会显示为 远程IP )

  1. tailscale配置

https://login.tailscale.com/admin/acls/file 进行配置

详细配置前往 https://tailscale.com/kb/1018/acls

我的配置如下

DERPPort要设置成443 (也许不需要设置)

{
	"derpMap": {
		"OmitDefaultRegions": true, # 是否禁用公共derper
		"Regions": {
			"901": {
				"RegionID":   901,
				"RegionCode": "eya46-cn",
				"RegionName": "CN",
				"Nodes": [
					{
						"Name": "名称",
						"RegionID": 901,
						"HostName": "pc2.example.com",
						"DERPPort": 443,
						"STUNPort": 30002,
						"STUNOnly": false,
					},
				],
			},
		},
	},
}

其它

测试连接

使用浏览器访问域名, 显示下面的内容则正常

当然最重要的是能正常中继

STUN不知道怎么测

OmitDefaultRegions 还是推荐开启, 免得中继挂了连不上

关掉方便测试连接