Caddy2学习笔记——Caddy2反向代理Frp内网穿透和反向代理PVE

news2024/10/2 8:42:22

一、环境概述

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

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

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

二、安装Frp服务端

我这里安装的是docker版本的frps。

  1. 创建目录
#创建frps目录
mkdir -p /docker/frps

  1. 配置文件
[common]
bind_port = 1600 
kcp_bind_port = 1600
token = YU&*JB%
dashboard_port = 2500 
dashboard_user = root 
dashboard_pwd = root 

vhost_http_port = 8108
vhost_https_port = 4334


authentication_timeout=0
privilege_mode=true

max_pool_count = 50
tcp_mux=true
log_file = ./frps.log  
log_level = info
log_max_days = 3

subdomain_host = frp.hotgirl.com

上述配置文件存为frps.ini ,然后放入/docker/frps 路径内。

  1. docker-compose.yaml文件
version: '3'
services:
    frps:
        restart: always
        network_mode: host
        volumes:
            - './frps.ini:/etc/frp/frps.ini'
        container_name: frps
        image: snowdreamtech/frps
  1. 创建容器
    cd到“/docker/frps”这个目录下,执行“docker-compose up -d” 命令。
cd /docker/frps

docker-compose up -d

三、解析域名和开放端口

  1. 域名解析
    这里我们用“frp.hotgirl.com” 来作为内网frp穿透的服务地址。首先在域名服务商的解析服务中,添加A记录,将把 “frp.hotgirl.com” 解析到云主机的公网ip43.126.100.78。然后将*.frp 用CNAME解析到“frp.hotgirl.com”。如下图所示:
    在这里插入图片描述
    2.开发端口
    需要在你的云服务器的防火墙,放行 frps.ini 这个文件中包含的 所有端口。
firewall-cmd --add-port=1600/tcp --permanent

firewall-cmd --add-port=2500/tcp --permanent

firewall-cmd --add-port=8108/tcp --permanent

firewall-cmd --add-port=4334/tcp --permanent

#重启防火墙
firewall-cmd --reload

然后在云主机的“配置安全组规则” 中,手动添加上述四个端口,这里我就不截图了,可以参考 Caddy2反向代理docker版本的headscale 这篇文章中的第四部分内容。

四、Frp客户端配置

客户端根据自己的平台来选择服务安装或者docker安装,都一样。这里贴一下配置:

[common]
server_addr = 43.126.100.78 #远程frp服务器IP
server_port = 1600 #远程frp服务器端口
token = YU&*JB% #远程frp服务器token

#穿透内网的OpenWRT
[http_OpenWRT]
type = http
local_ip = 192.168.1.1 #根据自己内网网段修改
local_port = 80 #OpenWRT管理地址的端口
remote_port = 8108 #远程frp服务器的http服务端口号
#custom_domains = 自定义配置的域名
#我这里用的子域名模式,只需要在服务端配置了“subdomain_host = frp.hotgirl.com”
#后面客户端只需要填写subdomain = XXX
#就可以通过 XXX.frp.hotgirl.com 来访问内网的web服务了
subdomain = opt #匹配服务端配置的subdomain_host,随后通过opt.frp.hotgirl.com 来访问内网的OpenWRT

#穿透内网的NAS
[http_Nas]
type = http
local_ip = 192.168.1.7 #根据自己内网网段修改
local_port = 5000 #nas管理地址的端口
remote_port = 8108 #远程frp服务器的http服务端口号
#custom_domains = 自定义配置的域名
#我这里用的子域名模式,只需要在服务端配置了“subdomain_host = frp.hotgirl.com”
#后面客户端只需要填写subdomain = XXX
#就可以通过 XXX.frp.hotgirl.com 来访问内网的web服务了
subdomain = nas #匹配服务端配置的subdomain_host,随后通过nas.frp.hotgirl.com 来访问内网的nas

五、Caddy2反向代理Frp

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

vim /etc/caddy/Caddyfile

加入以下代码:

*.frp.hotgirl.com {
        tls {
            dns alidns {
                access_key_id "ali key_id"
                access_key_secret "ali key_secret"
            }
        }
        reverse_proxy 127.0.0.1:8108{
            header_up X-Real-IP {http.request.remote}
            header_up X-Forwarded-For {http.request.remote}
            header_up X-Forwarded-Port {http.request.port}
            header_up X-Forwarded-Proto {http.request.scheme}
        }
}

因为我内网的web服务多,所以我就用“ *.frp.hotgirl.com ”这种简便的方式,但是这种泛域名需要用caddy的dns插件实现,需要自行编译,编译的教程已经在Caddy2的安装、部署和编译小白教程 这篇文章中讲过了,不明的同学可以回看一下。当然如果,你的内网的web服务不是很多,也没有自行编译caddy,用的还是官方标准版本,那么还可以一个web服务一个web服务的写,比如内网的OpenWRT和内网的nas,就可以这样写:

opt.frp.hotgirl.com {
        tls  112244@qq.com
        reverse_proxy 127.0.0.1:8108{
            header_up X-Real-IP {http.request.remote}
            header_up X-Forwarded-For {http.request.remote}
            header_up X-Forwarded-Port {http.request.port}
            header_up X-Forwarded-Proto {http.request.scheme}
        }
}

nas.frp.hotgirl.com {
        tls  112244@qq.com
        reverse_proxy 127.0.0.1:8108{
            header_up X-Real-IP {http.request.remote}
            header_up X-Forwarded-For {http.request.remote}
            header_up X-Forwarded-Port {http.request.port}
            header_up X-Forwarded-Proto {http.request.scheme}
        }
}

六、Caddy2反向代理Frp内网PVE

  1. 说明
    大家都知道,内网PVE的管理端口是8006,而且是https,如果直接用上面反代Frp的方式是不行的。

  2. 用Frp中的TCP模式
    那么修改后的客户端的frpc.ini配置文件如下:

[common]
server_addr = 43.126.100.78 #远程frp服务器IP
server_port = 1600 #远程frp服务器端口
token = YU&*JB% #远程frp服务器token

#穿透内网的OpenWRT
[http_OpenWRT]
type = http
local_ip = 192.168.1.1 #根据自己内网网段修改
local_port = 80 #OpenWRT管理地址的端口
remote_port = 8108 #远程frp服务器的http服务端口号
#custom_domains = 自定义配置的域名
#我这里用的子域名模式,只需要在服务端配置了“subdomain_host = frp.hotgirl.com”
#后面客户端只需要填写subdomain = XXX
#就可以通过 XXX.frp.hotgirl.com 来访问内网的web服务了
subdomain = opt #匹配服务端配置的subdomain_host,随后通过opt.frp.hotgirl.com 来访问内网的OpenWRT

#穿透内网的NAS
[http_Nas]
type = http
local_ip = 192.168.1.7 #根据自己内网网段修改
local_port = 5000 #nas管理地址的端口
remote_port = 8108 #远程frp服务器的http服务端口号
#custom_domains = 自定义配置的域名
#我这里用的子域名模式,只需要在服务端配置了“subdomain_host = frp.hotgirl.com”
#后面客户端只需要填写subdomain = XXX
#就可以通过 XXX.frp.hotgirl.com 来访问内网的web服务了
subdomain = nas #匹配服务端配置的subdomain_host,随后通过nas.frp.hotgirl.com 来访问内网的nas

#穿透内网的PVE
[tcp]
type = tcp
local_ip = 192.168.1.2 #PVE的管理页面地址
local_port = 8006      #PVE的管理页面的端口
remote_port = 8777     #映射到云服务器上

上面这个 “8777” 端口,可以自定义,根据自己需要修改。但是还是需要再云服务器上,放行这个端口:

firewall-cmd --add-port=8777/tcp --permanent

#重启防火墙
firewall-cmd --reload

