docker部署Tailscale的节点中继derper 纯 IP 无需域名

这篇具有很好参考价值的文章主要介绍了docker部署Tailscale的节点中继derper 纯 IP 无需域名。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、Fork Tailscale 代码到自己仓库

tailscale代码仓库

2、 找到 tailscale 代码中的 cmd/derper/cert.go 文件,将与域名验证相关的内容删除或注释:

修改之后记得提交代码

func (m *manualCertManager) getCertificate(hi *tls.ClientHelloInfo) (*tls.Certificate, error) {
	//if hi.ServerName != m.hostname {
	//	return nil, fmt.Errorf("cert mismatch with hostname: %q", hi.ServerName)
	//}
	return m.cert, nil
}

3、编写创建自签名证书,通过以下build_cert.sh脚本:

# build_cert.sh

#!/bin/bash

CERT_HOST=$1
CERT_DIR=$2
CONF_FILE=$3

echo "[req]
default_bits  = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
countryName = XX
stateOrProvinceName = N/A
localityName = N/A
organizationName = Self-signed certificate
commonName = $CERT_HOST: Self-signed certificate

[req_ext]
subjectAltName = @alt_names

[v3_req]
subjectAltName = @alt_names

[alt_names]
IP.1 = $CERT_HOST
" > "$CONF_FILE"

mkdir -p "$CERT_DIR"
openssl req -x509 -nodes -days 730 -newkey rsa:2048 -keyout "$CERT_DIR/$CERT_HOST.key" -out "$CERT_DIR/$CERT_HOST.crt" -config "$CONF_FILE"

4、编写 Dockerfile,将 MODIFIED_DERPER_GIT 的设置为自己的tailscale代码仓库git地址,BRANCH设置为代码分支

FROM golang:latest AS builder

WORKDIR /app

# ========= CONFIG =========
# - download links
ENV MODIFIED_DERPER_GIT=https://github.com/xxxxx/tailscale.git
ENV BRANCH=main
# ==========================

# build modified derper
RUN git clone -b $BRANCH $MODIFIED_DERPER_GIT tailscale --depth 1 && \
    cd /app/tailscale/cmd/derper && \
    /usr/local/go/bin/go build -ldflags "-s -w" -o /app/derper && \
    cd /app && \
    rm -rf /app/tailscale

FROM ubuntu:20.04
WORKDIR /app

# ========= CONFIG =========
# - derper args
ENV DERP_HOST=127.0.0.1
ENV DERP_CERTS=/app/certs/
ENV DERP_STUN true
ENV DERP_VERIFY_CLIENTS false
# ==========================

# apt
RUN apt-get update && \
    apt-get install -y openssl curl

COPY build_cert.sh /app/
COPY --from=builder /app/derper /app/derper

# build self-signed certs && start derper
CMD bash /app/build_cert.sh $DERP_HOST $DERP_CERTS /app/san.conf && \
    /app/derper --hostname=$DERP_HOST \
    --certmode=manual \
    --certdir=$DERP_CERTS \
    --stun=$DERP_STUN  \
    --verify-clients=$DERP_VERIFY_CLIENTS

5、构建docker镜像

构建镜像可能需要科学上网,下载一些依赖包。
!!!注意build_cert.sh和Dockerfile应该在在同一目录下
进入Dockerfile所在目录下执行构建镜像命令

docker build -t derper:V1.0 . 

6、运行docker derper 容器,并将端口映射出来

将443和3478端口映射到宿主机上;

docker run --restart always --name derper -p 4435:443 -p 3478:3478/udp  -d <derper镜像id>

云服务器若是开启了防火墙记得开放相关端口,云服的安全策略组也要开放端口。

7、查看容器日志

docker logs -f derper
Generating a RSA private key
.......................................+++++
..............+++++
writing new private key to '/app/certs//127.0.0.1.key'
-----
2023/02/26 14:30:31 no config path specified; using /var/lib/derper/derper.key
2023/02/26 14:30:31 derper: serving on :443 with TLS
2023/02/26 14:30:31 running STUN server on [::]:3478

tailscale netcheck 实际上只检测 3478/udp 的端口, 就算 netcheck 显示能连,也不一定代表 4435端口可以转发流量。最简单的办法是直接打开 DERP 服务器的 URL:https://ip:4435,如果看到如下页面,且地址栏的 SSL 证书标签显示正常可用,那才是真没问题了。
docker部署Tailscale的节点中继derper 纯 IP 无需域名

8、Headscale 的配置中需要将 DERP

我们在 Headscale 的配置中需要将 DERP 的域名设置为 IP!除了 derper 之外,Tailscale 客户端还需要跳过域名验证,这个需要在 DERP 的配置中设置。而 Headscale 的本地 YAML 文件目前还不支持这个配置项,所以没办法,咱只能使用在线 URL 了。JSON 配置内容如下:

{
  "Regions": {
    "901": {
      "RegionID": 901,
      "RegionCode": "ali-sh",
      "RegionName": "Aliyun Shanghai",
      "Nodes": [
        {
          "Name": "901a",
          "RegionID": 901,
          "DERPPort": 4435,
          "HostName": "xxxx",
          "IPv4": "xxxx",
          "InsecureForTests": true
        }
      ]
    }
  }
}

配置解析:

1、HostName 直接填 derper 的公网 IP,即和 IPv4 的值相同。
2、InsecureForTests 一定要设置为 true,以跳过域名验证。
3、Regions 是对象,下面的每一个对象表示一个可用区,每个可用区里面可设置多个 DERP 节点,即 Nodes。
4、每个可用区的 RegionID 不能重复。
5、每个 Node 的 Name 不能重复。
6、RegionName 一般用来描述可用区,RegionCode 一般设置成可用区的缩写
7、DERPPort为docker运行的derper服务443端口映射出来的端口
上面的配置中域名和 IP 部分,你需要根据你的实际情况填写

你需要把这个 JSON 文件变成 Headscale 服务器可以访问的 URL,比如在 Headscale 主机上搭个 Nginx(nginx配置),或者上传到对象存储(比如阿里云 OSS)。

9、 修改 Headscale 的配置文件

编辑config.yaml

vim /etc/headscale/config.yaml

注意urls配置:

# /etc/headscale/config.yaml
derp:
  # List of externally available DERP maps encoded in JSON
  urls:
  #  - https://controlplane.tailscale.com/derpmap/default
  #http还是https根据自己的nginx或者是oss来配置
    - https://xxxxx/derp.json

  # Locally available DERP map files encoded in YAML
  #
  # This option is mostly interesting for people hosting
  # their own DERP servers:
  # https://tailscale.com/kb/1118/custom-derp-servers/
  #
  # paths:
  #   - /etc/headscale/derp-example.yaml
  paths: []
   # - /etc/headscale/derp.yaml

  # If enabled, a worker will be set up to periodically
  # refresh the given sources and update the derpmap
  # will be set up.
  auto_update_enabled: true

  # How often should we check for DERP updates?
  update_frequency: 24h

修改完配置后,重启 headscale 服务:

systemctl restart headscale

Tailscale 客户端上使用以下命令查看目前可以使用的 DERP 服务器

tailscale netcheck

Report:
	* UDP: true
	* IPv4: yes, 192.168.100.1:49656
	* IPv6: no
	* MappingVariesByDestIP: true
	* HairPinning: false
	* PortMapping: UPnP
	* Nearest DERP: Home Hangzhou
	* DERP latency:
		- home: 9.7ms   (Home Hangzhou)
		-  hs: 25.2ms  (Huawei Shanghai)
		- thk: 43.5ms  (Tencent Hongkong)

再次查看与通信对端的连接方式:

tailscale status
                coredns              default      linux   active; direct xxxx:45986; offline, tx 131012 rx 196020
                oneplus-8t           default      android active; relay "home"; offline, tx 211900 rx 22780
                openwrt              default      linux   active; direct 192.168.100.254:41641; offline, tx 189868 rx 4074772

可以看到这一次 Tailscale 自动选择了一个线路最优的国内的 DERP 服务器作为中继,可以测试一下延迟:

tailscale ping 10.1.0.8
pong from oneplus-8t (10.1.0.8) via DERP(home) in 30ms
pong from oneplus-8t (10.1.0.8) via DERP(home) in 45ms
pong from oneplus-8t (10.1.0.8) via DERP(home) in 30ms

10、防止 DERP 被白嫖

默认情况下 DERP 服务器是可以被白嫖的,只要别人知道了你的 DERP 服务器的地址和端口,就可以为他所用。如果你的服务器是个小水管,用的人多了可能会把你撑爆,因此我们需要修改配置来防止被白嫖。

特别声明:只有使用域名的方式才可以通过认证防止被白嫖,使用纯 IP 的方式无法防白嫖,你只能小心翼翼地隐藏好你的 IP 和端口,不能让别人知道。

只需要做两件事情:

1、在 DERP 服务器上安装 Tailscale。

第一步需要在 DERP 服务所在的主机上安装 Tailscale 客户端,启动 tailscaled 进程。

2、derper 启动时加上参数 --verify-clients。
默认情况下 --verify-clients 参数设置的是 false。我们不需要对 Dockerfile 内容做任何改动,只需在容器启动时加上环境变量即可,将之前的启动命令修改一下:

docker run --restart always --name derper -p 4435:443 -p 3478:3478/udp   -e DERP_VERIFY_CLIENTS=true  -d  <derper镜像id>

!!!自己的服务器IP和端口还是尽量隐藏好

参考大佬们的教程:
Tailscale 基础教程:部署私有 DERP 中继服务器
headscale保底设施之DERP中继服务器自建文章来源地址https://www.toymoban.com/news/detail-416041.html

