frp软件实现网络穿透

embedded/2024/12/3 5:40:56/

1. 名词

1.1. 网络穿透

网络穿透是一种技术,用于解决内网设备或服务无法直接被外部网络访问的问题。通常,内网设备位于路由器后面,并没有公网 IP 地址,因此外部用户不能直接连接到这些设备。网络穿透通过一些特定的技术手段,使得外部用户能够访问这些内网设备。

1.2. FRP

FRP (Fast Reverse Proxy) 是一种常用的网络穿透工具,它通过代理服务器实现内网穿透,允许内网的服务被外网访问。FRP 支持多种协议(如 HTTP、HTTPS、TCP 等),并且支持反向代理和动态 DNS 功能,使用起来较为简便。

2. FRP

2.1. FRP 的基本工作原理:

  1. 客户端(frpc):在内网设备上运行,负责与 FRP 服务器建立连接。
  2. 服务器端(frps):部署在公网服务器上,负责接收外部的请求,并将请求转发到对应的内网客户端。
  3. 隧道建立:内网设备通过客户端与公网的 FRP 服务器建立隧道连接,外部请求通过该隧道被转发到内网服务。

2.2. FRP 的应用场景:

  • 远程访问内网服务:比如你有一台内网 Web 服务器,你希望外部访问时通过 FRP 访问到内网 Web 服务。
  • IoT 设备远程管理:对于很多部署在内网中的 IoT 设备,可以通过 FRP 实现远程控制。
  • 办公场景:在公司内部网络中部署服务,可以通过 FRP 实现对外的访问。

2.3. FRP (Fast Reverse Proxy) 详细介绍

FRP (Fast Reverse Proxy) 是一个高性能的反向代理应用,专门用于内网穿透。它使得处于内网中的服务能够通过一个公网服务器被外部访问,常用于连接内网的数据库、Web 服务、远程桌面等服务。

2.3.1. 主要特性:

  • 支持多种协议:FRP 支持 TCPUDPHTTPHTTPSWebSocket 等多种协议。
  • 反向代理:能够将内网的服务通过一个外部服务器暴露给互联网。
  • 负载均衡:通过支持多个隧道转发,可以在多个后端服务之间实现负载均衡。
  • 多种加密方式:FRP 支持加密和压缩,可以保护数据传输的安全性。
  • 动态域名:支持动态 DNS 和自定义域名映射。
  • 简单配置:FRP 的配置文件结构简单,容易上手。
  • 高性能:FRP 使用 Go 语言编写,具有较高的性能,能够处理大量并发连接。

2.3.2. 组成:

  1. FRP 服务器端(frps):部署在公网服务器上,负责接收外部请求并转发到对应的内网客户端。
  2. FRP 客户端(frpc):运行在内网设备上,负责将内网服务暴露到外网,客户端与服务器端之间建立隧道连接。

2.3.3. 工作原理:

FRP 的工作原理基于代理技术。它通过一个公网服务器作为中介,将内网客户端和外部请求连接起来。客户端和服务器之间通过一个持久的 TCP 连接保持通信,并将请求和响应数据进行转发。

2.3.4. FRP 的常见应用场景:

  1. 远程访问:使得部署在内网的服务(如 Web 应用、数据库、SSH 服务等)能够通过公网 IP 或域名进行访问。
  2. IoT 设备连接:支持远程控制和监控内网中的设备,如路由器、摄像头等。
  3. 内网穿透:当用户位于 NAT 网络或防火墙后时,通过 FRP 实现内网与外网的通信。
  4. 私有云服务:可以将一些私有服务(如文件服务器)暴露给外部使用。

2.3.5. 主要功能:

  • TCP 和 UDP 转发:支持将 TCP 和 UDP 数据流转发到内网服务。
  • HTTP/HTTPS 反向代理:支持 Web 服务的代理,能够将外部请求转发到内网的 HTTP/HTTPS 服务。
  • WebSocket 支持:允许 WebSocket 连接通过 FRP 转发,适用于实时应用。
  • 多端口和多协议支持:支持配置多个端口和协议进行反向代理。
  • 自定义域名和路径:支持设置自定义域名,方便管理。
  • 插件支持:支持一些额外的功能插件,如加密、压缩等。

2.3.6. 开发语言和架构:

  • 开发语言:FRP 是使用 Go 语言(Golang)开发的,这使得其具备高效的性能,尤其在并发处理方面具有优势。
  • 跨平台支持:FRP 支持 Linux、Windows、macOS 等多种操作系统。

2.3.7. GitHub 地址:

FRP 的源代码可以在 GitHub 上找到:

  • FRP GitHub 地址

在 GitHub 上,你可以找到 FRP 的源码、文档、示例配置、常见问题解答以及社区的贡献。

2.3.8. 其他相关资源:

  1. 官方文档:FRP 提供了非常详细的 官方文档,包括如何进行安装、配置和使用的说明。
  2. Docker 支持:FRP 也支持 Docker 部署,可以在没有过多配置的情况下直接在 Docker 容器中使用。
  3. 社区和讨论:FRP 拥有活跃的社区支持,可以通过 GitHub Issues 或者其他技术论坛与开发者和使用者交流问题。

3. 安装使用过程

3.1. 下载

下载地址在github上[Releases · fatedier/frp]
在这里插入图片描述

一般需要下载两个,像笔者就下载了一个linux的,一个windows的:

  • Linux的安装在公网Ip的服务器上
  • Windows安装在家中主机上

在这里插入图片描述

3.2. Linux安装步骤

  1. 下载符合版本的Linux版本上传到服务器内,并解压
tar -xzvf rp_0.61.0_linux_amd64.tar.gz
  1. 配置frps.toml配置文件
