当前位置: 首页 > article >正文

frp软件实现网络穿透

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 = 7100

webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "username"
webServer.password = "passwd"

log.to = "/frpslog/frps.log"
log.level = "info"
log.maxDays = 3

auth.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 server
     Loaded: 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 ago
   Main PID: 146916 (frps)
      Tasks: 7 (limit: 9453)
     Memory: 15.9M (peak: 30.7M)
        CPU: 33.300s
     CGroup: /system.slice/frps.service
             └─146916 /data/software/frp_0.61.0_linux_amd64/frps -c /data/software/frp_0.61.0_linux_amd64/frps.toml

Nov 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 = true

log.to = "D:/Software/frp_0.59.0_windows_amd64/frpc.log"
log.level = "info"
log.maxDays = 3

auth.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.kler.cn/a/419570.html

相关文章:

  • 《DSL-FIQA》论文翻译
  • “指标管理系统”是什么?企业如何搭建指标管理系统?
  • Vue.js 实现输入框清空功能的两种方式
  • 活着就好20241203
  • leetcode 之二分查找(Java实现)(1)
  • python股票数据分析(Pandas)练习
  • 【智慧园区】智慧产业园区能源管控系统解决方案,智慧工业园区解决方案(Word原件)
  • RT-Thread软件环境配置基础
  • React 路由(React Router):在 React 应用中管理路由
  • 信息安全之网络安全防护
  • 计算机网络(架构)
  • 专业解析 .bashrc 中 ROS 工作空间的加载顺序及其影响 ubuntu 机器人
  • 23种设计模式之适配器模式
  • neo4j如何存储关于liquidity structure的层次和关联结构
  • 设计模式之模板模式
  • qt6.4.0+visual studio2022+opencv
  • Linux系统编程之进程创建
  • 用 Python 从零开始创建神经网络(十一):使用样本外数据进行测试
  • CMAKE的使用
  • 数字经济发展的新视角:数字产业化、数据资产化、产业数字化与数据产业
  • 详解LinkedList中的底层实现
  • 2411rust,1.83
  • SpringBoot集成Milvus|(实现向量的存储和查询)
  • go使用mysql实现增删改查操作
  • 【大数据技术基础 | 实验十四】Kafka实验:订阅推送示例
  • WPS for Mac免登录使用工具栏