Caddy2学习笔记——Caddy2反向代理docker版本的DERP中继服务器

news2025/1/23 15:13:09

一、个人环境概述

  1. 本人拥有一个国内云服务商的云主机和一个备案好的域名,通过caddy2来作为web服务器。我的云主机系统是Ubuntu。

  2. 我的云主机是公网ip,地址为:43.126.100.78;我备案好的域名是:hotgirl.com。后面的文章都以上述的ip和域名来进行讲解。

  3. 域名 hotgirl.com 已经通过云服务商的域名解析功能,解析到43.126.100.78。

  4. 我在云主机上安装了一个docker版本的headscale。通过caddy反向代理后的地址是:https://head.hotgirl.com。具体参看教程:Caddy2反向代理docker版本的headscale 。

二、部署docker环境

具体参看教程:Caddy2反向代理docker版本的headscale 的第二部分内容。

三、指定DERP中继服务器的域名

  1. 已知
    我的云主机是公网ip,地址为:43.126.100.78;我备案好的域名是:hotgirl.com 。我在云主机上安装了一个docker版本的headscale。通过caddy反向代理后的地址是:https://head.hotgirl.com
  2. 解析
    添加一个A记录,把 “https://derper.hotgirl.com” 解析到云主机的公网ip43.126.100.78。 “https://derper.hotgirl.com” 这个地址作为中继服务器的服务地址。

四、开放云服务器端口

  1. 指定DERP端口
    DERP中继服务器需要一个tcp端口,这个端口可以自定义,我这里就定为:15489。然后,需要在你的云服务器的防火墙,放行 15489 这个端口。
firewall-cmd --add-port=15489/tcp --permanent

#重启防火墙
firewall-cmd --reload
  1. 配置安全组规则
    在云主机的“配置安全组规则” 中,手动添加上 15489 端口:
    在这里插入图片描述

五、docker版本的DERP中继服务器安装

  1. 创建目录
#创建DERP中级服务器根目录
mkdir -p /docker/derp
  1. 创建docker-compose.yaml文件
    首先 cd /docker/derp 进入derp这个目录,创建docker-compose.yaml文件,并加入以下代码:
version: "3"
services:
  derper:
    container_name: derper
    image: fredliang/derper
    restart: always
    ports:
      - 3478:3478/udp
      - 15489:15489
    environment:
      DERP_DOMAIN: derper.hotgirl.com
      DERP_ADDR: ":15489"
  1. 创建容器
    cd到“/docker/derp”这个目录下,执行“docker-compose up -d” 命令。
cd /docker/derp

docker-compose up -d

六、Caddy2反向代理DERP中继服务器

根据我前面的文章 Caddy2的安装、部署和编译小白教程 这篇文章中讲解的,修改Caddyfile这个文件:

vim /etc/caddy/Caddyfile

然后添加下面代码:

#Headscale
#中继服务器
derper.hotgirl.com {
        tls {
               get_certificate tailscale
        }
        reverse_proxy  http://172.17.0.1:15489{
        }
}

然后重启下caddy

systemctl reload caddy

如果 https://derper.hotgirl.com 打开后显示如下图,则说明中继服务器部署成功!
在这里插入图片描述

七、将中继服务器加入到headscale中

  1. 创建derp.yaml文件
# /etc/headscale/derp.yaml
regions:
  902:
    regionid: 902
    regioncode: sch
    regionname: Home Sichuan 
    nodes:
      - name: 902a
        regionid: 902
        hostname: 'derper.hotgirl.com'
        ipv4: ''
        stunport: 3478
        stunonly: false
        derpport: 443

上面的derp.yaml文件中,902 、902a 根据需要改成自己的regionid,总共四个地方,要改统一改掉。hostname就填写第六步中反代的中继服务器地址。

  1. 移动derp.yaml
    上一步骤的derp.yaml文件创建好后,放入到headscale的config文件夹,和config.yaml同级。如果你参照我的这篇 Caddy2反向代理docker版本的headscale 文章,就知道config.yaml和derp.yaml 都在 /docker/headscale/config 这个目录内。
  2. 修改headscale的配置文件
    进入headscale的配置文件目录( /docker/headscale/config ),打开config.yaml,修改如下:
# DERP is a relay system that Tailscale uses when a direct
# connection cannot be established.
# https://tailscale.com/blog/how-tailscale-works/#encrypted-tcp-relays-derp
#
# headscale needs a list of DERP servers that can be presented
# to the clients.
derp:
  # List of externally available DERP maps encoded in JSON
  urls:
    - https://controlplane.tailscale.com/derpmap/default

  # 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.yaml
  #paths: []

  # 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

上面的代码路径 /etc/headscale/derp.yaml ,是容器内的路径,根据我的这篇 Caddy2反向代理docker版本的headscale 文章,回顾下headscale的docker-compose.yaml文件

version: '3.1'
services:
  headscale:
    image: headscale/headscale
    container_name: headscale
    volumes:
      - /docker/headscale/config:/etc/headscale
      - /docker/headscale/data:/var/lib/headscale
      - /docker/headscale/run:/var/run/headscale
    ports:
      - '0.0.0.0:8181:8181'
      - '0.0.0.0:9191:9191'
    command: headscale serve
    restart: unless-stopped

可以看出来,容器内路径“/etc/headscale” 是映射到了服务器路径 “/docker/headscale/config” ,所以我们只需把derp.yaml放入“/docker/headscale/config” 路径内,并文件名对应即可。

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

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

相关文章

【量化交易笔记】3.实现数据库保存数据

上一节,我们通过下载相关的 pandas 数据保存为 本地csv文件,这一节将上节的数据以数据库方式保存。 数据库保存 采集数据部分前一节已做说明,这里就直接用采用前面的内容。这里着重说明的事数据库连接。对与 python 相连接的数据库有很多&a…

玩转Python的交互(命令行)模式

我喜欢使用Python的交互界面(命令行模式)来运行和调试Python代码。为什么不用PyCharm、VSCode?因为先入为主,加上我的DOS命令行的情结,我第一次安装使用Python就是用这种黑白界面的,平时写代码惯用EmEditor…

MySQL慢查询

2 慢查询 2.1 慢查询介绍 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。具体指运行时间超过long_query_time值的SQL&…

软件测试之快速熟悉项目

快速熟悉项目 1、了解项目架构 C/S架构 C/S 代表的是客户端/服务器(client/server),这类软件的使用者需要在本地电脑安装客户端程序,例如:QQ。 优点:安全性高。 缺点:一旦软件有更新,用户需要手动下载&am…

Rust 开发系列PyO3:Rust与Python的联动编程(中)

第三节:对比C语言的Python原生扩展开发模式 C/c编写Python扩展的方法,与Rust大致是相同的,如果不论语言本身的语法带来的繁琐的话,就单纯以开发步骤和模式来看,原生语言写扩展的步骤更为标准和简单。 大致来说&#…

QT入门Item Views之QTreeView

目录 一、QTreeView界面相关 1、布局介绍 二、基本属性功能 1、设置单元格不能编辑 2、一次选中一个item 3、去掉鼠标移动到单元格上的虚线框 4、最后一列自适应 三、代码展示 1、创建模型,导入模型 2、 右键菜单栏 3、双…

深度学习模型训练工作汇报(3.8)

进行数据的初始整理的准备 主要是进行伪序列字典的设置,以及训练数据集的准备。 期间需要的一些问题包括在读取文件信息的时候,需要跳过文件的第一行或者前两行,如果使用循环判断的话,会多进行n次的运算,这是不划算的…

003+limou+HTML——(3)HTML列表

000、前言 列表是网页常见的一种数据排列方式,在HTMl中列表一共有三种:有序列表、无序列表、定义列表(另外“目录列表dir”和“菜单列表menu”已经在HTML5中被废除了,现在都是使用无序列表ul来替代) 001、有序列表&a…