bindAddr = "0.0.0.0"
bindPort = 7100
kcpBindPort = 7100webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "username"
webServer.password = "passwd"log.to = "/frpslog/frps.log"
log.level = "info"
log.maxDays = 3auth.method = "token"
auth.token = "ceshi123456"allowPorts = [
{ start = 6000, end = 7000},
]
  1. 创建frps为服务并启动服务器
vim vim /etc/systemd/system/frps.service

将下列内容写入到文本中,需要修改路径

[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /data/software/frp_0.61.0_linux_amd64/frps -c /data/software/frp_0.61.0_linux_amd64/frps.toml[Install]
WantedBy = multi-user.target
  1. 设置启动,并设置自动启动
sudo systemctl start frps
systemctl status frps
systemctl restart frps
systemctl start frps && systemctl enable frps
systemctl restart frps
  1. 查看frps服务状态
# systemctl status frps
● frps.service - frp serverLoaded: loaded (/etc/systemd/system/frps.service; enabled; preset: enabled)Active: active (running) since Mon 2024-11-18 16:38:58 CST; 1 week 6 days agoMain PID: 146916 (frps)Tasks: 7 (limit: 9453)Memory: 15.9M (peak: 30.7M)CPU: 33.300sCGroup: /system.slice/frps.service└─146916 /data/software/frp_0.61.0_linux_amd64/frps -c /data/software/frp_0.61.0_linux_amd64/frps.tomlNov 18 16:38:58 iv-ydinw2ob28cva4f6np8r systemd[1]: Started frps.service - frp server.

3.3. 查看Web管理界面运行状态

访问你的地址,记得开启防火墙许可以及云服务器的安全组策略

frps dashboard 记得修改ip地址信息

在这里插入图片描述

3.4. 继续安装客户端

前面服务端使用的frps,那么客户端使用的是frpc

  1. 修改frpc.toml
  • serverAddr: 修改为前面的公网服务器的IP地址
  • auth.token: 记得与前面frps.toml中的值保持一致
  • proxies:就比较好理解了,如第一个则是:将本机的3000端口暴露到公网服务器的6002上。
serverAddr = "127.0.0.1"
serverPort = 7100
loginFailExit = truelog.to = "D:/Software/frp_0.59.0_windows_amd64/frpc.log"
log.level = "info"
log.maxDays = 3auth.method = "token"
auth.token = "ceshi123456"[[proxies]]
name = "local_knowledge"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3000
remotePort = 6002[[proxies]]
name = "local_gpt"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 6003
  1. 启动服务
D:\Software\frp_0.59.0_windows_amd64>frpc.exe -c ./frpc.toml

访问地址:http://172.0.0.1:6002

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/embedded/142522.html

相关文章

Jenkins Nginx Vue项目自动化部署

目录 一、环境准备 1.1 Jenkins搭建 1.2 NVM和Nodejs安装 1.3 Nginx安装 二、Jenkins配置 2.1 相关插件安装 2.2 全局工具安装 2.3 环境变量配置 2.4 邮箱配置(构建后发送邮件) 2.5 任务配置 三、Nginx配置 3.1 配置路由转发 四、部署项目 …

从零开始使用GOT-OCR2.0——多模态OCR项目:微调数据集构建 + 训练(解决训练报错,成功实验微调训练)

在上一篇文章记录了GOT-OCR项目的环境配置和基于官方模型参数的基础使用。环境安装的博文快速链接: 从零开始使用GOT-OCR2.0——多模态通用型OCR(非常具有潜力的开源OCR项目):项目环境安装配置 测试使用-CSDN博客 本章在环境配置…

C 语言学习的经典书籍有哪些?

学习C语言的理由 C语言是一种程席设计语言,它是由美国AT&T公司贝尔实验室的Dennis Ritchie于1972年发明的。C语言之所以流行,是因为它简单易用。学习C语言的几个理由如下: (1)C、C#和Java使用一种被称为面向对象程序设计(0bject-Orient…

java的Webclient对象怎解解析400状态码

在Java中使用WebClient处理400状态码,可以通过检查响应状态并根据状态码进行相应的错误处理。以下是几种处理400状态码的方法: 使用onStatus方法判断和处理错误: 你可以使用WebClient的retrieve()方法链中的onStatus方法来检查响应状态码。如…

UE5 MakeSlateBrush 节点的作用

在 Unreal Engine 5 (UE5) 中,MakeSlateBrush 节点是用于 创建或设置一个 Slate Brush 的节点。Slate 是 Unreal Engine 中的 UI 框架,用于构建编辑器界面以及游戏中的用户界面(UI)。Slate Brush 是 Slate UI 中的一种资源类型&am…

速盾:高防 CDN 可以配置客户端请求超时配置?

在高防 CDN(Content Delivery Network,内容分发网络)的运行管理中,客户端请求超时配置是一项重要的功能设定,它对于优化网络资源分配、保障服务质量以及维护系统稳定性有着关键意义。 一、客户端请求超时配置的概念 …

在开发环境中,前端(手机端),后端(电脑端),那么应该如何设置iisExpress

首先,要想手机端应用能成功请求后端,两个设备至少需在同一个局域网内,且IP地址互通; 因为ajax是http(s)://IP地址端口号的方式请求,但是iisExpress默认是localhost如何解决,并没有IP地址,所以手…

鸿蒙修饰符

文章目录 一、引言1.1 什么是修饰符1.2 修饰符在鸿蒙开发中的重要性1.3 修饰符的作用机制 二、UI装饰类修饰符2.1 Styles修饰符2.1.1 基本概念和使用场景2.1.2 使用示例2.1.3 最佳实践 2.2 Extend修饰符2.2.1 基本概念2.2.2 使用示例2.2.3 Extend vs Styles 对比2.2.4 使用建议…