frp内网穿透https

news2024/11/24 0:01:46

在公网服务器搭建frps(service),在内网本地机子搭建frpc(client),流量通过访问公网ip,经过frps服务端转发到fprc客户端,fprc再转发到本地web应用。 

官方下载地址​ https://github.com/fatedier/frp/releases
官方文档地址https://gofrp.org/docs/

服务端:frp_0.44.0_linux_amd64.tar.gz
客户端:frp_0.44.0_windows_amd64.zip

一、http

服务端frps(公网服务器)

这里我用虚拟机模拟了一台公网服务器:192.168.111.201

# 解压
tar -xzvf frp_0.44.0_linux_amd64.tar.gz
cd frp_0.44.0_linux_amd64
# 配置服务端
vi frps.ini

配置 frps.ini

[common]
# frp服务端的端口,frp客户端需要连接这个端口握手
bind_port = 7000
# 公网服务端对外提供的http端口
vhost_http_port=8080

 启动服务端

./frps -c frps.ini

后台启动运行服务端

nohup ./frps -c frps.ini >/dev/null 2>&1 &

客户端frpc(内网本地)

配置 frpc.ini

[common]
# frps服务端的ip和端口
server_addr = 192.168.111.201
server_port = 7000

[web01]
type = http
# 本地web应用的ip和端口
local_ip = 127.0.0.1
local_port = 8080
#公网服务器的ip或域名
custom_domains = 192.168.111.201

到解压根目录启动客户端

frpc -c frpc.ini

访问公网ip已经可以反向代理到本地web服务了。 

以上就是一个简单的内网穿透 http 例子。

二、https

使用官方推荐的如下配置:

frps.ini

[common]
bind_port = 7000
vhost_https_port = 443

frpc.ini

[common]
server_addr = 192.168.111.201
server_port = 7000

[plugin_https2https]
type = https
custom_domains = 192.168.111.201
plugin = https2https
plugin_local_addr = 127.0.0.1:8443
#plugin_crt_path = ./server.crt
#plugin_key_path = ./server.key
plugin_host_header_rewrite = 127.0.0.1
plugin_header_X-From-Where = frp

结果一直报如下错误,没找到解决办。 

三、tcp实现https

研究了好久,才反应过来,http协议在应用层,tcp在传输层,且http是基于tcp的。
既然https失败了,直接转发tcp就是,把ssl放在本地web应用中就可以了,frp只做tcp流量转发。

 frps.ini

[common]
bind_port = 7000

frpc.ini 

[common]
server_addr = 192.168.111.201
server_port = 7000

[tcp]
type = tcp
# 本地web应用的ip和端口
local_ip = 127.0.0.1
local_port = 8443
# 公网服务器提供给外网访问的端口
remote_port = 443

 四、安全加固


上面有2个不安全的地方:
1、frpc 和 frps 之间的身份验证不安全,默认为 token,这种方式存在被中间人攻击的威胁。
2、frpc 和 frps 之间的流量为加密,可以通过 TLS 协议加密,解决被中间人攻击的威胁。

 frps.ini

[common]
#frps服务端监听的端口,frpc客户端要来连接。
bind_port = 7000
#密码设置复杂点,frps服务端密码和frpc客户端密码要一致。
token = mm123456789

frpc.ini 

[common]
# frps服务端的ip和端口
server_addr = 192.168.111.201
server_port = 7000
#密码设置复杂点,frps服务端密码和frpc客户端密码要一致。
token = mm123456789

[tcp]
type = tcp
# 本地web应用的ip和端口
local_ip = 127.0.0.1
local_port = 8443
# 公网服务器提供给外网访问的端口
remote_port = 443

双向验证

双向验证即 frpc 和 frps 通过本地 ca 证书去验证对方的身份。理论上 frpc 和 frps 的 ca 证书可以不同,只要能验证对方身份即可。

frps.ini 

# frps.ini
[common]
#frps服务端监听的端口,frpc客户端要来连接。
bind_port = 7000
#密码设置复杂点,frps服务端密码和frpc客户端密码要一致。
token = mm123456789

tls_cert_file = ./server.crt
tls_key_file = ./server.key
tls_trusted_ca_file = ./ca.crt

frpc.ini  

# frpc.ini
[common]
# frps服务端的ip和端口
server_addr = 192.168.111.201
server_port = 7000
#密码设置复杂点,frps服务端密码和frpc客户端密码要一致。
token = mm123456789