C/C++指针与数组(一)

预备知识 1、数据的存储 2、基本内建类型 1)类型的大小 C offers a flexible standard with some guaranteed minimum sizes, which it takes from C: A short integer is at least 16 bits wide.An int integer is at least as big as short.A long integer is a…

Spring Cloud学习笔记:基础知识

这是本人学习的总结,主要学习资料如下 马士兵教育 目录1、Spring Cloud 简介2、Eureka3、建立Spring Cloud项目3.1、启动Server3.1.1、dependency3.1.2、配置文件3.1.3、Server端启动代码3.2、启动Client3.2.1、dependency3.2.2、配置文件3.3.3、Client端启动代码3…

Go之入门(特性、变量、常量、数据类型)

一、Go语言特性 语法简单并发性。Go语言引入了协程goroutine,实现了并发编程内存分配。Go语言为了解决高并发下内存的分配和管理,选择了tcmalloc进行内存分配(为了并发设计的高性能内存分配组件,使用cache为当前线程提供无锁分配…

电脑自动重启是什么原因?详细解说

案例:电脑自动重启是什么原因? “一台用了一年的电脑,最近使用,每天都会一两次莫名其妙自动重启,看了电脑错误日志,看不懂什么意思,一直找不到答案。有没有高手知道怎么解决这个问题的。” 当…

仿写简单IOC

目录 TestController类: UserService类: 核心代码SpringIOC: Autowired和Component注解 SpringIOCTest 类 ​编辑 总结: TestController类: Component public class TestController {Autowiredprivate UserService userService;public void test…

RocketMQ如何测试

RocketMQ如何测试MQ简介RocketMQRocketMQ测试点MQ简介 MQ:Message Queue,即消息队列,是一种应用程序之间的消息通信,简单理解就是A服务不断的往队列里发布信息,另一服务B从队列中读取消息并执行处理,消息发…

同步、异步ETL架构的比较

背景介绍: 数据的抽取,转换和加载 (ETL, Extract, Transform, Load) 是构建数据仓库过程中最复杂也是至 关重要的一个步骤,我们通常用两种办法来处理 ETL 流程: 一种是异步(Asynchronous) ETL 方式, 也称为文本文件(Flat file)方式。 另外…

华为云平台架构名词解释

名词解释 网络设备 ISW(外网接入交换机):出口交换机,常用于和外网建立静态/BGP路由互联 CSW (内网接入交换机):专线接入(用户内网骨干)交换机,用户自有网络…

一场以数字技术深度影响和改造传统实业的新风口,正在开启

当数字经济的浪潮开始上演,一场以数字技术深度影响和改造传统实业的新风口,正在开启。对于诸多在互联网时代看似业已走入死胡同的物种来讲,可以说是打开了新的天窗。对于金融科技来讲,同样如此。以往,谈及金融科技&…

蓝桥杯-左移右移(2022国赛)

蓝桥杯-左移右移1、问题描述2、解题思路与代码实现2.1 方法一:使用LinkedList双向链表实现(50%)2.2 方法二:使用HashMap左右临界值实现(100%)1、问题描述 小蓝有一个长度为 N 的数组, 初始时从左到右依次是 1,2,3,…N 。 之后小蓝对这个数组进行了 M 次操…

TX2配置RealSense D455相机SDK和ros驱动

TX2配置RealSense D455相机SDK和ros驱动1 SDK安装2 RealSense-ros安装3 bug及解决3.1 realsense-viewer显示usb2.13.2 Could not found ddynamic_reconfigure折腾了两天终于把realsense的驱动装好了,尝试了命令安装,源码安装,前前后后搞了三遍…

12.并发编程

1.并发并发:逻辑流在时间时重叠构造并发程序:进程:每个逻辑控制流是一个进程,由内核调度和维护进程有独立的虚拟地址空间,想要通信,控制流必须使用某种显式的进程间通信机制(IPC)I/O多路复用:程…