然后在云主机的“配置安全组规则” 中,手动添加上述8777端口,这里我就不截图了,可以参考 Caddy2反向代理docker版本的headscale 这篇文章中的第四部分内容。

  1. 解析PVE的域名
    在域名服务商的解析服务中,添加A记录,将把 “pve.hotgirl.com” 解析到云主机的公网ip43.126.100.78。这一步万不能漏掉,因为在caddy中,每一个代理都需要域名指向明确的公网IP地址。
  2. 再次修改Caddyfile
    根据我前面的文章 Caddy2的安装、部署和编译小白教程 这篇文章中讲解的,修改Caddyfile这个文件:
vim /etc/caddy/Caddyfile

修改为以下代码:

opt.frp.hotgirl.com {
        tls  112244@qq.com
        reverse_proxy 127.0.0.1:8108{
            header_up X-Real-IP {http.request.remote}
            header_up X-Forwarded-For {http.request.remote}
            header_up X-Forwarded-Port {http.request.port}
            header_up X-Forwarded-Proto {http.request.scheme}
        }
}

nas.frp.hotgirl.com {
        tls  112244@qq.com
        reverse_proxy 127.0.0.1:8108{
            header_up X-Real-IP {http.request.remote}
            header_up X-Forwarded-For {http.request.remote}
            header_up X-Forwarded-Port {http.request.port}
            header_up X-Forwarded-Proto {http.request.scheme}
        }
}

pve.hotgirl.com {
	   encode gzip
        tls 112244@qq.com
        reverse_proxy  https://127.0.0.1:8777{
				transport http {
                        tls_insecure_skip_verify
                }
		}
}

不出意外,输入“https://pve.hotgirl.com” 就可以访问内网的PVE了。
在这里插入图片描述

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

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

相关文章

Actipro WinForms Studio Crack

Actipro WinForms Studio Crack 已验证Microsoft.NET 7兼容性。 添加了MetroDark配色方案。 添加了支持MetroLight和MetroDark颜色方案的MetroScrollBarRenderer。 添加了IWindowsColorScheme接口,该接口将替换对WindowsColorScheme的大多数引用。 添加了IWindowsCo…

Zookeeper客户端ZkClient、Curator的使用,史上最详细的教程来啦~

1 前言 本文主要介绍了操作Zookeeper的几种客户端的基础使用,希望对老铁们会有所帮助。 可以去操作zookeeper创建、删除、查询、修改znode节点 2 Zookeeper服务器客户端分类 目前,Zookeeper服务器有三种Java客户端: Zookeeper、Zkclient和…

inquirerjs

inquirerjs inquirerjs是一个用来实现命令行交互界面的工具集合。它帮助我们实现与用户的交互交流,比如给用户一个提醒,用户给我们一个答案,我们根据用户的答案来做一些事情,典型应用如plop等生成器工具。 npm install inquirer…

软测面试了一个00后,绝对能称为是内卷届的天花板

前言 公司前段缺人,也面了不少测试,结果竟然没有一个合适的。一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资也不低,面试的人很多,但平均水平很让人失望。令我印象最深的是一个00后测试员&#xf…

certum验证域名所有权

Certum证书支持 Email、文件上传、DNS解析 验证域名所有权。1 .Email 方式请确认自己域名已开通,域名邮箱。仅支持以下邮箱:adminyourdomain.comadministratoryourdomain.comwebmasteryourdomain.compostmasteryourdomain.comhostmasteryourdomain.com收…

深度学习笔记:卷积神经网络(1)

1 卷积神经网络整体结构 卷积神经网络(CNN)相比全连接网络多了卷积层和池化层。对于全连接网络,所有相邻层的神经元都用Affine层进行连接,如图中即为Affine-ReLU的连接组合。 卷积神经网络则包含卷积层和池化层与激活函数相连&a…

后端Java随机比大小游戏实战讲解

## - 利用print打印输出提示用户 ## - 利用Scanner函数抓取数据 ## - 利用Math方法实现随机数 #### 1.首先用到的是print函数,对用户进行提醒进一步的操作 通过System.out.print();提示用户进行选择买大买小。 #### 2.然后利用Scanner函数,对用户输出…

Spring Bean生命周期七大阶段-Java八股面试(七)