# frpc开启TLS加密功能
tls_enable = true
tls_cert_file = ./client.crt
tls_key_file = ./client.key
tls_trusted_ca_file = ./ca.crt

[tcp]
type = tcp
# 本地web应用的ip和端口
local_ip = 127.0.0.1
local_port = 8443
# 公网服务器提供给外网访问的端口
remote_port = 443


生成SAN 证书

1、准备默认 my-openssl.cnf 配置文件于当前目录

cat > my-openssl.cnf << EOF
[ ca ]
default_ca = CA_default
[ CA_default ]
x509_extensions = usr_cert
[ req ]
default_bits        = 2048
default_md          = sha256
default_keyfile     = privkey.pem
distinguished_name  = req_distinguished_name
attributes          = req_attributes
x509_extensions     = v3_ca
string_mask         = utf8only
[ req_distinguished_name ]
[ req_attributes ]
[ usr_cert ]
basicConstraints       = CA:FALSE
nsComment              = "OpenSSL Generated Certificate"
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid,issuer
[ v3_ca ]
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints       = CA:true
EOF

2、生成默认CA

openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -subj "/CN=example.ca.com" -days 3650 -out ca.crt

3、生成服务端证书

将 192.168.111.201 改成自己的服务端的ip

openssl genrsa -out server.key 2048