到了这里,关于docker部署Tailscale的节点中继derper 纯 IP 无需域名的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RustDesk自建中转服务器如何自己编译 RustDesk客户端,将企业固定IP/域名写进客户端,客户端安装无需配置直接使用(三)

    Ubuntu20.04.4 LTS Docker Version: 20.10.12 RustDesk1.20 Git-2.39.0-64-bit visual studio 2022 VSCodeUserSetup-x64-1.74.1 RustDesk自建中转服务器如何自己编译 RustDesk客户端,将企业固定IP/域名写进客户端,客户端安装无需配置直接使 最近有粉丝反映,编译最后会提示key不匹配等问题,拉取普通开源版,别

    2024年02月05日
    浏览(127)
  • 如何在本地服务器部署TeslaMate并远程查看特斯拉汽车数据无需公网ip

    TeslaMate是一个开源软件,可以通过连接特斯拉账号,记录行驶历史,统计能耗、里程、充电次数等数据。用户可以通过web界面查看车辆状态、行程报告、充电记录等信息,并生成漂亮的图表和统计报告。 另外,TeslaMate也可以记录车子所有的位置、轨迹、速度、温度、海拔、续

    2024年02月21日
    浏览(30)
  • 【Nginx】Docker配置ngnix,实现同服务器ip多站点多域名

    Docker配置ngnix,实现同服务器ip,多域名映射多站点 本文首发于 慕雪的寒舍 一般情况下,我们的域名映射到ip后,默认访问的是80端口。如果你的服务器只部署了一个服务,这样也是够用的。 但是很多项目对性能的占用并没有那么夸张,一个服务器一个站点未免有些浪费了。

    2024年02月08日
    浏览(45)
  • Nignx安装&负载均衡&动静分离以及Linux前端项目部署&将域名映射到特定IP地址

    目录 一、nginx简介 1.1 定义 1.2 背景 1.3 作用 二、nginx搭载负载均衡提供前后分离后台接口数据 2.1 nginx安装 2.1.1 下载依赖 2.1.2 下载并解压安装包 2.1.3 安装nginx 2.1.4 启动nginx服务 2.2 tomcat负载均衡 2.2.1 负载均衡所需服务器准备 2.2.2 配置修改 2.2.3 重启nginx 2.2.4 效果展示 2.3 后端

    2024年02月05日
    浏览(52)
  • Docker部署SpringBoot +Vue项目流程详解(含域名 + HTTPS)

    前言 本次整体部署操作使用 阿里云 服务器,这里我选择的是 香港地区 的 2核2G ECS (可以省略域名备案操作)。 涉及到的中间件如下: Nginx MySQL Redis 后端项目 前端项目 1、选购服务器 首先登录到阿里云的官网,选购一台公网服务器,由于本次我部署项目体量比较小,所以

    2024年02月08日
    浏览(31)
  • Tailscale 基础教程:Headscale 的部署方法和使用教程

    Tailscale 是一种基于 WireGuard 的虚拟组网工具,它在用户态实现了 WireGuard 协议,相比于内核态 WireGuard 性能会有所损失,但在功能和易用性上下了很大功夫: 开箱即用 无需配置防火墙 没有额外的配置 高安全性/私密性 自动密钥轮换 点对点连接 支持用户审查端到端的访问记录

    2024年02月03日
    浏览(30)
  • docker 部署一个单节点的rocketmq

    拉取镜像 创建数据挂载目录 启动NameServer 编辑broker配置文件 启动broker 启动web端控制rocketmq 通过浏览器进行访问:http://192.168.214.134:8080/

    2024年02月15日
    浏览(28)
  • crawlab通过docker单节点部署简单爬虫

    crawlab 此处介绍的是单节点的方式,多节点的情况可以把爬虫上传到一个节点中,之后会同步到其它节点上 docker-compose up -d 运行,访问 localhost:8080 ,用户密码均为admin 此处上传一个爬取图片的简单爬虫,上传requirements.txt或者package.json文件,crawlab会自动扫描并安装依赖,但是

    2024年02月10日
    浏览(25)
  • Docker部署ddns-go,动态域名解析公网IPv6地址

    ddns-go,自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。 嫌IPv6地址太难记?ddns来解决,将家里的公网IPv6地址用起来吧! 为什么需要DDNS 因为一般家庭或企业用户所获得的的 广域网ip并非固定,而是会时常变化 ,一旦变化,我们的域名针对ip的A类解析记录就会

    2024年02月02日
    浏览(47)
  • 用docker-compose部署Rabbitmq三节点集群部署方案

    主机名 IP node1 10.4.2.10 node2 10.4.2.59 node3 10.4.2.134 (1) 在/root目录下先创建一个rabitmq目录用于存放文件 mkdir  rabitmq (2)修改主机名和域名解析hosts文件 (1)修改主机名 hostnamectl set-hostname  node1    hostnamectl set-hostname  node2 hostnamectl set-hostname  node3 node1  node2   node3 分别对应

    2024年02月04日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包