系列文章目录 第一章 ArrayList-Java八股面试(一) 第二章 HashMap-Java八股面试(二) 第三章 单例模式-Java八股面试(三) 第四章 线程池和Volatile关键字-Java八股面试(四) 第五章 ConcurrentHashMap-Java八股面试(五) 第六章 spring之refresh流程-Java八股面试(六) 提示&…

HTTPS是怎么加密数据的?

HTTPS是怎么加密数据的?对安全或密码学基础有了解的同学,应该知道常见的加密手段。一般来说,加密分为对称加密、非对称加密(也叫公开密钥加密)对称加密对称加密的意思就是,加密数据用的密钥,跟解…

儿童反复感染,是体质差还是免疫缺陷?

原发性免疫缺陷病(PIDs)它是一组由遗传因素或先天性免疫系统发育不良引起的免疫系统功能障碍综合征,可涉及固有免疫或适应性免疫。在中国,PID的中位发病率为6个月,男孩的发病率通常高于女孩。▼分类目前,国…

LearnOpenGL-光照-2.基础光照

本人刚学OpenGL不久且自学,文中定有代码、术语等错误,欢迎指正 我写的项目地址:https://github.com/liujianjie/LearnOpenGLProject 文章目录基础光照环境光照漫反射光照法向量计算漫反射光照最后一件事镜面光照基础光照 简介 现实世界的光照…

JavaEE初阶---初始进程

系统分配资源的最小单元--进程啥是进程看看进程操作系统如何管理进程PCB中的一些属性pid(进程id)内存指针文件描述符表进程调度并行和并发:进程调度的特性状态:优先级:记账信息:上下文:虚拟地址空间进程间交互我们日常使用计算机,大致可以抽象成如下形式:自上向下依次是 各种软…

易优cms switch 条件判断标签使用方法

【基础用法】 标签:switch 描述:简单条件判断,比if判断标签少些不等于相同功能,视个人习惯而用。 用法: {eyou:switch name$eyou.field.has_children} {eyou:case value1}当前栏目列表的栏目ID有1个下级栏目{/eyo…

跨境电商卖家如何应对拒付、盗卡

跨境电商主要是通过电子商务平台进行交易,在平台上完成支付结算,并通过国际物流将商品送达买方,从而实现跨国零售交易。与传统贸易相比,跨境电商存在交易链条更短、回款周期更快、数据及时透明等优势。商务部数据显示,…

sumifs的交叉 表的例子

比如这样,那么冰箱绿山店的栏位中,SUMIFS($D$3:$D$10,$B$3:$B$10,$F3,$C$3:$C$10,G$2)就是把求和范围,条件1设置为固定列的复合引用,条件2设置为固定行的复合引用即可。

LeetCode 1653. Minimum Deletions to Make String Balanced【字符串,动态规划,枚举】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

shell基本知识

为什么学习和使用Shell编程 什么是Shell shell的起源 shell的功能 shell的分类 如何查看当前系统支持的shell? 如何查看当前系统默认shell? 驼峰语句 shell脚本的基本元素 shell脚本编写规范 shell脚本的执行方式 shell脚本的退出状态 &#xf…

数位dp-- 数字游戏

题目 思路 也是一道比较典型的数位dp的问题,关键的思想跟我上一篇博客很像, 首先把区间值变成[1,Y]-[1,X-1]的值,然后单独计算得到结果。 总的来说就是把这个数的每一位都单独拿出来,然后根据选0-an-1和选**an**两种方案单独计算&…

LeetCode 热题 C++ 538. 把二叉搜索树转换为累加树 543. 二叉树的直径 560. 和为 K 的子数组

538. 把二叉搜索树转换为累加树 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下,二…

Java基础算法题

目录 练习一 : 优化代码 扩展 : CRTL Alt M 自动抽取方法 练习二: 方法1: 方法2: 方法3: Math : 顾名思义,Math类就是用来进行数学计算的,它提供了大量的静态方法来便于我们实现数学计算: 练习三 : 练习四 : 练习五: 练习…