openssl req -new -sha256 -key server.key \
    -subj "/C=XX/ST=DEFAULT/L=DEFAULT/O=DEFAULT/CN=192.168.111.201" \
    -reqexts SAN \
    -config <(cat my-openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:localhost,IP:127.0.0.1,DNS:server.com,IP:192.168.111.201")) \
    -out server.csr

openssl x509 -req -days 3650 -sha256 \
	-in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
	-extfile <(printf "subjectAltName=DNS:localhost,IP:127.0.0.1,DNS:server.com,IP:192.168.111.201") \
	-out server.crt

4、生成客户端证书

使用 who 命令查询客户端的ip地址。我这里是192.168.111.1
将 192.168.111.1 改成自己的客户端的ip

openssl genrsa -out client.key 2048
openssl req -new -sha256 -key client.key \
    -subj "/C=XX/ST=DEFAULT/L=DEFAULT/O=DEFAULT/CN=192.168.111.1" \
    -reqexts SAN \
    -config <(cat my-openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:client.com,IP:192.168.111.1")) \
    -out client.csr

openssl x509 -req -days 3650 -sha256 \
    -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
	-extfile <(printf "subjectAltName=DNS:client.com,IP:192.168.111.1") \
	-out client.crt

最终生成了10个文件。
server.crt、server.key、ca.crt 拷贝到 frp服务端解压目录下。
client.crt、client.key、ca.crt 拷贝到 frp客户端解压目录下。

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

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

相关文章

智能门锁“激战正酣”

近年来&#xff0c;智能化已经成为了高频词&#xff0c;越来越多的行业都在朝着智能化方向发展&#xff0c;家居行业也不例外。受技术升级、居民收入水平提高等多重因素影响&#xff0c;整个智能家居行业呈现出了蓬勃发展态势。据亿欧智库预测&#xff0c;2025年中国智能家居市…

客运车票网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 题目&#xff1a;基于Wb的公路客运车票信息管理系统设计与实现 时了解客运站动态。 角色&#xff1a;乘客、管理员 (2)车…

[附源码]Node.js计算机毕业设计-高校人事管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

C++设计模式的个人理解 繁琐的底层需要合理设计

一、为什么会有设计模式 由于每个人自身的能力、所在的层次、看问题的角度都不同&#xff0c;仅凭直觉“对现实建模”&#xff0c;很有可能会生成一些大小不均、职责不清、关系混乱的对象&#xff0c;最后搭建出一个虽然可以运行&#xff0c;但却难以理解、难以维护的系统。为此…

基于Java+Mysql实现酒店预订系统【100010045】

酒店预订系统 1.引言 1.1编制目的 1.详细完成对酒店预订系统的概要设计&#xff0c; 2.达到指导详细设计和开发的目的&#xff0c; 3.同时实现和测试人员及用户的沟通。 3.本报告面向开发人员&#xff0c;测试人员及最终用户的编写额&#xff0c;是了解系统的导航。 1.2…

Flink基本转换算子

文章目录1.映射&#xff08;map&#xff09;2.过滤&#xff08;filter&#xff09;3.扁平映射&#xff08;flatMap&#xff09;4.按键分区&#xff08;keyBy&#xff09;5. 简单聚合&#xff08;sum&#xff0c;min&#xff0c;max等&#xff09;6.归约聚合&#xff08;reduce&…

m基于LDPC+QPSK通信链路误码率matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 LDPC ( Low-density Parity-check&#xff0c;低密度奇偶校验&#xff09;码是由 Gallager 在1963 年提出的一类具有稀疏校验矩阵的线性分组码 (linear block codes)&#xff0c;然而在接下来的 …

第五届“强网”拟态防御国际精英挑战赛在南京举行——开辟网络安全新赛道 引领网络弹性新优势

12月15日&#xff0c;第五届“强网”拟态防御国际精英挑战赛在南京紫金山实验室隆重开幕&#xff0c;来自国内外60支顶尖战队将通过云上和线下相结合的方式展开72小时的高强度对抗。大赛组委会主席、紫金山实验室首席科学家、中国工程院邬江兴院士指出&#xff0c;本届挑战赛瞄…

jvm内存模型+类加载机制+垃圾手机器

1、类加载器分类 1、引导类加载器&#xff0c;负责加载支撑Jre/lib目录下的核心类库 2、扩展类加载器&#xff1a;负责加载Jre/lib目录下的ext扩展类jar包 3、应用程序类加载器&#xff1a;负责加载classpath下的类包 4、自定义类加载器&#xff1a;负责加载用户自定义路径下的…

值得思索的:ArrayList和线性表,你确定错过这次机会

线性表&#xff1a; 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结 构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条…

Go项目实战:01-聊天室+map竞争需要上锁

实现一个聊天室&#xff08;群&#xff09;&#xff1a; 功能分析&#xff1a; 1、上线下线2、聊天&#xff1a;其他人和自己都可以看到聊天消息3、查询当前的聊天室用户所有人的名字4、可以修改自己的名字5、超时潜水踢出机制 技术点分析&#xff1a; 1、socket tcp编程2、…

Adam算法及python实现

文章目录算法介绍代码实现结果展示参考算法介绍 Adam算法的发展经历了&#xff1a;SGD->SGDM->SGDNA->AdaGrad->AdaDelta->Adam->Adamax的过程。它是神经网络优化中的常用算法&#xff0c;在收敛速度上比较快&#xff0c;比SGD对收敛速度的纠结上有了很大的…

单商户商城系统功能拆解46—应用中心—足迹气泡

单商户商城系统&#xff0c;也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法&#xff0c;例如拼团&#xff0c;秒杀&#xff0c;砍价&#xff0c;包邮…

基于微信小程序的课程分享平台-计算机毕业设计

项目介绍 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整…

[附源码]Node.js计算机毕业设计高校就业管理信息系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

学生竞赛网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 模块划分&#xff1a;通知类型、通知信息、学院信息、学生信息、学科信息、竞赛信息、报名信 息、成果上传、评分排名 管…

YOLOv5小目标切图检测

当我们在检测较大分辨率的图片时&#xff0c;对小目标的检测效果一直是较差的&#xff0c;所以就有了下面几种方法&#xff1a; 将图片压缩成大尺寸进行训练&#xff08; 想法&#xff1a;没显存&#xff0c;搞不来&#xff09;添加小检测头&#xff08;想法&#xff1a;P5模型…

【爬虫实战项目】Python爬虫批量下载相亲网站数据并保存本地(附源码)

前言 今天给大家介绍的是Python爬虫批量下载相亲网站图片数据&#xff0c;在这里给需要的小伙伴们代码&#xff0c;并且给出一点小心得。 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫&#xff0c;基本的是加请求头&#xff0c;但是这样的纯文本数据爬取的人会…

数据结构---树和二叉树

树和二叉树定义二叉树二叉树的物理结构链式存储数组二叉树应用查找维持相对顺序二叉树的遍历深度优先遍历前序遍历中序遍历后序遍历二叉树广度优先遍历层序遍历定义 有且仅有一个特定的称为根的节点。当n>1时&#xff0c;其余节点可分为m&#xff08;m>0&#xff09;个互…

数据结构与算法——Java实现栈、逆波兰计算器(整数加减乘除)

目录 一、栈 1.1 基本介绍 1.2 栈的思路分析 1.3 栈的代码实现 二、栈实现综合计算器 2.1 思路分析 2.2 代码实现&#xff08;中缀表达式实现&#xff09; 三、栈的前缀&#xff08;波兰&#xff09;、中缀、后缀&#xff08;逆波兰&#xff09;表达式 3.1 表达式的介绍…